loader: #define PATH_MAX when undefined (eg. Hurd)
[mesa.git] / src / mesa / program / prog_parameter_layout.c
index e4f2db3b379498820962122d18e3c0a286990a69..d28a6675c06cb6e9c127852207a32fc200baff92 100644 (file)
@@ -28,7 +28,7 @@
  * \author Ian Romanick <ian.d.romanick@intel.com>
  */
 
-#include "main/compiler.h"
+#include "main/imports.h"
 #include "main/mtypes.h"
 #include "prog_parameter.h"
 #include "prog_parameter_layout.h"
@@ -92,10 +92,20 @@ copy_indirect_accessed_array(struct gl_program_parameter_list *src,
       assert(j == dst->NumParameters);
 
       /* copy src parameter [i] to dest parameter [j] */
-      memcpy(& dst->Parameters[j], curr,
+      memcpy(&dst->Parameters[j], curr,
             sizeof(dst->Parameters[j]));
-      memcpy(dst->ParameterValues[j], src->ParameterValues[i],
-            sizeof(GLfloat) * 4);
+
+      dst->ParameterValueOffset[j] = dst->NumParameterValues;
+
+      gl_constant_value *pv_dst =
+         dst->ParameterValues + dst->ParameterValueOffset[j];
+      gl_constant_value *pv_src =
+         src->ParameterValues + src->ParameterValueOffset[i];
+
+      memcpy(pv_dst, pv_src, MIN2(src->Parameters[i].Size, 4) *
+             sizeof(GLfloat));
+      dst->NumParameterValues += MIN2(dst->Parameters[j].Size, 4);
+
 
       /* Pointer to the string name was copied.  Null-out src param name
        * to prevent double free later.
@@ -173,7 +183,7 @@ _mesa_layout_parameters(struct asm_parser_state *state)
            continue;
         }
 
-        if ((inst->SrcReg[i].Base.File <= PROGRAM_VARYING )
+        if ((inst->SrcReg[i].Base.File <= PROGRAM_OUTPUT)
             || (inst->SrcReg[i].Base.File >= PROGRAM_WRITE_ONLY)) {
            continue;
         }
@@ -183,8 +193,9 @@ _mesa_layout_parameters(struct asm_parser_state *state)
 
         switch (p->Type) {
         case PROGRAM_CONSTANT: {
-           const gl_constant_value *const v =
-              state->prog->Parameters->ParameterValues[idx];
+            unsigned pvo = state->prog->Parameters->ParameterValueOffset[idx];
+            const gl_constant_value *const v =
+               state->prog->Parameters->ParameterValues + pvo;
 
            inst->Base.SrcReg[i].Index =
               _mesa_add_unnamed_constant(layout, v, p->Size, & swizzle);