[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'upstream-unstable'



 Android.common.mk                                          |    2 
 VERSION                                                    |    2 
 bin/.cherry-ignore                                         |    5 
 docs/relnotes/11.2.1.html                                  |    3 
 docs/relnotes/11.2.2.html                                  |  209 +++++++++++++
 src/compiler/glsl/linker.cpp                               |    1 
 src/compiler/glsl/lower_vec_index_to_swizzle.cpp           |   96 -----
 src/egl/drivers/dri2/platform_x11.c                        |  104 +++---
 src/gallium/auxiliary/gallivm/lp_bld_arit.c                |    9 
 src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c          |   13 
 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c          |   38 +-
 src/gallium/auxiliary/tgsi/tgsi_dump.c                     |    7 
 src/gallium/auxiliary/util/u_blitter.c                     |    2 
 src/gallium/drivers/llvmpipe/lp_state_fs.c                 |    2 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp |   49 ++-
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp  |    4 
 src/gallium/drivers/nouveau/nouveau_vp3_video.c            |   25 +
 src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c           |   20 -
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c             |    2 
 src/gallium/drivers/r600/evergreen_state.c                 |   33 +-
 src/gallium/drivers/r600/r600_pipe.h                       |    8 
 src/gallium/drivers/r600/r600_shader.c                     |   11 
 src/gallium/drivers/r600/r600_state.c                      |   27 +
 src/gallium/drivers/r600/r600_state_common.c               |   65 +++-
 src/gallium/drivers/radeon/r600_buffer_common.c            |    4 
 src/gallium/drivers/radeon/r600_pipe_common.h              |    2 
 src/gallium/drivers/radeon/r600_streamout.c                |   13 
 src/gallium/drivers/radeon/r600_texture.c                  |   24 -
 src/gallium/drivers/radeon/radeon_uvd.c                    |   14 
 src/gallium/drivers/radeonsi/si_descriptors.c              |    2 
 src/gallium/drivers/radeonsi/si_state.c                    |   24 +
 src/gallium/drivers/vc4/vc4_program.c                      |    1 
 src/gallium/drivers/vc4/vc4_resource.c                     |    3 
 src/gallium/drivers/vc4/vc4_screen.c                       |    7 
 src/gallium/drivers/vc4/vc4_tiling.c                       |    8 
 src/gallium/winsys/sw/dri/dri_sw_winsys.c                  |    2 
 src/gallium/winsys/sw/xlib/xlib_sw_winsys.c                |    2 
 src/glx/dri2_glx.c                                         |    2 
 src/glx/dri3_glx.c                                         |    8 
 src/mapi/glapi/glapi_getproc.c                             |   18 -
 src/mesa/drivers/dri/common/dri_util.c                     |   25 +
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp                   |    8 
 src/mesa/drivers/dri/i965/brw_meta_fast_clear.c            |    1 
 src/mesa/drivers/dri/i965/brw_shader.cpp                   |    3 
 src/mesa/drivers/dri/i965/gen7_blorp.cpp                   |   25 +
 src/mesa/state_tracker/st_cb_bitmap.c                      |    6 
 src/mesa/state_tracker/st_cb_texture.c                     |    3 
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp                 |   22 +
 src/util/macros.h                                          |    6 
 49 files changed, 688 insertions(+), 282 deletions(-)

New commits:
commit 3a9f6283f435f90ca1a2901be39ec9d629c95bb6
Author: Emil Velikov <emil.velikov@collabora.com>
Date:   Mon May 9 13:54:59 2016 +0100

    docs: add release notes for 11.2.2
    
    Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

diff --git a/docs/relnotes/11.2.2.html b/docs/relnotes/11.2.2.html
new file mode 100644
index 0000000..0701904
--- /dev/null
+++ b/docs/relnotes/11.2.2.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8">
+  <title>Mesa Release Notes</title>
+  <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+  <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 11.2.2 Release Notes / May 9, 2016</h1>
+
+<p>
+Mesa 11.2.2 is a bug fix release which fixes bugs found since the 11.2.1 release.
+</p>
+<p>
+Mesa 11.2.2 implements the OpenGL 4.1 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.1.  OpenGL
+4.1 is <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>SHA256 checksums</h2>
+<pre>
+TBD
+</pre>
+
+
+<h2>New features</h2>
+<p>None</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=92850";>Bug 92850</a> - Segfault loading War Thunder</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=93767";>Bug 93767</a> - Glitches with soft shadows and MSAA in Knights of the Old Republic 2</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=94955";>Bug 94955</a> - Uninitialized variables leads to random segfaults (valgrind log, apitrace attached)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=94994";>Bug 94994</a> - OSMesaGetProcAdress always fails on mangled OSMesa</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=95026";>Bug 95026</a> - Alien Isolation segfault after initial loading screen/video</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=95133";>Bug 95133</a> - X-COM Enemy Within crashes when entering tactical mission with Bonaire</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=95164";>Bug 95164</a> - GLSL compiler (linker I think) emits assertion upon call to glAttachShader</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=95251";>Bug 95251</a> - vdpau decoder capabilities: not supported</li>
+
+</ul>
+
+
+<h2>Changes</h2>
+
+<p>Boyuan Zhang (1):</p>
+<ul>
+  <li>radeon/uvd: alignment fix for decode message buffer</li>
+</ul>
+
+<p>Brian Paul (2):</p>
+<ul>
+  <li>st/mesa: fix sampler view leak in st_DrawAtlasBitmaps()</li>
+  <li>gallium/util: initialize pipe_framebuffer_state to zeros</li>
+</ul>
+
+<p>Chad Versace (1):</p>
+<ul>
+  <li>dri: Fix robust context creation via EGL attribute</li>
+</ul>
+
+<p>Egbert Eich (1):</p>
+<ul>
+  <li>dri2: Check for dummyContext to see if the glx_context is valid</li>
+</ul>
+
+<p>Emil Velikov (5):</p>
+<ul>
+  <li>docs: add sha256 checksums for 11.2.1</li>
+  <li>docs: update the sha256 checksums for 11.2.1</li>
+  <li>cherry-ignore: remove duplicate commit</li>
+  <li>cherry-ignore: ignore the GetSamplerParameterIuiv{EXT,OES} fixups</li>
+  <li>Update version to 11.2.2</li>
+</ul>
+
+<p>Eric Anholt (4):</p>
+<ul>
+  <li>vc4: Fix subimage accesses to LT textures.</li>
+  <li>vc4: Add support for rendering to cube map surfaces.</li>
+  <li>vc4: Fix tests for format supported with nr_samples == 1.</li>
+  <li>vc4: Make sure we recompile when sample_mask changes.</li>
+</ul>
+
+<p>Frederic Devernay (1):</p>
+<ul>
+  <li>glapi: fix _glapi_get_proc_address() for mangled function names</li>
+</ul>
+
+<p>Ilia Mirkin (2):</p>
+<ul>
+  <li>nvc0: fix retrieving query results into buffer for timestamps</li>
+  <li>nouveau/video: properly detect the decoder class for availability checks</li>
+</ul>
+
+<p>Jason Ekstrand (1):</p>
+<ul>
+  <li>i965/fs: Properly report regs_written from SAMPLEINFO</li>
+</ul>
+
+<p>Jonathan Gray (1):</p>
+<ul>
+  <li>egl/x11: authenticate before doing chipset id ioctls</li>
+</ul>
+
+<p>Jose Fonseca (1):</p>
+<ul>
+  <li>winsys/sw/xlib: use correct free function for xlib_dt-&gt;data</li>
+</ul>
+
+<p>Kenneth Graunke (3):</p>
+<ul>
+  <li>i965: Fix clear code for ignoring colormask for XRGB formats on Gen9+.</li>
+  <li>glsl: Convert lower_vec_index_to_swizzle to a rvalue visitor.</li>
+  <li>glsl: Lower vector_extracts to swizzles after lower_vector_derefs.</li>
+</ul>
+
+<p>Leo Liu (1):</p>
+<ul>
+  <li>radeon/uvd: fix tonga feedback buffer size</li>
+</ul>
+
+<p>Marek Olšák (1):</p>
+<ul>
+  <li>st/mesa: fix blit-based GetTexImage for non-finalized textures</li>
+</ul>
+
+<p>Nicolai Hähnle (5):</p>
+<ul>
+  <li>gallium/radeon: handle failure when mapping staging buffer</li>
+  <li>st/glsl_to_tgsi: reduce stack explosion in recursive expression visitor</li>
+  <li>gallium/radeon: fix crash in r600_set_streamout_targets</li>
+  <li>radeonsi: correct NULL-pointer check in si_upload_const_buffer</li>
+  <li>radeonsi: work around an MSAA fast stencil clear problem</li>
+</ul>
+
+<p>Oded Gabbay (4):</p>
+<ul>
+  <li>r600g/radeonsi: send endian info to format translation functions</li>
+  <li>r600g: set endianess of 16/32-bit buffers according to do_endian_swap</li>
+  <li>r600g: use do_endian_swap in color swapping functions</li>
+  <li>r600g: use do_endian_swap in texture swapping function</li>
+</ul>
+
+<p>Patrick Rudolph (1):</p>
+<ul>
+  <li>r600g: fix and optimize tgsi_cmp when using ABS and NEG modifier</li>
+</ul>
+
+<p>Roland Scheidegger (3):</p>
+<ul>
+  <li>llvmpipe: (trivial) initialize src1_alpha var to NULL</li>
+  <li>gallivm: fix bogus argument order to lp_build_sample_mipmap function</li>
+  <li>gallivm: make sampling more robust against bogus coordinates</li>
+</ul>
+
+<p>Samuel Pitoiset (6):</p>
+<ul>
+  <li>gk110/ir: do not overwrite def value with zero for EXCH ops</li>
+  <li>gk110/ir: make use of IMUL32I for all immediates</li>
+  <li>nvc0/ir: fix wrong emission of (a OP b) OP c</li>
+  <li>gk110/ir: add emission for (a OP b) OP c</li>
+  <li>nvc0: reduce GL_MAX_3D_TEXTURE_SIZE to 2048 on Kepler+</li>
+  <li>st/glsl_to_tgsi: fix potential crash when allocating temporaries</li>
+</ul>
+
+<p>Stefan Dirsch (1):</p>
+<ul>
+  <li>dri3: Check for dummyContext to see if the glx_context is valid</li>
+</ul>
+
+<p>Topi Pohjolainen (2):</p>
+<ul>
+  <li>i965/blorp/gen7: Prepare re-using for gen8</li>
+  <li>i965/blorp: Use 8k chunk size for urb allocation</li>
+</ul>
+
+<p>WuZhen (3):</p>
+<ul>
+  <li>tgsi: initialize stack allocated struct</li>
+  <li>winsys/sw/dri: use correct free function for dri_sw_dt-&gt;data</li>
+  <li>android: enable dlopen() on all architectures</li>
+</ul>
+
+
+</div>
+</body>
+</html>

commit f6726607d767fd5a975f090e4f56bf269b4828bd
Author: Emil Velikov <emil.velikov@collabora.com>
Date:   Mon May 9 13:52:16 2016 +0100

    Update version to 11.2.2
    
    Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

diff --git a/VERSION b/VERSION
index dc170a1..2119896 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-11.2.1
+11.2.2

commit f18e2921d7f58671a76cf070caae83cdb4ce95a7
Author: Nicolai Hähnle <nicolai.haehnle@amd.com>
Date:   Fri Apr 22 17:28:46 2016 -0500

    radeonsi: work around an MSAA fast stencil clear problem
    
    A piglit test (arb_texture_multisample-stencil-clear) has been sent.
    This problem was discovered analyzing
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93767
    Reviewed-by: Marek Olšák <marek.olsak@amd.com>
    (cherry picked from commit 8c43c06e0463515c1339d44cbb8f78169e6a06fb)

diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index 77043c5..ef19440 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -2461,9 +2461,21 @@ static void si_init_depth_surface(struct si_context *sctx,
 		z_info |= S_028040_TILE_SURFACE_ENABLE(1) |
 			  S_028040_ALLOW_EXPCLEAR(1);
 
-		if (rtex->surface.flags & RADEON_SURF_SBUFFER)
-			s_info |= S_028044_ALLOW_EXPCLEAR(1);
-		else
+		if (rtex->surface.flags & RADEON_SURF_SBUFFER) {
+			/* Workaround: For a not yet understood reason, the
+			 * combination of MSAA, fast stencil clear and stencil
+			 * decompress messes with subsequent stencil buffer
+			 * uses. Problem was reproduced on Verde, Bonaire,
+			 * Tonga, and Carrizo.
+			 *
+			 * Disabling EXPCLEAR works around the problem.
+			 *
+			 * Check piglit's arb_texture_multisample-stencil-clear
+			 * test if you want to try changing this.
+			 */
+			if (rtex->resource.b.b.nr_samples <= 1)
+				s_info |= S_028044_ALLOW_EXPCLEAR(1);
+		} else
 			/* Use all of the htile_buffer for depth if there's no stencil. */
 			s_info |= S_028044_TILE_STENCIL_DISABLE(1);
 

commit 069ade547f1bfca3750fc2cc78e1ce39a6f59c07
Author: Emil Velikov <emil.velikov@collabora.com>
Date:   Thu May 5 14:05:33 2016 +0100

    cherry-ignore: ignore the GetSamplerParameterIuiv{EXT,OES} fixups
    
    The functions/extension landed after the branchpoint.
    
    Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

diff --git a/bin/.cherry-ignore b/bin/.cherry-ignore
index 9304ac8..b1bfb78 100644
--- a/bin/.cherry-ignore
+++ b/bin/.cherry-ignore
@@ -1,2 +1,5 @@
 # Remove duplicate commit due to vulkan branch merge
 9e64a2a8e4821dd637daac54ba83895a490d4790 mesa: Fix generation of git_sha1.h.tmp for gitlinks
+
+# The functions/extension in question landed after the branchpoint.
+be5010c4b8635d0292404ac58ed0436ba6637579 glapi: fix parameter type for GetSamplerParameterIuivEXT() in es_EXT.xml

commit 97fe75cee25c881643a7e56725375453a0457392
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Wed May 4 01:28:23 2016 -0400

    nouveau/video: properly detect the decoder class for availability checks
    
    The kernel is now more strict with the class ids it exposes, so we need
    to check the G98 and MCP89 classes as well as the GT215 class. This
    effectively caused us to decide there were no decoding capabilities on
    newer kernel for VP3 chips.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95251
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Cc: "11.2" <mesa-stable@lists.freedesktop.org>
    (cherry picked from commit 38fcf7cbadc748816f99b2c3c9f2f55d0f1635fe)

diff --git a/src/gallium/drivers/nouveau/nouveau_vp3_video.c b/src/gallium/drivers/nouveau/nouveau_vp3_video.c
index d76d932..10c149c 100644
--- a/src/gallium/drivers/nouveau/nouveau_vp3_video.c
+++ b/src/gallium/drivers/nouveau/nouveau_vp3_video.c
@@ -25,6 +25,8 @@
 #include <stdio.h>
 #include <fcntl.h>
 
+#include <nvif/class.h>
+
 #include "nouveau_screen.h"
 #include "nouveau_context.h"
 #include "nouveau_vp3_video.h"
@@ -351,6 +353,16 @@ nouveau_vp3_load_firmware(struct nouveau_vp3_decoder *dec,
    return 0;
 }
 
+static const struct nouveau_mclass
+nouveau_decoder_msvld[] = {
+   { G98_MSVLD, -1 },
+   { IGT21A_MSVLD, -1 },
+   { GT212_MSVLD, -1 },
+   { GF100_MSVLD, -1 },
+   { GK104_MSVLD, -1 },
+   {}
+};
+
 static int
 firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
 {
@@ -368,13 +380,7 @@ firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
       struct nvc0_fifo nvc0_args = {};
       struct nve0_fifo nve0_args = {.engine = NVE0_FIFO_ENGINE_BSP};
       void *data = NULL;
-      int size, oclass;
-      if (chipset < 0xc0)
-         oclass = 0x85b1;
-      else if (chipset < 0xe0)
-         oclass = 0x90b1;
-      else
-         oclass = 0x95b1;
+      int size;
 
       if (chipset < 0xc0) {
          data = &nv04_data;
@@ -393,7 +399,10 @@ firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
                          data, size, &channel);
 
       if (channel) {
-         nouveau_object_new(channel, 0, oclass, NULL, 0, &bsp);
+         ret = nouveau_object_mclass(channel, nouveau_decoder_msvld);
+         if (ret >= 0)
+            nouveau_object_new(channel, 0, nouveau_decoder_msvld[ret].oclass,
+                               NULL, 0, &bsp);
          if (bsp)
             screen->firmware_info.profiles_present |= 1;
          nouveau_object_del(&bsp);

commit 05cf9489898b38706f847faa2e3fb786f6a782a6
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Sun May 1 15:29:52 2016 +0200

    st/mesa: fix blit-based GetTexImage for non-finalized textures
    
    This fixes getteximage-depth piglit failures on radeonsi.
    
    Cc: 11.1 11.2 <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
    (cherry picked from commit 3d956b4bc0b346a6dff23bfe56c6b5ae1ec1ddaa)

diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 32c9139..7fbd1c2 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -2136,7 +2136,8 @@ st_GetTexSubImage(struct gl_context * ctx,
       goto fallback;
    }
 
-   if (!stImage->pt || !src) {
+   /* Handle non-finalized textures. */
+   if (!stImage->pt || stImage->pt != stObj->pt || !src) {
       goto fallback;
    }
 

commit a50ff5dffcf1734daf58eb34c68f106602dc49a9
Author: Nicolai Hähnle <nicolai.haehnle@amd.com>
Date:   Fri Apr 22 21:57:51 2016 -0500

    radeonsi: correct NULL-pointer check in si_upload_const_buffer
    
    Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
    Reviewed-by: Marek Olšák <marek.olsak@amd.com>
    (cherry picked from commit 169ace5636defc032ed2a835b5ea7c55631b930f)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index a80597d..a7f23a2 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -482,7 +482,7 @@ void si_upload_const_buffer(struct si_context *sctx, struct r600_resource **rbuf
 
 	u_upload_alloc(sctx->b.uploader, 0, size, 256, const_offset,
 		       (struct pipe_resource**)rbuffer, &tmp);
-	if (rbuffer)
+	if (*rbuffer)
 		util_memcpy_cpu_to_le32(tmp, ptr, size);
 }
 

commit d613dd774c6fa5ba5cf01e5b361314512362b2bd
Author: WuZhen <wuzhen@jidemail.com>
Date:   Thu Apr 28 15:34:58 2016 +0800

    android: enable dlopen() on all architectures
    
    Cc: "11.2 11.1" <mesa-stable@lists.freedesktop.org>
    Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
    (cherry picked from commit ea4c1afd050fbfab4bd4d3d79cf7784e0fd0825f)

diff --git a/Android.common.mk b/Android.common.mk
index 610b213..4f02fc7 100644
--- a/Android.common.mk
+++ b/Android.common.mk
@@ -54,6 +54,7 @@ LOCAL_CFLAGS += \
 	-DHAVE___BUILTIN_CLZLL \
 	-DHAVE___BUILTIN_UNREACHABLE \
 	-DHAVE_PTHREAD=1 \
+	-DHAVE_DLOPEN \
 	-fvisibility=hidden \
 	-Wno-sign-compare
 
@@ -65,7 +66,6 @@ ifeq ($(strip $(MESA_ENABLE_ASM)),true)
 ifeq ($(TARGET_ARCH),x86)
 LOCAL_CFLAGS += \
 	-DUSE_X86_ASM \
-	-DHAVE_DLOPEN \
 
 endif
 endif

commit 8679ca16740fc6da9083deebba6954a5253099fd
Author: Jose Fonseca <jfonseca@vmware.com>
Date:   Sun May 1 10:27:06 2016 +0100

    winsys/sw/xlib: use correct free function for xlib_dt->data
    
    Analogous to previous commit.
    
    Cc: "11.2 11.1" <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
    (cherry picked from commit 5649d6ab06a3d9a4183272a140f767fa0ed4127e)

diff --git a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c
index cc2a3de..8753139 100644
--- a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c
+++ b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c
@@ -268,7 +268,7 @@ xlib_displaytarget_destroy(struct sw_winsys *ws,
             xlib_dt->tempImage->data = NULL;
       }
       else {
-         FREE(xlib_dt->data);
+         align_free(xlib_dt->data);
          if (xlib_dt->tempImage && xlib_dt->tempImage->data == xlib_dt->data) {
             xlib_dt->tempImage->data = NULL;
          }

commit 3b8958e3511b5a8a6f11112e3c0eb99040d86522
Author: WuZhen <wuzhen@jidemail.com>
Date:   Thu Apr 28 15:34:56 2016 +0800

    winsys/sw/dri: use correct free function for dri_sw_dt->data
    
    align_malloc() is used to allocate dri_sw_dt->data, thus we should not
    be using FREE() but align_free().
    
    Cc: "11.2 11.1" <mesa-stable@lists.freedesktop.org>
    Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
    [Emil Velikov: tweak commit summary/shortlog]
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
    Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
    
    (cherry picked from commit 4f21f3f2e866e5c95bf4b924729bde35dbc35df0)

diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
index 5c98f26..94d5092 100644
--- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
@@ -125,7 +125,7 @@ dri_sw_displaytarget_destroy(struct sw_winsys *ws,
 {
    struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
 
-   FREE(dri_sw_dt->data);
+   align_free(dri_sw_dt->data);
 
    FREE(dri_sw_dt);
 }

commit e8d5e82eb0dacc8e774c9d706a78a6aebaccbf5e
Author: WuZhen <wuzhen@jidemail.com>
Date:   Thu Apr 28 15:34:55 2016 +0800

    tgsi: initialize stack allocated struct
    
    Cc: "11.2 11.1" <mesa-stable@lists.freedesktop.org>
    Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
    Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
    (cherry picked from commit 798f7a8596e3ff3f57a44812d7fd005f53f5557c)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index f232f38..66d801d 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -432,6 +432,7 @@ tgsi_dump_declaration(
    const struct tgsi_full_declaration *decl )
 {
    struct dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.dump_printf = dump_ctx_printf;
 
@@ -480,6 +481,7 @@ void tgsi_dump_property(
    const struct tgsi_full_property *prop )
 {
    struct dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.dump_printf = dump_ctx_printf;
 
@@ -511,6 +513,7 @@ tgsi_dump_immediate(
    const struct tgsi_full_immediate *imm )
 {
    struct dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.dump_printf = dump_ctx_printf;
 
@@ -671,6 +674,7 @@ tgsi_dump_instruction(
    uint instno )
 {
    struct dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.instno = instno;
    ctx.immno = instno;
@@ -696,6 +700,7 @@ void
 tgsi_dump_to_file(const struct tgsi_token *tokens, uint flags, FILE *file)
 {
    struct dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.iter.prolog = prolog;
    ctx.iter.iterate_instruction = iter_instruction;
@@ -766,6 +771,7 @@ tgsi_dump_str(
    size_t size)
 {
    struct str_dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.base.iter.prolog = prolog;
    ctx.base.iter.iterate_instruction = iter_instruction;
@@ -805,6 +811,7 @@ tgsi_dump_instruction_str(
    size_t size)
 {
    struct str_dump_ctx ctx;
+   memset(&ctx, 0, sizeof(ctx));
 
    ctx.base.instno = instno;
    ctx.base.immno = instno;

commit 0a27c07d1500c312bae042e6029ca4243a54b53d
Author: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Date:   Thu Apr 28 21:09:12 2016 +0200

    st/glsl_to_tgsi: fix potential crash when allocating temporaries
    
    When index - t->temps_size is greater than 4096, allocating space for
    temporaries on demand will miserably crash. This can happen when a game
    uses a lot of temporaries like the recent released Tomb raider.
    
    Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
    Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
    Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
    (cherry picked from commit 8f2238ccbae399a20fce24c5941accced7cee8d2)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 7717475..d738e50 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -5280,7 +5280,7 @@ dst_register(struct st_translate *t, gl_register_file file, unsigned index,
    case PROGRAM_TEMPORARY:
       /* Allocate space for temporaries on demand. */
       if (index >= t->temps_size) {
-         const int inc = 4096;
+         const int inc = align(index - t->temps_size + 1, 4096);
 
          t->temps = (struct ureg_dst*)
                     realloc(t->temps,

commit a407f06ef6688168e9d761e5f2384097641acb66
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Wed Apr 27 21:07:07 2016 -0700

    glsl: Lower vector_extracts to swizzles after lower_vector_derefs.
    
    lower_vector_derefs can produce new vector_extract operations.
    Neither i965 nor st_glsl_to_tgsi can handle them, so we'd best
    convert them to swizzles.
    
    Together with the previous patch, this fixes assertion failures in
    GLideN64, as well as a new Piglit test which reproduces the issue:
    spec/glsl-1.10/compiler/vector-dereference-in-dereference.frag
    
    Cc: mesa-stable@lists.freedesktop.org
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95164
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
    (cherry picked from commit 750c38fad1f19e2403b4960674006c5f932075ad)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 4cec107..b8a1fd4 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -4658,6 +4658,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
                                 &prog->Comp.SharedSize);
 
       lower_vector_derefs(prog->_LinkedShaders[i]);
+      do_vec_index_to_swizzle(prog->_LinkedShaders[i]->ir);
    }
 
 done:

commit d12a19de60f2edfa06298eb0dcc5e75d2e1f47ad
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Wed Apr 27 20:51:36 2016 -0700

    glsl: Convert lower_vec_index_to_swizzle to a rvalue visitor.
    
    The old visitor missed some cases.  For example, it wouldn't handle
    an ir_dereference_array with a vector_extract as the index.
    
    Rather than trying to add the missing cases, just rewrite it as an
    ir_rvalue_visitor.  This makes it easy to replace any expression,
    and is much less code.
    
    Cc: mesa-stable@lists.freedesktop.org
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95164
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
    (cherry picked from commit 1cd600dbb975cce616da376a680692afb2da47f9)

diff --git a/src/compiler/glsl/lower_vec_index_to_swizzle.cpp b/src/compiler/glsl/lower_vec_index_to_swizzle.cpp
index 8b18e95..b49255e 100644
--- a/src/compiler/glsl/lower_vec_index_to_swizzle.cpp
+++ b/src/compiler/glsl/lower_vec_index_to_swizzle.cpp
@@ -30,18 +30,14 @@
  */
 
 #include "ir.h"
-#include "ir_visitor.h"
+#include "ir_rvalue_visitor.h"
 #include "ir_optimization.h"
 #include "compiler/glsl_types.h"
 #include "main/macros.h"
 
-/**
- * Visitor class for replacing expressions with ir_constant values.
- */
-
 namespace {
 
-class ir_vec_index_to_swizzle_visitor : public ir_hierarchical_visitor {
+class ir_vec_index_to_swizzle_visitor : public ir_rvalue_visitor {
 public:
    ir_vec_index_to_swizzle_visitor()
    {
@@ -50,30 +46,28 @@ public:
 
    ir_rvalue *convert_vector_extract_to_swizzle(ir_rvalue *val);
 
-   virtual ir_visitor_status visit_enter(ir_expression *);
-   virtual ir_visitor_status visit_enter(ir_swizzle *);
-   virtual ir_visitor_status visit_enter(ir_assignment *);
-   virtual ir_visitor_status visit_enter(ir_return *);
-   virtual ir_visitor_status visit_enter(ir_call *);
-   virtual ir_visitor_status visit_enter(ir_if *);
+   virtual void handle_rvalue(ir_rvalue **);
 
    bool progress;
 };
 
 } /* anonymous namespace */
 
-ir_rvalue *
-ir_vec_index_to_swizzle_visitor::convert_vector_extract_to_swizzle(ir_rvalue *ir)
+void
+ir_vec_index_to_swizzle_visitor::handle_rvalue(ir_rvalue **rv)
 {
-   ir_expression *const expr = ir->as_expression();
+   if (*rv == NULL)
+      return;
+
+   ir_expression *const expr = (*rv)->as_expression();
    if (expr == NULL || expr->operation != ir_binop_vector_extract)
-      return ir;
+      return;
 
    ir_constant *const idx = expr->operands[1]->constant_expression_value();
    if (idx == NULL)
-      return ir;
+      return;
 
-   void *ctx = ralloc_parent(ir);
+   void *ctx = ralloc_parent(expr);
    this->progress = true;
 
    /* Page 40 of the GLSL 1.20 spec says:
@@ -93,71 +87,7 @@ ir_vec_index_to_swizzle_visitor::convert_vector_extract_to_swizzle(ir_rvalue *ir
    const int i = CLAMP(idx->value.i[0], 0,
                        (int) expr->operands[0]->type->vector_elements - 1);
 
-   return new(ctx) ir_swizzle(expr->operands[0], i, 0, 0, 0, 1);
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_expression *ir)
-{
-   unsigned int i;
-
-   for (i = 0; i < ir->get_num_operands(); i++) {
-      ir->operands[i] = convert_vector_extract_to_swizzle(ir->operands[i]);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_swizzle *ir)
-{
-   /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which
-    * the result of indexing a vector is.  But maybe at some point we'll end up
-    * using swizzling of scalars for vector construction.
-    */
-   ir->val = convert_vector_extract_to_swizzle(ir->val);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_assignment *ir)
-{
-   ir->rhs = convert_vector_extract_to_swizzle(ir->rhs);
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_call *ir)
-{
-   foreach_in_list_safe(ir_rvalue, param, &ir->actual_parameters) {
-      ir_rvalue *new_param = convert_vector_extract_to_swizzle(param);
-
-      if (new_param != param) {
-	 param->replace_with(new_param);
-      }
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_return *ir)
-{
-   if (ir->value) {
-      ir->value = convert_vector_extract_to_swizzle(ir->value);
-   }
-
-   return visit_continue;
-}
-
-ir_visitor_status
-ir_vec_index_to_swizzle_visitor::visit_enter(ir_if *ir)
-{
-   ir->condition = convert_vector_extract_to_swizzle(ir->condition);
-
-   return visit_continue;
+   *rv = new(ctx) ir_swizzle(expr->operands[0], i, 0, 0, 0, 1);
 }
 
 bool

commit 4188b650be07031fabf0557344711878146075e4
Author: Nicolai Hähnle <nicolai.haehnle@amd.com>
Date:   Thu Apr 28 15:11:42 2016 -0500

    gallium/radeon: fix crash in r600_set_streamout_targets
    
    Protect against dereferencing a gap in the targets array. This was triggered
    by a test in the Khronos CTS.
    
    Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Marek Olšák <marek.olsak@amd.com>
    (cherry picked from commit aa6f88f891d6e070ea8fa251493e3d8ab2af98aa)

diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index 73db8158..4bc0abd 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -2825,7 +2825,8 @@ static void r600_invalidate_buffer(struct pipe_context *ctx, struct pipe_resourc
 	}
 	/* Streamout buffers. */
 	for (i = 0; i < rctx->b.streamout.num_targets; i++) {
-		if (rctx->b.streamout.targets[i]->b.buffer == &rbuffer->b.b) {
+		if (rctx->b.streamout.targets[i] &&
+		    rctx->b.streamout.targets[i]->b.buffer == &rbuffer->b.b) {
 			if (rctx->b.streamout.begin_emitted) {
 				r600_emit_streamout_end(&rctx->b);
 			}
diff --git a/src/gallium/drivers/radeon/r600_streamout.c b/src/gallium/drivers/radeon/r600_streamout.c
index e977ed9..12782b9 100644
--- a/src/gallium/drivers/radeon/r600_streamout.c
+++ b/src/gallium/drivers/radeon/r600_streamout.c
@@ -116,7 +116,7 @@ void r600_set_streamout_targets(struct pipe_context *ctx,
 {
 	struct r600_common_context *rctx = (struct r600_common_context *)ctx;
 	unsigned i;
-        unsigned append_bitmask = 0;
+        unsigned enabled_mask = 0, append_bitmask = 0;
 
 	/* Stop streamout. */
 	if (rctx->streamout.num_targets && rctx->streamout.begin_emitted) {
@@ -126,18 +126,19 @@ void r600_set_streamout_targets(struct pipe_context *ctx,
 	/* Set the new targets. */
 	for (i = 0; i < num_targets; i++) {
 		pipe_so_target_reference((struct pipe_stream_output_target**)&rctx->streamout.targets[i], targets[i]);
+		if (!targets[i])
+			continue;
+
 		r600_context_add_resource_size(ctx, targets[i]->buffer);
+		enabled_mask |= 1 << i;
 		if (offsets[i] == ((unsigned)-1))
-			append_bitmask |=  1 << i;
+			append_bitmask |= 1 << i;
 	}
 	for (; i < rctx->streamout.num_targets; i++) {
 		pipe_so_target_reference((struct pipe_stream_output_target**)&rctx->streamout.targets[i], NULL);
 	}
 
-	rctx->streamout.enabled_mask = (num_targets >= 1 && targets[0] ? 1 : 0) |
-				       (num_targets >= 2 && targets[1] ? 2 : 0) |
-				       (num_targets >= 3 && targets[2] ? 4 : 0) |
-				       (num_targets >= 4 && targets[3] ? 8 : 0);
+	rctx->streamout.enabled_mask = enabled_mask;
 
 	rctx->streamout.num_targets = num_targets;
 	rctx->streamout.append_bitmask = append_bitmask;

commit b2d9723ce3934a4a1bdbaa7ef61904a6a30ca6e0
Author: Nicolai Hähnle <nicolai.haehnle@amd.com>
Date:   Mon Apr 25 18:20:50 2016 -0500

    st/glsl_to_tgsi: reduce stack explosion in recursive expression visitor
    
    In optimized builds, visit(ir_expression *) experiences inlining with gcc that
    leads the function to have a roughly 32KB stack frame. This is a problem given
    that the function is called recursively. In non-optimized builds, the stack
    frame is much smaller, hence one gets crashes that happen only in optimized
    builds.
    
    Arguably there is a compiler bug or at least severe misfeature here. In any
    case, the easy thing to do for now seems to be moving the bulk of the
    non-recursive code into a separate function. This is sufficient to convince my
    version of gcc not to blow up the stack frame of the recursive part. Just to be
    sure, add the gcc-specific noinline attribute to prevent this bug from
    reoccuring if inliner heuristics change.
    
    v2: put ATTRIBUTE_NOINLINE into macros.h
    
    Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95133
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95026
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92850
    Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: Rob Clark <robdclark@gmail.com>
    (cherry picked from commit 98c348d26b28a662d093543ecb7ca839e7883e8e)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 943582d..7717475 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -455,6 +455,8 @@ public:
    virtual void visit(ir_barrier *);
    /*@}*/
 
+   void visit_expression(ir_expression *, st_src_reg *) ATTRIBUTE_NOINLINE;
+
    void visit_atomic_counter_intrinsic(ir_call *);
    void visit_ssbo_intrinsic(ir_call *);
    void visit_membar_intrinsic(ir_call *);
@@ -1540,10 +1542,7 @@ glsl_to_tgsi_visitor::reladdr_to_temp(ir_instruction *ir,
 void
 glsl_to_tgsi_visitor::visit(ir_expression *ir)
 {
-   unsigned int operand;
    st_src_reg op[ARRAY_SIZE(ir->operands)];
-   st_src_reg result_src;
-   st_dst_reg result_dst;
 
    /* Quick peephole: Emit MAD(a, b, c) instead of ADD(MUL(a, b), c)
     */
@@ -1566,7 +1565,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
    if (ir->operation == ir_quadop_vector)
       assert(!"ir_quadop_vector should have been lowered");
 
-   for (operand = 0; operand < ir->get_num_operands(); operand++) {
+   for (unsigned int operand = 0; operand < ir->get_num_operands(); operand++) {
       this->result.file = PROGRAM_UNDEFINED;
       ir->operands[operand]->accept(this);
       if (this->result.file == PROGRAM_UNDEFINED) {
@@ -1583,6 +1582,19 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
       assert(!ir->operands[operand]->type->is_matrix());
    }
 
+   visit_expression(ir, op);
+}


Reply to: