Mesa (master): i965: Fix the test for variable indexing of shader inputs.

Eric Anholt anholt at kemper.freedesktop.org
Thu Aug 26 16:55:18 UTC 2010


Module: Mesa
Branch: master
Commit: b72c85df5567713293452db6b60c537cd913dcc1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b72c85df5567713293452db6b60c537cd913dcc1

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Aug 26 09:10:19 2010 -0700

i965: Fix the test for variable indexing of shader inputs.

Shader inputs appear in source registers, not dst registers.  Catches
unsupported shaders in glsl-fs-varying-array and Humus
RaytracedShadows.

---

 src/mesa/drivers/dri/i965/brw_program.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c
index 1cdc8c6..d5b7bee 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -168,6 +168,9 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
     * See piglit glsl-{vs,fs}-functions-[23] tests.
     */
    for (i = 0; i < prog->NumInstructions; i++) {
+      struct prog_instruction *inst = prog->Instructions + i;
+      int r;
+
       if (prog->Instructions[i].Opcode == OPCODE_CAL) {
 	 shader_error(ctx, prog,
 		      "i965 driver doesn't yet support uninlined function "
@@ -183,12 +186,15 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
 	 return GL_FALSE;
       }
 
-      if (prog->Instructions[i].DstReg.RelAddr &&
-	  prog->Instructions[i].DstReg.File == PROGRAM_INPUT) {
-	 shader_error(ctx, prog,
-		      "Variable indexing of shader inputs unsupported\n");
-	 return GL_FALSE;
+      for (r = 0; r < _mesa_num_inst_src_regs(inst->Opcode); r++) {
+	 if (prog->Instructions[i].SrcReg[r].RelAddr &&
+	     prog->Instructions[i].SrcReg[r].File == PROGRAM_INPUT) {
+	    shader_error(ctx, prog,
+			 "Variable indexing of shader inputs unsupported\n");
+	    return GL_FALSE;
+	 }
       }
+
       if (prog->Instructions[i].DstReg.RelAddr &&
 	  prog->Instructions[i].DstReg.File == PROGRAM_OUTPUT) {
 	 shader_error(ctx, prog,




More information about the mesa-commit mailing list