mesa: Pass gl_constant_value union into _mesa_fetch_state().

We've had some trouble in the past with copying integers around via
float pointers, as the C compiler sometimes uses x87 floating point
registers to load values on 32-bit systems.  Passing the
gl_constant_value union should be safer.

To avoid churn, this patch creates a "GLfloat *value" variable so
existing uses can stay the same.

Not observed to fix anything, but I was in the area adding more integer
state vars, and thought it'd be wise.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Cc: mesa-stable@lists.freedesktop.org
(cherry picked from commit 8b408972ff)
This commit is contained in:
Kenneth Graunke 2016-05-26 19:56:48 -07:00 committed by Emil Velikov
parent 7d41c8aa25
commit a9647850d1

View file

@ -55,8 +55,10 @@
*/
static void
_mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
GLfloat *value)
gl_constant_value *val)
{
GLfloat *value = &val->f;
switch (state[0]) {
case STATE_MATERIAL:
{
@ -353,7 +355,7 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
}
return;
case STATE_NUM_SAMPLES:
((int *)value)[0] = MAX2(1, _mesa_geometric_samples(ctx->DrawBuffer));
val[0].i = MAX2(1, _mesa_geometric_samples(ctx->DrawBuffer));
return;
case STATE_DEPTH_RANGE:
value[0] = ctx->ViewportArray[0].Near; /* near */
@ -1071,7 +1073,7 @@ _mesa_load_state_parameters(struct gl_context *ctx,
if (paramList->Parameters[i].Type == PROGRAM_STATE_VAR) {
_mesa_fetch_state(ctx,
paramList->Parameters[i].StateIndexes,
&paramList->ParameterValues[i][0].f);
&paramList->ParameterValues[i][0]);
}
}
}