I tested with a shader that generates an ARL instruction and found inst->dst is:

{file = PROGRAM_ADDRESS, index = 0, writemask = 1, cond_mask = 8, type = 2, reladdr = 0x0}

in the code in question. I don't think there's any way that the dest register's writemask could be set to zero.

Other instructions that don't use the dst register (like OPCODE_BGNLOOP, OPCODE_IF, etc) use undef_dst to initialize the instructions dst register.

BTW, the initialization of undef_dst seems incorrect:

static st_dst_reg undef_dst = st_dst_reg(PROGRAM_UNDEFINED, SWIZZLE_NOOP, GLSL_TYPE_ERROR);

I think SWIZZLE_NOOP should be WRITEMASK_XYZW since the parameter is a writemask, not a swizzle.

-Brian



On 10/09/2011 01:22 PM, Marek Olšák wrote:
Correct.

The thing was: even though we have an addressing register in TGSI
(e.g. tgsi_full_dst|src_register::Indirect), everybody except nv50 and
partially svga doesn't use it now. They expect the indirect register
file is always TGSI_FILE_ADDRESS and the index is 0, making the
destination of ARL irrelevant. This is probably a bug in those drivers
and that's what made me think that ARL doesn't need a destination
register. Sorry for the noise.

Marek

On Sun, Oct 9, 2011 at 8:51 PM, Bryan Cain<bryanca...@gmail.com>  wrote:
What does it do if there's no destination register?  In any case, I
don't think glsl_to_tgsi emits any ARLs of that form, so it shouldn't be
a problem.

Bryan

On 10/07/2011 01:06 PM, Marek Olšák wrote:
I think ARL is allowed to have no destination register, right? In that
case, there should be a special case not to eliminate ARLs.

Marek

On Fri, Oct 7, 2011 at 5:40 PM, Brian Paul<brian.e.p...@gmail.com>  wrote:
From: Brian Paul<bri...@vmware.com>

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.
---
  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |    8 +++++++-
  1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index d8ef8a3..44b1149 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -3776,8 +3776,14 @@ glsl_to_tgsi_visitor::eliminate_dead_code_advanced(void)
          iter.remove();
          delete inst;
          removed++;
-      } else
+      } else {
          inst->dst.writemask&= ~(inst->dead_mask);
+         if (inst->dst.writemask == 0) {
+            iter.remove();
+            delete inst;
+            removed++;
+         }
+      }
    }

    ralloc_free(write_level);
--
1.7.3.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to