glsl: Fix handling of OPCODE_PRINT for no registers case.
authorVinson Lee <vlee@vmware.com>
Sun, 18 Apr 2010 07:11:49 +0000 (00:11 -0700)
committerVinson Lee <vlee@vmware.com>
Sun, 18 Apr 2010 07:11:49 +0000 (00:11 -0700)
A register file value is unsigned so could never be -1. A
value of 0 also aliased to PROGRAM_TEMPORARY.

If an OPCODE_PRINT has no registers to print, set the register
file value to PROGRAM_UNDEFINED and check for that value when
executing this instruction.

src/mesa/shader/nvvertparse.c
src/mesa/shader/prog_execute.c

index 631b315af3a7f342401e856382682ab47182612f..7332fc4780badd8f820ea5a5abc504cd3ac55529 100644 (file)
@@ -1096,7 +1096,7 @@ Parse_PrintInstruction(struct parse_state *parseState, struct prog_instruction *
       }
    }
    else {
-      srcReg->File = 0;
+      srcReg->File = PROGRAM_UNDEFINED;
    }
 
    /* semicolon */
index 37750cc330aa42e75c6529ab7d34311f3b1e6c10..0067512cfb2f220191ddf654c6e14ca1bad861a0 100644 (file)
@@ -1767,7 +1767,7 @@ _mesa_execute_program(GLcontext * ctx,
          break;
       case OPCODE_PRINT:
          {
-            if (inst->SrcReg[0].File != -1) {
+            if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {
                GLfloat a[4];
                fetch_vector4(&inst->SrcReg[0], machine, a);
                printf("%s%g, %g, %g, %g\n", (const char *) inst->Data,