summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/swrast/s_context.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 0de6dc25b4a..62cf6f2f5ae 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -223,15 +223,12 @@ _swrast_update_fog_state( GLcontext *ctx )
* program parameters with current state values.
*/
static void
-_swrast_update_fragment_program( GLcontext *ctx )
+_swrast_update_fragment_program(GLcontext *ctx, GLbitfield newState)
{
if (ctx->FragmentProgram._Enabled) {
- /* XXX it would be nice to have a per-program bitmask indicating
- * what global state vars are used (lighting, point, fog, etc) to
- * avoid doing this when not needed.
- */
const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
- _mesa_load_state_parameters(ctx, fp->Base.Parameters);
+ if (fp->Base.Parameters->StateFlags & newState)
+ _mesa_load_state_parameters(ctx, fp->Base.Parameters);
}
}
@@ -536,7 +533,7 @@ _swrast_validate_derived( GLcontext *ctx )
_NEW_POINT |
_NEW_VIEWPORT |
_NEW_PROGRAM))
- _swrast_update_fragment_program( ctx );
+ _swrast_update_fragment_program( ctx, swrast->NewState );
if (swrast->NewState & _NEW_TEXTURE)
_swrast_update_texture_samplers( ctx );