* \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"
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.
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;
}
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);