--- src/compiler/glsl/linker.cpp | 5 +++-- src/compiler/glsl/program.h | 3 ++- src/compiler/glsl/standalone.cpp | 2 +- src/mesa/main/ff_fragment_shader.cpp | 2 +- src/mesa/main/shaderapi.c | 2 +- src/mesa/program/ir_to_mesa.cpp | 5 +++-- src/mesa/program/ir_to_mesa.h | 5 ++++- 7 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index bc092b2..d71f96c 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -4600,7 +4600,8 @@ link_varyings_and_uniforms(unsigned first, unsigned last, } void -link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) +link_shaders(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback) { prog->LinkStatus = true; /* All error paths will set this to false */ prog->Validated = false; @@ -4628,7 +4629,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) unsigned int num_explicit_uniform_locs = 0; #ifdef ENABLE_SHADER_CACHE - if (shader_cache_read_program_metadata(ctx, prog)) + if (!is_cache_fallback && shader_cache_read_program_metadata(ctx, prog)) return; #endif diff --git a/src/compiler/glsl/program.h b/src/compiler/glsl/program.h index 58a7069..bb9bbb0 100644 --- a/src/compiler/glsl/program.h +++ b/src/compiler/glsl/program.h @@ -40,7 +40,8 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, #endif extern void -link_shaders(struct gl_context *ctx, struct gl_shader_program *prog); +link_shaders(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback); extern void build_program_resource_list(struct gl_context *ctx, diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index 2ed33c5..793edbf 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -404,7 +404,7 @@ standalone_compile_shader(const struct standalone_options *_options, if ((status == EXIT_SUCCESS) && options->do_link) { _mesa_clear_shader_program_data(whole_program); - link_shaders(ctx, whole_program); + link_shaders(ctx, whole_program, true); status = (whole_program->LinkStatus) ? EXIT_SUCCESS : EXIT_FAILURE; if (strlen(whole_program->InfoLog) > 0) { diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index db3736e..97ccc61 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -1264,7 +1264,7 @@ create_new_program(struct gl_context *ctx, struct state_key *key) p.shader_program->Shaders[0] = p.shader; p.shader_program->NumShaders = 1; - _mesa_glsl_link_shader(ctx, p.shader_program); + _mesa_glsl_link_shader(ctx, p.shader_program, false); if (!p.shader_program->LinkStatus) _mesa_problem(ctx, "Failed to link fixed function fragment shader: %s\n", diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index c0d7fd5..1aaa366 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1092,7 +1092,7 @@ _mesa_link_program(struct gl_context *ctx, struct gl_shader_program *shProg) FLUSH_VERTICES(ctx, _NEW_PROGRAM); - _mesa_glsl_link_shader(ctx, shProg); + _mesa_glsl_link_shader(ctx, shProg, false); /* Capture .shader_test files. */ const char *capture_path = _mesa_get_shader_capture_path(); diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 0d50477..e62a823 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -3049,7 +3049,8 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) * Link a GLSL shader program. Called via glLinkProgram(). */ void -_mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) +_mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback) { unsigned int i; @@ -3064,7 +3065,7 @@ _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) } if (prog->LinkStatus) { - link_shaders(ctx, prog); + link_shaders(ctx, prog, is_cache_fallback); } /* FIXME: We look at prog->Version to determine whether we actually linked diff --git a/src/mesa/program/ir_to_mesa.h b/src/mesa/program/ir_to_mesa.h index be45ba0..54d98a8 100644 --- a/src/mesa/program/ir_to_mesa.h +++ b/src/mesa/program/ir_to_mesa.h @@ -33,7 +33,10 @@ struct gl_context; struct gl_shader; struct gl_shader_program; -void _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); +void _mesa_glsl_link_shader(struct gl_context *ctx, + struct gl_shader_program *prog, + bool is_shader_cache); + GLboolean _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); void -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev