diff options
| author | Eric Anholt <eric@anholt.net> | 2010-11-06 11:43:45 -0700 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2010-11-06 11:44:32 -0700 | 
| commit | d348b0c72d41603178c0923e276869c7280904c7 (patch) | |
| tree | 6fff215e2889f1e30e89624b5c3862ae15463121 /src | |
| parent | 8eaa97592a4330d1a253f6fa32df7a3fd04f53ae (diff) | |
mesa: Fix delayed state flagging for EXT_sso-related program changes.
Flushing the vertices after having already updated the state doesn't
do any good.  Fixes useshaderprogram-flushverts-1.  As a side effect,
by moving it to the right place we end up skipping no-op state changes
for traditional glUseProgram.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/main/shaderapi.c | 23 | 
1 files changed, 5 insertions, 18 deletions
| diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 9717e00559..030236e735 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -992,6 +992,7 @@ use_shader_program(struct gl_context *ctx, GLenum type,     }     if (*target != shProg) { +      FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);        _mesa_reference_shader_program(ctx, target, shProg);        return true;     } @@ -1005,19 +1006,11 @@ use_shader_program(struct gl_context *ctx, GLenum type,  void  _mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg)  { -   bool changed = false; - -   changed = use_shader_program(ctx, GL_VERTEX_SHADER, shProg); -   changed = use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB, shProg) -      || changed; -   changed = use_shader_program(ctx, GL_FRAGMENT_SHADER, shProg) -      || changed; +   use_shader_program(ctx, GL_VERTEX_SHADER, shProg); +   use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB, shProg); +   use_shader_program(ctx, GL_FRAGMENT_SHADER, shProg);     _mesa_active_program(ctx, shProg, "glUseProgram"); -   if (changed) { -      FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS); -   } -     if (ctx->Driver.UseProgram)        ctx->Driver.UseProgram(ctx, shProg);  } @@ -1589,8 +1582,6 @@ _mesa_UseProgramObjectARB(GLhandleARB program)     struct gl_transform_feedback_object *obj =        ctx->TransformFeedback.CurrentObject; -   FLUSH_VERTICES(ctx, _NEW_PROGRAM); -     if (obj->Active) {        _mesa_error(ctx, GL_INVALID_OPERATION,                    "glUseProgram(transform feedback active)"); @@ -1737,11 +1728,7 @@ void  _mesa_use_shader_program(struct gl_context *ctx, GLenum type,  			 struct gl_shader_program *shProg)  { -   bool changed; - -   changed = use_shader_program(ctx, type, shProg); -   if (changed) -      FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS); +   use_shader_program(ctx, type, shProg);     if (ctx->Driver.UseProgram)        ctx->Driver.UseProgram(ctx, shProg); | 
