ARB prog: Layout parameters from parameter type, not src type
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 25 Jul 2009 01:14:47 +0000 (18:14 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 25 Jul 2009 01:14:47 +0000 (18:14 -0700)
Use the type stored in the Parameters array to determine the layout
instead of the type in the instruction register field.  Also, update
the instruction register field based on the parameter type.

This makes Google Earth work exactly like with Mesa master.

src/mesa/shader/prog_parameter_layout.c

index f374636f113e97a755ce2c1fd1608bf2f209edf6..4d67eca902f713ee1c6b60440bcba11571036c70 100644 (file)
@@ -170,10 +170,15 @@ _mesa_layout_parameters(struct asm_parser_state *state)
         }
 
 
+        if ((inst->SrcReg[i].Base.File <= PROGRAM_VARYING )
+            || (inst->SrcReg[i].Base.File >= PROGRAM_WRITE_ONLY)) {
+           continue;
+        }
+
         inst->Base.SrcReg[i] = inst->SrcReg[i].Base;
         p = & state->prog->Parameters->Parameters[idx];
 
-        switch (inst->SrcReg[i].Base.File) {
+        switch (p->Type) {
         case PROGRAM_CONSTANT: {
            const float *const v =
               state->prog->Parameters->ParameterValues[idx];
@@ -194,6 +199,9 @@ _mesa_layout_parameters(struct asm_parser_state *state)
         default:
            break;
         }
+
+        inst->SrcReg[i].Base.File = p->Type;
+        inst->Base.SrcReg[i].File = p->Type;
       }
    }