make use of Parameters->StateFlags in _swrast_update_fragment_program()
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 31 Oct 2006 19:53:38 +0000 (19:53 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 31 Oct 2006 19:53:38 +0000 (19:53 +0000)
src/mesa/swrast/s_context.c

index 0de6dc25b4a1d47d36b0eecddbe4ca20f41aca34..62cf6f2f5aed8116cc5c0ac1dd41663e9e3ff548 100644 (file)
@@ -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 );