From 5fe912831cac6722f2cf8add010c553a43e178b4 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 17 May 2016 16:25:02 +1000 Subject: [PATCH] mesa/subroutines: fix reset on bindpipeline Fixes: GL45-CTS.shader_subroutine.subroutine_uniform_reset Reviewed-by: Chris Forbes Signed-off-by: Dave Airlie --- src/mesa/main/pipelineobj.c | 4 ++++ src/mesa/main/shaderapi.c | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c index 97285a2..b150198 100644 --- a/src/mesa/main/pipelineobj.c +++ b/src/mesa/main/pipelineobj.c @@ -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); } diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 7909767..6d58fbb 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -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); } -- 2.7.4