.travis.yml | 28 + Makefile.am | 1 VERSION | 2 bin/.cherry-ignore | 20 + bin/get-pick-list.sh | 2 configure.ac | 10 debian/changelog | 10 debian/libegl1-mesa.symbols | 2 debian/libgl1-mesa-glx.symbols | 2 debian/mesa-common-dev.install | 1 debian/not-installed | 1 docs/relnotes/12.0.3.html | 3 include/GL/mesa_glinterop.h | 12 install-gallium-links.mk | 4 src/Makefile.am | 27 + src/compiler/glsl/ir_hv_accept.cpp | 2 src/compiler/nir/nir_intrinsics.h | 2 src/compiler/nir/nir_lower_alu_to_scalar.c | 3 src/compiler/nir/nir_opcodes.py | 2 src/compiler/spirv/spirv_to_nir.c | 8 src/compiler/spirv/vtn_cfg.c | 23 + src/compiler/spirv/vtn_private.h | 4 src/compiler/spirv/vtn_variables.c | 169 +++++----- src/egl/drivers/dri2/egl_dri2.c | 18 + src/egl/drivers/dri2/egl_dri2.h | 2 src/egl/drivers/dri2/platform_android.c | 3 src/egl/drivers/dri2/platform_wayland.c | 15 src/egl/drivers/dri2/platform_x11.c | 14 src/egl/drivers/dri2/platform_x11_dri3.c | 12 src/egl/main/eglapi.c | 8 src/egl/main/egldefines.h | 3 src/egl/main/eglglobals.c | 8 src/egl/main/eglsurface.c | 6 src/egl/main/eglsync.c | 7 src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 9 src/gallium/auxiliary/util/u_box.h | 31 + src/gallium/auxiliary/vl/vl_winsys_drm.c | 3 src/gallium/drivers/freedreno/a3xx/a3xx.xml.h | 2 src/gallium/drivers/freedreno/a3xx/fd3_draw.c | 3 src/gallium/drivers/freedreno/a3xx/fd3_emit.c | 78 +++- src/gallium/drivers/freedreno/a3xx/fd3_program.c | 15 src/gallium/drivers/freedreno/a3xx/fd3_program.h | 3 src/gallium/drivers/freedreno/ir3/ir3_shader.c | 6 src/gallium/drivers/freedreno/ir3/ir3_shader.h | 1 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp | 4 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 3 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp | 10 src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 147 +++++--- src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 12 src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp | 4 src/gallium/drivers/nouveau/nv30/nv30_transfer.c | 3 src/gallium/drivers/nouveau/nv50/nv50_program.c | 3 src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 7 src/gallium/drivers/nouveau/nvc0/nvc0_tex.c | 2 src/gallium/drivers/r300/r300_context.c | 10 src/gallium/drivers/radeon/r600_texture.c | 5 src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 51 --- src/gallium/drivers/radeonsi/si_compute.c | 26 + src/gallium/drivers/radeonsi/si_shader.c | 10 src/gallium/drivers/radeonsi/si_state.c | 4 src/gallium/drivers/radeonsi/si_state_draw.c | 14 src/gallium/drivers/radeonsi/si_state_shaders.c | 11 src/gallium/state_trackers/clover/llvm/invocation.cpp | 2 src/gallium/state_trackers/dri/dri2.c | 11 src/gallium/state_trackers/nine/nine_shader.c | 2 src/gallium/state_trackers/nine/surface9.c | 1 src/gallium/state_trackers/nine/volume9.c | 2 src/gallium/state_trackers/va/surface.c | 36 +- src/gallium/state_trackers/vdpau/output.c | 2 src/gallium/state_trackers/xa/xa_tracker.c | 3 src/gallium/winsys/amdgpu/drm/amdgpu_surface.c | 17 + src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c | 3 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 3 src/gallium/winsys/svga/drm/vmw_screen.c | 3 src/gallium/winsys/vc4/drm/vc4_drm_winsys.c | 3 src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 2 src/gbm/backends/dri/gbm_dri.c | 8 src/gbm/main/gbm.c | 3 src/glx/dri3_glx.c | 11 src/glx/glxcmds.c | 7 src/intel/genxml/Makefile.am | 1 src/intel/isl/isl_gen6.c | 2 src/intel/vulkan/anv_wsi_wayland.c | 1 src/intel/vulkan/anv_wsi_x11.c | 3 src/loader/loader_dri3_helper.c | 25 - src/loader/loader_dri3_helper.h | 1 src/mapi/Makefile.am | 3 src/mesa/Makefile.am | 10 src/mesa/drivers/dri/i965/brw_blorp.c | 10 src/mesa/drivers/dri/i965/brw_blorp.h | 3 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 12 src/mesa/drivers/dri/i965/brw_blorp_clear.cpp | 5 src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 5 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 7 src/mesa/drivers/dri/i965/gen6_clip_state.c | 2 src/mesa/drivers/dri/i965/gen7_cs_state.c | 3 src/mesa/drivers/dri/i965/gen8_ds_state.c | 3 src/mesa/drivers/dri/i965/gen8_ps_state.c | 2 src/mesa/drivers/dri/i965/intel_syncobj.c | 14 src/mesa/main/buffers.c | 71 ++-- src/mesa/main/fbobject.c | 16 src/mesa/main/formatquery.c | 15 src/mesa/main/get.c | 7 src/mesa/main/get_hash_params.py | 6 src/mesa/main/glformats.c | 8 src/mesa/state_tracker/st_atom_array.c | 98 ++--- src/mesa/state_tracker/st_atom_texture.c | 10 src/mesa/state_tracker/st_cb_clear.c | 10 src/mesa/state_tracker/st_draw.c | 15 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 102 ++---- 110 files changed, 967 insertions(+), 533 deletions(-)
New commits: commit 4602b8694b3a8996d5281fb16edd61256e90268d Author: Andreas Boll <andreas.boll....@gmail.com> Date: Fri Nov 11 16:35:25 2016 +0100 Upload to unstable. diff --git a/debian/changelog b/debian/changelog index 2ddafef..db8532e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -mesa (12.0.4-1) UNRELEASED; urgency=medium +mesa (12.0.4-1) unstable; urgency=medium * New upstream release. * not-installed: wglext.h got dropped from the tarball. @@ -6,7 +6,7 @@ mesa (12.0.4-1) UNRELEASED; urgency=medium it anymore. * Update symbols of libegl1-mesa and libgl1-mesa-glx. - -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 15:02:46 +0100 + -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 16:35:09 +0100 mesa (12.0.3-3) unstable; urgency=medium commit 785a48592a4e4732b6d34b7e3a24c377e758f613 Author: Andreas Boll <andreas.boll....@gmail.com> Date: Fri Nov 11 16:12:41 2016 +0100 Update symbols of libegl1-mesa and libgl1-mesa-glx. diff --git a/debian/changelog b/debian/changelog index 1d6a438..2ddafef 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ mesa (12.0.4-1) UNRELEASED; urgency=medium * not-installed: wglext.h got dropped from the tarball. * mesa-common-dev: Remove mesa_glinterop.h, upstream doesn't install it anymore. + * Update symbols of libegl1-mesa and libgl1-mesa-glx. -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 15:02:46 +0100 diff --git a/debian/libegl1-mesa.symbols b/debian/libegl1-mesa.symbols index 7dac2ff..0f5eb6c 100644 --- a/debian/libegl1-mesa.symbols +++ b/debian/libegl1-mesa.symbols @@ -1,4 +1,6 @@ libEGL.so.1 libegl1-mesa #MINVER# | libegl1-x11 + MesaGLInteropEGLExportObject@Base 12.0.4 + MesaGLInteropEGLQueryDeviceInfo@Base 12.0.4 eglBindAPI@Base 7.8.1 eglBindTexImage@Base 7.8.1 eglChooseConfig@Base 7.8.1 diff --git a/debian/libgl1-mesa-glx.symbols b/debian/libgl1-mesa-glx.symbols index 06e98ed..abaaf50 100644 --- a/debian/libgl1-mesa-glx.symbols +++ b/debian/libgl1-mesa-glx.symbols @@ -1,4 +1,6 @@ libGL.so.1 libgl1-mesa-glx | libgl1 + MesaGLInteropGLXExportObject@Base 12.0.4 + MesaGLInteropGLXQueryDeviceInfo@Base 12.0.4 glAccum@Base 0 glActiveShaderProgram@Base 12.0.1 glActiveTexture@Base 0 commit 4ce79b6e7c67510b07873bf12153744d7cce76e7 Author: Andreas Boll <andreas.boll....@gmail.com> Date: Fri Oct 21 13:32:01 2016 +0200 mesa-common-dev: Remove mesa_glinterop.h, upstream doesn't install it anymore. diff --git a/debian/changelog b/debian/changelog index 373574d..1d6a438 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,8 @@ mesa (12.0.4-1) UNRELEASED; urgency=medium * New upstream release. * not-installed: wglext.h got dropped from the tarball. + * mesa-common-dev: Remove mesa_glinterop.h, upstream doesn't install + it anymore. -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 15:02:46 +0100 diff --git a/debian/mesa-common-dev.install b/debian/mesa-common-dev.install index af8bf40..d9eb292 100644 --- a/debian/mesa-common-dev.install +++ b/debian/mesa-common-dev.install @@ -6,5 +6,4 @@ usr/include/GL/glx.h usr/include/GL/glxext.h usr/include/GL/glx_mangle.h usr/include/GL/internal/dri_interface.h -usr/include/GL/mesa_glinterop.h usr/lib/*/pkgconfig/dri.pc commit 4b812fd8ccb0b718d99fe2a61c15defd246dcff0 Author: Andreas Boll <andreas.boll....@gmail.com> Date: Fri Oct 21 12:06:25 2016 +0200 not-installed: wglext.h got dropped from the tarball. diff --git a/debian/changelog b/debian/changelog index 30112a4..373574d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ mesa (12.0.4-1) UNRELEASED; urgency=medium * New upstream release. + * not-installed: wglext.h got dropped from the tarball. -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 15:02:46 +0100 diff --git a/debian/not-installed b/debian/not-installed index 365fcd0..db39902 100644 --- a/debian/not-installed +++ b/debian/not-installed @@ -2,5 +2,4 @@ # Common list: NOT_INSTALLED := \ - usr/include/GL/wglext.h \ usr/lib/*/libglapi.so commit 2af47a0b269d0be21cb2f3a883fe3257acf3b774 Author: Andreas Boll <andreas.boll....@gmail.com> Date: Fri Nov 11 15:03:03 2016 +0100 Bump changelog diff --git a/debian/changelog b/debian/changelog index eebba38..30112a4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +mesa (12.0.4-1) UNRELEASED; urgency=medium + + * New upstream release. + + -- Andreas Boll <andreas.boll....@gmail.com> Fri, 11 Nov 2016 15:02:46 +0100 + mesa (12.0.3-3) unstable; urgency=medium * Limit libgbm1 dependency to !hurd-any (Closes: #841774). Thanks, commit 20370d4f1b3522ba32c01b52d1fb19909de4ac89 Author: Jonathan Gray <j...@jsg.id.au> Date: Sun Oct 16 23:16:19 2016 +1100 mesa: automake: include mesa_glinterop.h in distfile Add mesa_glinterop.h to the list of headers that will get included in the distfile as it is required to build Mesa itself. Corrects a regression introduced in a89faa2022fd995af2019c886b152b49a01f9392. Signed-off-by: Jonathan Gray <j...@jsg.id.au> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> (cherry picked from commit 23392abf506c71a6a1c5bfb04db64756e39315cb) diff --git a/src/Makefile.am b/src/Makefile.am index a519e8a..c0aa115 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -117,7 +117,8 @@ SUBDIRS += gallium endif EXTRA_DIST = \ - getopt hgl SConscript + getopt hgl SConscript \ + $(top_srcdir)/include/GL/mesa_glinterop.h AM_CFLAGS = $(VISIBILITY_CFLAGS) AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS) commit 72539c5e38e307c30c2408b1fa6813a4a7db5d41 Author: Emil Velikov <emil.veli...@collabora.com> Date: Thu Nov 10 21:03:41 2016 +0000 Update version to 12.0.4 Signed-off-by: Emil Velikov <emil.veli...@collabora.com> diff --git a/VERSION b/VERSION index 470ce40..f0ad792 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -12.0.3 +12.0.4 commit e7c14088707d0bd4dd8fceaec5d3fc529917a7df Author: Dave Airlie <airl...@redhat.com> Date: Thu Sep 15 13:58:33 2016 +1000 Revert "st/vdpau: use linear layout for output surfaces" This reverts commit d180de35320eafa3df3d76f0e82b332656530126. This is a radeon specific hack that causes problems on nouveau when combined with the SHARED flag later. If radeonsi needs a fix for this, please fix it in the driver. [chk] Using linear surfaces for this makes sense because tilling isn't beneficial and the surfaces can potentially be shared with other GPUs using the VDPAU OpenGL interop. [airlied] I think we need a flag that isn't SHARED/LINEAR that is more SHARED_OTHER_GPU. [mareko] Does radeonsi need PIPE_BIND_VIDEO_DECODE_OUTPUT that it would translate into linear ? [mareko] My only concern is decoding performance. If the decoder works in 64x1 blocks, tiling will hurt. That's the theory. I don't know how the decoder works. Cc: 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Acked-by: Christian König <christian.koe...@amd.com> Signed-off-by: Dave Airlie <airl...@redhat.com> Tested-by: Ilia Mirkin <imir...@alum.mit.edu> Tested-by: Nayan Deshmukh <nayan26deshm...@gmail.com> (I+A) (cherry picked from commit d0d5f7600c2e8ab8d0c153787185f7a534753edd) diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c index c644cc8..b278288 100644 --- a/src/gallium/state_trackers/vdpau/output.c +++ b/src/gallium/state_trackers/vdpau/output.c @@ -82,7 +82,7 @@ vlVdpOutputSurfaceCreate(VdpDevice device, res_tmpl.depth0 = 1; res_tmpl.array_size = 1; res_tmpl.bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET | - PIPE_BIND_LINEAR | PIPE_BIND_SHARED; + PIPE_BIND_SHARED; res_tmpl.usage = PIPE_USAGE_DEFAULT; pipe_mutex_lock(dev->mutex); commit 422e4da25c07605dd1d6bca99140a34790fd2d65 Author: Marek Olšák <marek.ol...@amd.com> Date: Wed Nov 2 18:59:22 2016 +0100 glx: make interop ABI visible again This was broken when the GLAPI use was removed from mesa_glinterop.h. Cc: 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Acked-by: Alex Deucher <alexander.deuc...@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> (cherry picked from commit 64c2593a5c33a98d880d141793360b44d07d1366) diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 6f76473..5ff4dd3 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -2717,7 +2717,7 @@ __glXGetUST(int64_t * ust) #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) -int +PUBLIC int MesaGLInteropGLXQueryDeviceInfo(Display *dpy, GLXContext context, struct mesa_glinterop_device_info *out) { @@ -2741,7 +2741,7 @@ MesaGLInteropGLXQueryDeviceInfo(Display *dpy, GLXContext context, return ret; } -int +PUBLIC int MesaGLInteropGLXExportObject(Display *dpy, GLXContext context, struct mesa_glinterop_export_in *in, struct mesa_glinterop_export_out *out) commit 1040360e9f494c5233979595ce19178c46e23942 Author: Marek Olšák <marek.ol...@amd.com> Date: Wed Nov 2 18:59:22 2016 +0100 egl: make interop ABI visible again This was broken when the GLAPI use was removed from mesa_glinterop.h. Cc: 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Acked-by: Alex Deucher <alexander.deuc...@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> (cherry picked from commit ee39d4456e7551b257343551d59e7c6a3388fdc0) diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 55243ec..127ca1e 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -1939,7 +1939,7 @@ _eglLockDisplayInterop(EGLDisplay dpy, EGLContext context, return MESA_GLINTEROP_SUCCESS; } -int +PUBLIC int MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context, struct mesa_glinterop_device_info *out) { @@ -1961,7 +1961,7 @@ MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context, return ret; } -int +PUBLIC int MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context, struct mesa_glinterop_export_in *in, struct mesa_glinterop_export_out *out) commit ad7d21bc3a01dd2d4fa4b129d8373047d097a71a Author: Marek Olšák <marek.ol...@amd.com> Date: Wed Nov 2 18:56:39 2016 +0100 egl: use util/macros.h I need the definition of PUBLIC. Cc: 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Acked-by: Alex Deucher <alexander.deuc...@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> (cherry picked from commit bf51b45313c7cc5ca792401f0cc29574aa9122cf) [Emil Velikov: Keep the MIN2 macro] Signed-off-by: Emil Velikov <emil.veli...@collabora.com> diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 02f9604..6099bc2 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -80,8 +80,6 @@ #include "eglimage.h" #include "eglsync.h" -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) - struct wl_buffer; struct dri2_egl_driver diff --git a/src/egl/main/egldefines.h b/src/egl/main/egldefines.h index 13a7563..6090fc3 100644 --- a/src/egl/main/egldefines.h +++ b/src/egl/main/egldefines.h @@ -34,6 +34,8 @@ #ifndef EGLDEFINES_INCLUDED #define EGLDEFINES_INCLUDED +#include "util/macros.h" + #ifdef __cplusplus extern "C" { #endif @@ -48,7 +50,6 @@ extern "C" { #define _EGL_VENDOR_STRING "Mesa Project" -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) #define MIN2(A, B) (((A) < (B)) ? (A) : (B)) #ifdef __cplusplus commit 3d4a219dd86eaab549e49c48ed1c8a0c922b5221 Author: Jason Ekstrand <jason.ekstr...@intel.com> Date: Fri Oct 21 12:09:38 2016 -0700 intel/blorp: Rework our usage of ralloc when compiling shaders Previously, we were creating the shader with a NULL ralloc context and then trusting in blorp_compile_fs to clean it up. The only problem was that blorp_compile_fs didn't clean up its context properly so we were leaking. When I went to fix that, I realized that it couldn't because it has to return the shader binary which is allocated off of that context and used by the caller. The solution is to make blorp_compile_fs take a ralloc context, allocate the nir_shaders directly off that context, and clean it all up in whatever function creates the shader and calls blorp_compile_fs. Signed-off-by: Jason Ekstrand <ja...@jlekstrand.net> Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> Reviewed-by: Timothy Arceri <timothy.arc...@collabora.com> Cc: "12.0, 13.0" <mesa-sta...@lists.freedesktop.org> (cherry picked from commit 43dadb6edd5e3e3e10b1198184a9f75556edad49) [Emil Velikov: attribute src/intel/blorp file movement] Signed-off-by: Emil Velikov <emil.veli...@collabora.com> Conflicts: src/intel/blorp/blorp.c src/intel/blorp/blorp_clear.c src/intel/blorp/blorp_priv.h src/mesa/drivers/dri/i965/brw_blorp_blit.cpp diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c index 9590968..6be82c5 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.c +++ b/src/mesa/drivers/dri/i965/brw_blorp.c @@ -167,7 +167,8 @@ nir_uniform_type_size(const struct glsl_type *type) } const unsigned * -brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir, +brw_blorp_compile_nir_shader(struct brw_context *brw, void *mem_ctx, + struct nir_shader *nir, const struct brw_wm_prog_key *wm_key, bool use_repclear, struct brw_blorp_prog_data *prog_data, @@ -175,13 +176,6 @@ brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir, { const struct brw_compiler *compiler = brw->intelScreen->compiler; - void *mem_ctx = ralloc_context(NULL); - - /* Calling brw_preprocess_nir and friends is destructive and, if cloning is - * enabled, may end up completely replacing the nir_shader. Therefore, we - * own it and might as well put it in our context for easy cleanup. - */ - ralloc_steal(mem_ctx, nir); nir->options = compiler->glsl_compiler_options[MESA_SHADER_FRAGMENT].NirOptions; diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h index 7ec5875..133a8ac 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.h +++ b/src/mesa/drivers/dri/i965/brw_blorp.h @@ -366,7 +366,8 @@ struct brw_blorp_blit_prog_key void brw_blorp_init_wm_prog_key(struct brw_wm_prog_key *wm_key); const unsigned * -brw_blorp_compile_nir_shader(struct brw_context *brw, struct nir_shader *nir, +brw_blorp_compile_nir_shader(struct brw_context *brw, void *mem_ctx, + struct nir_shader *nir, const struct brw_wm_prog_key *wm_key, bool use_repclear, struct brw_blorp_prog_data *prog_data, diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp index 782d285..db94f33 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp @@ -1296,7 +1296,7 @@ blorp_nir_manual_blend_bilinear(nir_builder *b, nir_ssa_def *pos, * of samples). */ static nir_shader * -brw_blorp_build_nir_shader(struct brw_context *brw, +brw_blorp_build_nir_shader(struct brw_context *brw, void *mem_ctx, const brw_blorp_blit_prog_key *key) { nir_ssa_def *src_pos, *dst_pos, *color; @@ -1342,7 +1342,7 @@ brw_blorp_build_nir_shader(struct brw_context *brw, (key->dst_samples == 0)); nir_builder b; - nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL); + nir_builder_init_simple_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT, NULL); struct brw_blorp_blit_vars v; brw_blorp_blit_vars_init(&b, &v, key); @@ -1505,6 +1505,8 @@ brw_blorp_get_blit_kernel(struct brw_context *brw, ¶ms->wm_prog_kernel, ¶ms->wm_prog_data)) return; + void *mem_ctx = ralloc_context(NULL); + const unsigned *program; unsigned program_size; struct brw_blorp_prog_data prog_data; @@ -1512,7 +1514,7 @@ brw_blorp_get_blit_kernel(struct brw_context *brw, /* Try and compile with NIR first. If that fails, fall back to the old * method of building shaders manually. */ - nir_shader *nir = brw_blorp_build_nir_shader(brw, prog_key); + nir_shader *nir = brw_blorp_build_nir_shader(brw, mem_ctx, prog_key); struct brw_wm_prog_key wm_key; brw_blorp_init_wm_prog_key(&wm_key); wm_key.tex.compressed_multisample_layout_mask = @@ -1520,7 +1522,7 @@ brw_blorp_get_blit_kernel(struct brw_context *brw, wm_key.tex.msaa_16 = prog_key->tex_samples == 16; wm_key.multisample_fbo = prog_key->rt_samples > 1; - program = brw_blorp_compile_nir_shader(brw, nir, &wm_key, false, + program = brw_blorp_compile_nir_shader(brw, mem_ctx, nir, &wm_key, false, &prog_data, &program_size); brw_upload_cache(&brw->cache, BRW_CACHE_BLORP_PROG, @@ -1528,6 +1530,8 @@ brw_blorp_get_blit_kernel(struct brw_context *brw, program, program_size, &prog_data, sizeof(prog_data), ¶ms->wm_prog_kernel, ¶ms->wm_prog_data); + + ralloc_free(mem_ctx); } static void diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp index 2515a04..6400218 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp @@ -64,7 +64,7 @@ brw_blorp_params_get_clear_kernel(struct brw_context *brw, void *mem_ctx = ralloc_context(NULL); nir_builder b; - nir_builder_init_simple_shader(&b, NULL, MESA_SHADER_FRAGMENT, NULL); + nir_builder_init_simple_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT, NULL); b.shader->info.name = ralloc_strdup(b.shader, "BLORP-clear"); nir_variable *u_color = nir_variable_create(b.shader, nir_var_uniform, @@ -84,7 +84,8 @@ brw_blorp_params_get_clear_kernel(struct brw_context *brw, struct brw_blorp_prog_data prog_data; unsigned program_size; const unsigned *program = - brw_blorp_compile_nir_shader(brw, b.shader, &wm_key, use_replicated_data, + brw_blorp_compile_nir_shader(brw, mem_ctx, + b.shader, &wm_key, use_replicated_data, &prog_data, &program_size); brw_upload_cache(&brw->cache, BRW_CACHE_BLORP_PROG, commit 76a77249ed5a0bae8b4b8c693159f8a8a1481be6 Author: Samuel Pitoiset <samuel.pitoi...@gmail.com> Date: Wed Oct 26 23:10:53 2016 +0200 nvc0/ir: fix emission of IMAD with NEG modifiers The emitter tried to emit sub instead of subr when src0 has actually a NEG modifier. Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> Cc: "11.0 12.0 13.0" <mesa-sta...@lists.freedesktop.org> (cherry picked from commit 84e946380b2d5ddc62a107b667be39abf1932704) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp index 54115d6..3a23a9a 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -726,7 +726,7 @@ void CodeEmitterGK110::emitIMAD(const Instruction *i) { uint8_t addOp = - (i->src(2).mod.neg() << 1) | (i->src(0).mod.neg() ^ i->src(1).mod.neg()); + i->src(2).mod.neg() | ((i->src(0).mod.neg() ^ i->src(1).mod.neg()) << 1); emitForm_21(i, 0x100, 0xa00); diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp index b3cfe08..be5ee4f 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp @@ -737,7 +737,7 @@ void CodeEmitterNVC0::emitIMAD(const Instruction *i) { uint8_t addOp = - (i->src(2).mod.neg() << 1) | (i->src(0).mod.neg() ^ i->src(1).mod.neg()); + i->src(2).mod.neg() | ((i->src(0).mod.neg() ^ i->src(1).mod.neg()) << 1); assert(i->encSize == 8); emitForm_A(i, HEX64(20000000, 00000003)); commit c1f138149edfbf4b586d7a8fa4f3e92ad5ee7dbf Author: Tapani Pälli <tapani.pa...@intel.com> Date: Wed Oct 26 13:54:51 2016 +0300 egl: set preserved behavior for surface only if config supports it Otherwise we can end up with mismatching behavior between config and surface when client queries surface attributes. As example, configs for DRI3 do not support preserved behavior but here we were setting preserved behavior for pixmap and pbuffer. Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98326 Cc: "12.0 13.0" <mesa-sta...@lists.freedesktop.org> Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> Reviewed-by: Chad Versace <chadvers...@chromium.org> Tested-by: Mark Janes <mark.a.ja...@intel.com> (cherry picked from commit 2035930966b05a7c4dd1f6559d66b5a3b41e01a5) diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c index 17d7907..e8ee49c 100644 --- a/src/egl/main/eglsurface.c +++ b/src/egl/main/eglsurface.c @@ -262,9 +262,13 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, { const char *func; EGLint renderBuffer = EGL_BACK_BUFFER; - EGLint swapBehavior = EGL_BUFFER_PRESERVED; + EGLint swapBehavior = EGL_BUFFER_DESTROYED; EGLint err; + /* Swap behavior can be preserved only if config supports this. */ + if (conf->SurfaceType & EGL_SWAP_BEHAVIOR_PRESERVED_BIT) + swapBehavior = EGL_BUFFER_PRESERVED; + switch (type) { case EGL_WINDOW_BIT: func = "eglCreateWindowSurface"; commit 3a27b813b449eb6ec2e41a9b646af1953f002783 Author: Emil Velikov <emil.veli...@collabora.com> Date: Mon Oct 31 18:47:21 2016 +0000 cherry-ignore: add ClientWaitSync fixes Patches (and extension overall) depends on gallium API and driver work which hasn't landed in branch. Signed-off-by: Emil Velikov <emil.veli...@collabora.com> diff --git a/bin/.cherry-ignore b/bin/.cherry-ignore index 227b21d..005e1e3 100644 --- a/bin/.cherry-ignore +++ b/bin/.cherry-ignore @@ -20,3 +20,6 @@ f2b9b0c730e345bcffa9eadabb25af3ab02642f2 i965: Add missing BRW_NEW_FS_PROG_DATA # The commit in question hasn't landed in branch 1ef787339774bc7f1cc9c1615722f944005e070c Revert "egl/android: Set EGL_MAX_PBUFFER_WIDTH and EGL_MAX_PBUFFER_HEIGHT" +# Patches depend on the fence_finish() gallium API change and corresponding driver work +f240ad98bc05281ea7013d91973cb5f932ae9434 st/mesa: unduplicate st_check_sync code +b687f766fddb7b39479cd9ee0427984029ea3559 st/mesa: allow multiple concurrent waiters in ClientWaitSync commit ac3abe534bb9986ce7ee1286854a3bb2a83568bc Author: Marek Olšák <marek.ol...@amd.com> Date: Mon Oct 24 19:05:10 2016 +0200 winsys/amdgpu: fix radeon_surf::macro_tile_index for imported textures Maybe this is why SDMA has been broken for many amdgpu users? SDMA is the only block which is used with imported textures and relies on this variable. DB also uses it, but it doesn't get imported textures, so it's unaffected. I do get SDMA failures on Tonga before this patch if R600_DEBUG=testdma is changed to use imported textures. Cc: 11.2 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> (cherry picked from commit 6ec3b2a4b1d41b83a4721d06b42c49f55e695cbf) [Emil Velikov: resolve trivial conflicts - SI support does not exist in branch] Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Conflicts: src/gallium/winsys/amdgpu/drm/amdgpu_surface.c diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c index 8b776b7..3f6e280 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_surface.c @@ -253,6 +253,20 @@ static int compute_level(struct amdgpu_winsys *ws, return 0; } +static unsigned cik_get_macro_tile_index(struct radeon_surf *surf) +{ + unsigned index, tileb; + + tileb = 8 * 8 * surf->bpe; + tileb = MIN2(surf->tile_split, tileb); + + for (index = 0; tileb > 64; index++) + tileb >>= 1; + + assert(index < 16); + return index; +} + static int amdgpu_surface_init(struct radeon_winsys *rws, struct radeon_surf *surf) { @@ -381,6 +395,9 @@ static int amdgpu_surface_init(struct radeon_winsys *rws, AddrSurfInfoIn.tileIndex = 10; /* 2D displayable */ else AddrSurfInfoIn.tileIndex = 14; /* 2D non-displayable */ + + /* Addrlib doesn't set this if tileIndex is forced like above. */ + AddrSurfInfoOut.macroModeIndex = cik_get_macro_tile_index(surf); } surf->bo_size = 0; commit 20008a9fb82a573f15e9c6b02b68a90f31889efb Author: Marek Olšák <marek.ol...@amd.com> Date: Mon Oct 24 21:16:11 2016 +0200 gallium/radeon: make sure the address of separate CMASK is aligned properly This should fix random GPU hangs on Hawaii and Fiji. Cc: 11.2 12.0 13.0 <mesa-sta...@lists.freedesktop.org> Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> (cherry picked from commit dce05b342355eac9296ee7110385b16d6edb059d) diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 23ddff4..8de3b18 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -703,8 +703,9 @@ static void r600_texture_alloc_cmask_separate(struct r600_common_screen *rscreen } rtex->cmask_buffer = (struct r600_resource *) - pipe_buffer_create(&rscreen->b, PIPE_BIND_CUSTOM, - PIPE_USAGE_DEFAULT, rtex->cmask.size); + r600_aligned_buffer_create(&rscreen->b, 0, PIPE_USAGE_DEFAULT, + rtex->cmask.size, + rtex->cmask.alignment); if (rtex->cmask_buffer == NULL) { rtex->cmask.size = 0; return; commit 79a1cc2364b7894617a8c70f0810d6879876f1e1 Author: Samuel Pitoiset <samuel.pitoi...@gmail.com> Date: Tue Oct 25 13:24:16 2016 +0200 nvc0: use correct bufctx when invalidating CP textures Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> Cc: "12.0 13.0" <mesa-sta...@lists.freedesktop.org> (cherry picked from commit 7b2712c367891e96384226a1fa94679a814235d0) diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c index 716048d..efd90de 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c @@ -591,7 +591,7 @@ void nvc0_validate_textures(struct nvc0_context *nvc0) /* Invalidate all CP textures because they are aliased. */ for (int i = 0; i < nvc0->num_textures[5]; i++) - nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_CP_TEX(i)); + nouveau_bufctx_reset(nvc0->bufctx_cp, NVC0_BIND_CP_TEX(i)); nvc0->textures_dirty[5] = ~0; nvc0->dirty_cp |= NVC0_NEW_CP_TEXTURES; } commit cac5e31b0f7f17d1213288b5e7b2bd73ceccf401 Author: Tapani Pälli <tapani.pa...@intel.com> Date: Fri Oct 7 10:08:21 2016 +0300 mesa: fix error handling in DrawBuffers Patch rearranges error checking so that enum checking provided via destmask happens before other checks. It needs to be done in this order because other error checks do not work properly if there were invalid enums passed. Patch also refines one existing check and it's documentation to match GLES 3.0 spec (also in later specs). This was somewhat mysteriously referring to desktop GL but had a check for gles3. Fixes following dEQP tests: dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.draw_buffers no CI regressions observed. Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98134 Cc: "12.0 13.0" <mesa-sta...@lists.freedesktop.org> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> (cherry picked from commit a1652a059edc5a5f0f4b0836ba310a22e094bd85) diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c index a28c583..d8815af 100644 --- a/src/mesa/main/buffers.c +++ b/src/mesa/main/buffers.c @@ -378,17 +378,48 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer *fb, /* complicated error checking... */ for (output = 0; output < n; output++) { - /* Section 4.2 (Whole Framebuffer Operations) of the OpenGL 3.0 + destMask[output] = draw_buffer_enum_to_bitmask(ctx, buffers[output]); + + /* From the OpenGL 3.0 specification, page 258: + * "Each buffer listed in bufs must be one of the values from tables + * 4.5 or 4.6. Otherwise, an INVALID_ENUM error is generated. + */ + if (destMask[output] == BAD_MASK) { + _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)", + caller, _mesa_enum_to_string(buffers[output])); + return; + } + + /* From the OpenGL 4.0 specification, page 256: + * "For both the default framebuffer and framebuffer objects, the + * constants FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not + * valid in the bufs array passed to DrawBuffers, and will result in + * the error INVALID_ENUM. This restriction is because these + * constants may themselves refer to multiple buffers, as shown in + * table 4.4." + * Previous versions of the OpenGL specification say INVALID_OPERATION, + * but the Khronos conformance tests expect INVALID_ENUM. + */ + if (_mesa_bitcount(destMask[output]) > 1) { + _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)", + caller, _mesa_enum_to_string(buffers[output])); + return; + } + + /* Section 4.2 (Whole Framebuffer Operations) of the OpenGL ES 3.0 * specification says: * - * "Each buffer listed in bufs must be BACK, NONE, or one of the values - * from table 4.3 (NONE, COLOR_ATTACHMENTi)" + * "If the GL is bound to a draw framebuffer object, the ith buffer + * listed in bufs must be COLOR_ATTACHMENTi or NONE . Specifying a + * buffer out of order, BACK , or COLOR_ATTACHMENTm where m is greater + * than or equal to the value of MAX_- COLOR_ATTACHMENTS , will + * generate the error INVALID_OPERATION . */ - if (_mesa_is_gles3(ctx) && buffers[output] != GL_NONE && - buffers[output] != GL_BACK && + if (_mesa_is_gles3(ctx) && _mesa_is_user_fbo(fb) && + buffers[output] != GL_NONE && (buffers[output] < GL_COLOR_ATTACHMENT0 || buffers[output] >= GL_COLOR_ATTACHMENT0 + ctx->Const.MaxColorAttachments)) { - _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffers(buffer)"); + _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffers(buffer)"); return; } @@ -412,34 +443,6 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer *fb, return; } - destMask[output] = draw_buffer_enum_to_bitmask(ctx, buffers[output]); - - /* From the OpenGL 3.0 specification, page 258: - * "Each buffer listed in bufs must be one of the values from tables - * 4.5 or 4.6. Otherwise, an INVALID_ENUM error is generated. - */ - if (destMask[output] == BAD_MASK) { - _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)", - caller, _mesa_enum_to_string(buffers[output])); - return; - } - - /* From the OpenGL 4.0 specification, page 256: - * "For both the default framebuffer and framebuffer objects, the - * constants FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not - * valid in the bufs array passed to DrawBuffers, and will result in - * the error INVALID_ENUM. This restriction is because these - * constants may themselves refer to multiple buffers, as shown in - * table 4.4." - * Previous versions of the OpenGL specification say INVALID_OPERATION, - * but the Khronos conformance tests expect INVALID_ENUM. - */ - if (_mesa_bitcount(destMask[output]) > 1) { - _mesa_error(ctx, GL_INVALID_ENUM, "%s(invalid buffer %s)", - caller, _mesa_enum_to_string(buffers[output])); - return; - } - /* From the OpenGL 3.0 specification, page 259: * "If the GL is bound to the default framebuffer and DrawBuffers is * supplied with a constant (other than NONE) that does not indicate commit 979e4b9c3f5b1272df807c0195a85d980c45ea29 Author: Tapani Pälli <tapani.pa...@intel.com> Date: Thu Oct 20 14:11:16 2016 +0300 egl: add check that eglCreateContext gets a valid config Fixes following dEQP test: dEQP-EGL.functional.negative_api.create_context v2: don't break EGL_KHR_no_config_context (Eric Engestrom) Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> Cc: "12.0 13.0" <mesa-sta...@lists.freedesktop.org> (cherry picked from commit 5876f3c85a61d73bb4863331bd641152a40a7b0c) [Emil Velikov: drop EGL_NO_CONFIG_KHR, use MESA_configless_context] Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Conflicts: src/egl/main/eglapi.c