i965: Fix the test for variable indexing of shader inputs.
authorEric Anholt <eric@anholt.net>
Thu, 26 Aug 2010 16:10:19 +0000 (09:10 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 26 Aug 2010 16:53:01 +0000 (09:53 -0700)
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

index 1cdc8c6411b9775e30066951cf71a5fcbc489a30..d5b7bee1b174df4448d2c1eeda8f7620abb385a3 100644 (file)
@@ -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,