diff options
author | Brian Paul <[email protected]> | 2006-10-31 16:02:56 +0000 |
---|---|---|
committer | Brian Paul <[email protected]> | 2006-10-31 16:02:56 +0000 |
commit | 4e9e0aff790656821970ba74d8996718e415ea68 (patch) | |
tree | 74f28e91c90865fd34ffe903f863c3de486c7dbd /src | |
parent | 72f49657e8f7eac9bdb09435230fbe8f6a2c854b (diff) |
We need to call _mesa_load_state_parameters() whenever a fragment program
is enabled and we've changed any GL state that might be referenced by a
fragment program (such as state.fog.params). Do this during swrast
validation, not in _swrast_exec_fragment_program().
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/swrast/s_context.c | 16 | ||||
-rw-r--r-- | src/mesa/swrast/s_nvfragprog.c | 5 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c index 18f5fe497bb..0de6dc25b4a 100644 --- a/src/mesa/swrast/s_context.c +++ b/src/mesa/swrast/s_context.c @@ -226,6 +226,10 @@ static void _swrast_update_fragment_program( GLcontext *ctx ) { 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); } @@ -521,7 +525,17 @@ _swrast_validate_derived( GLcontext *ctx ) if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM)) _swrast_update_fog_state( ctx ); - if (swrast->NewState & _NEW_PROGRAM) + if (swrast->NewState & (_NEW_MODELVIEW | + _NEW_PROJECTION | + _NEW_TEXTURE_MATRIX | + _NEW_FOG | + _NEW_LIGHT | + _NEW_LINE | + _NEW_TEXTURE | + _NEW_TRANSFORM | + _NEW_POINT | + _NEW_VIEWPORT | + _NEW_PROGRAM)) _swrast_update_fragment_program( ctx ); if (swrast->NewState & _NEW_TEXTURE) diff --git a/src/mesa/swrast/s_nvfragprog.c b/src/mesa/swrast/s_nvfragprog.c index a34db23fa64..94c249926dc 100644 --- a/src/mesa/swrast/s_nvfragprog.c +++ b/src/mesa/swrast/s_nvfragprog.c @@ -1597,11 +1597,6 @@ _swrast_exec_fragment_program( GLcontext *ctx, SWspan *span ) ctx->_CurrentProgram = GL_FRAGMENT_PROGRAM_ARB; /* or NV, doesn't matter */ -#if 0 /* we really shouldn't need this here... */ - if (program->Base.Parameters) { - _mesa_load_state_parameters(ctx, program->Base.Parameters); - } -#endif run_program(ctx, span, 0, span->end); if (program->Base.OutputsWritten & (1 << FRAG_RESULT_DEPR)) { |