st/mesa: kill instruction if writemask=0 in eliminate_dead_code_advanced()
authorBrian Paul <brianp@vmware.com>
Thu, 13 Oct 2011 14:35:19 +0000 (08:35 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 13 Oct 2011 14:35:19 +0000 (08:35 -0600)
This fixes a bug where we'd wind up emitting an invalid instruction like
MOVE R[0]., R[1];  - note the empty/zero writemask.  If we don't write to
any dest register channels, cull the instruction.

v2: simply change/fix the existing test for instruction culling.

src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index fe65ae53941cfc099e705208e436f06f2d07ace2..9cc568725363942d8a22403c21d1f2444787d66b 100644 (file)
@@ -3772,7 +3772,7 @@ glsl_to_tgsi_visitor::eliminate_dead_code_advanced(void)
       
       if (!inst->dead_mask || !inst->dst.writemask)
          continue;
-      else if (inst->dead_mask == inst->dst.writemask) {
+      else if ((inst->dst.writemask & ~inst->dead_mask) == 0) {
          iter.remove();
          delete inst;
          removed++;