i965: Fix VS constant buffer value loading.

Previously, we'd load linearly from ParameterValues[0] for the constants,
though ParameterValues[1] may not equal ParameterValues[0] + 4.  Additionally,
the STATE_VAL type paramters didn't get updated.

Fixes piglit vp-constant-array-huge.vpfp and ET:QW object locations.

Bug #23226.
This commit is contained in:
Eric Anholt 2009-11-10 14:11:46 -08:00
parent e5ffb9f5ea
commit 1220aba99b

View file

@ -53,6 +53,7 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
const struct gl_program_parameter_list *params = vp->program.Base.Parameters;
const int size = params->NumParameters * 4 * sizeof(GLfloat);
drm_intel_bo *const_buffer;
int i;
/* BRW_NEW_VERTEX_PROGRAM */
if (!vp->use_const_buffer)
@ -62,7 +63,16 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
size, 64);
/* _NEW_PROGRAM_CONSTANTS */
dri_bo_subdata(const_buffer, 0, size, params->ParameterValues);
/* Updates the ParamaterValues[i] pointers for all parameters of the
* basic type of PROGRAM_STATE_VAR.
*/
_mesa_load_state_parameters(&brw->intel.ctx, vp->program.Base.Parameters);
for (i = 0; i < params->NumParameters; i++) {
dri_bo_subdata(const_buffer, i * 4 * sizeof(float), 4 * sizeof(float),
params->ParameterValues[i]);
}
return const_buffer;
}