Mesa (10.3): mesa: fix prog_optimize.c assertions triggered by SWZ opcode

Emil Velikov evelikov at kemper.freedesktop.org
Tue Sep 23 00:21:03 UTC 2014


Module: Mesa
Branch: 10.3
Commit: 9599cd6a2f73ece38fa57abb3be91b3bfc49deec
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9599cd6a2f73ece38fa57abb3be91b3bfc49deec

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Sep 16 15:14:19 2014 -0600

mesa: fix prog_optimize.c assertions triggered by SWZ opcode

The SWZ instruction can have swizzle terms >4 (SWIZZLE_ZERO, SWIZZLE_ONE).
These swizzle terms caused a few assertions to fail.
This started happening after the commit "mesa: Actually use the Mesa IR
optimizer for ARB programs." when replaying some apitrace files.

A new piglit test (tests/asmparsertest/shaders/ARBfp1.0/swz-08.txt)
exercises this.

Cc: "10.3" <mesa-stable at lists.freedesktop.org>
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
(cherry picked from commit 7b2c7032446da4138dedeee8feaa79d741f1f108)

---

 src/mesa/program/prog_optimize.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/mesa/program/prog_optimize.c b/src/mesa/program/prog_optimize.c
index 6153f5e..0aa43d5 100644
--- a/src/mesa/program/prog_optimize.c
+++ b/src/mesa/program/prog_optimize.c
@@ -114,7 +114,6 @@ get_src_arg_mask(const struct prog_instruction *inst,
    read_mask = 0x0;
    for (comp = 0; comp < 4; ++comp) {
       const GLuint coord = GET_SWZ(inst->SrcReg[arg].Swizzle, comp);
-      ASSERT(coord < 4);
       if (channel_mask & (1 << comp) && coord <= SWIZZLE_W)
          read_mask |= 1 << coord;
    }
@@ -284,11 +283,11 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
 
 	    for (comp = 0; comp < 4; comp++) {
 	       const GLuint swz = GET_SWZ(inst->SrcReg[j].Swizzle, comp);
-	       ASSERT(swz < 4);
-               if ((read_mask & (1 << swz)) == 0)
-		  continue;
-               if (swz <= SWIZZLE_W)
+               if (swz <= SWIZZLE_W) {
+                  if ((read_mask & (1 << swz)) == 0)
+                     continue;
                   tempRead[index][swz] = GL_TRUE;
+               }
 	    }
          }
       }




More information about the mesa-commit mailing list