[Mesa-dev] [PATCH 11/12] mesa/subroutines: fix reset on bindpipeline
Dave Airlie
airlied at gmail.com
Mon May 23 00:52:41 UTC 2016
From: Dave Airlie <airlied at redhat.com>
Fixes:
GL45-CTS.shader_subroutine.subroutine_uniform_reset
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
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.5.5
More information about the mesa-dev
mailing list