mesa/subroutines: fix reset on bindpipeline
authorDave Airlie <airlied@redhat.com>
Tue, 17 May 2016 06:25:02 +0000 (16:25 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 23 May 2016 06:19:57 +0000 (16:19 +1000)
Fixes:
GL45-CTS.shader_subroutine.subroutine_uniform_reset

Reviewed-by: Chris Forbes <chrisforbes@google.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/main/pipelineobj.c
src/mesa/main/shaderapi.c

index 97285a28ab00dc31479504f5e411dcb3cdfbd1a6..b1501984c9b4c4a91a7c4ff41b7cf59c65caa8a4 100644 (file)
@@ -442,6 +442,7 @@ void
 _mesa_bind_pipeline(struct gl_context *ctx,
                     struct gl_pipeline_object *pipe)
 {
+   int i;
    /* First bind the Pipeline to pipeline binding point */
    _mesa_reference_pipeline_object(ctx, &ctx->Pipeline.Current, pipe);
 
@@ -467,6 +468,9 @@ _mesa_bind_pipeline(struct gl_context *ctx,
 
       FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);
 
+      for (i = 0; i < MESA_SHADER_STAGES; i++)
+         _mesa_shader_program_init_subroutine_defaults(ctx->_Shader->CurrentProgram[i]);
+
       if (ctx->Driver.UseProgram)
          ctx->Driver.UseProgram(ctx, NULL);
    }
index 79097679e90a268d9067614d79882106f3c59ca4..6d58fbb492e5d06a03af37acc52c58eee8ed38bb 100644 (file)
@@ -1132,6 +1132,9 @@ use_shader_program(struct gl_context *ctx, gl_shader_stage stage,
    if ((shProg != NULL) && (shProg->_LinkedShaders[stage] == NULL))
       shProg = NULL;
 
+   if (shProg)
+      _mesa_shader_program_init_subroutine_defaults(shProg);
+
    if (*target != shProg) {
       /* Program is current, flush it */
       if (shTarget == ctx->_Shader) {
@@ -1176,7 +1179,6 @@ _mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg)
       use_shader_program(ctx, i, shProg, &ctx->Shader);
    _mesa_active_program(ctx, shProg, "glUseProgram");
 
-   _mesa_shader_program_init_subroutine_defaults(shProg);
    if (ctx->Driver.UseProgram)
       ctx->Driver.UseProgram(ctx, shProg);
 }