This will be used to skip checking the cache and force a recompile. --- src/compiler/glsl/glsl_parser_extras.cpp | 22 ++++++++++++---------- src/compiler/glsl/program.h | 2 +- src/compiler/glsl/standalone.cpp | 3 ++- src/mesa/main/shaderapi.c | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 37d8cf9..186efb6 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -1874,7 +1874,7 @@ add_builtin_defines(struct _mesa_glsl_parse_state *state, void _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, - bool dump_ast, bool dump_hir) + bool dump_ast, bool dump_hir, bool force_recompile) { struct _mesa_glsl_parse_state *state = new(shader) _mesa_glsl_parse_state(ctx, shader->Stage, shader); @@ -1888,16 +1888,18 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, add_builtin_defines, state, ctx); #ifdef ENABLE_SHADER_CACHE - char buf[41]; - _mesa_sha1_compute(source, strlen(source), shader->sha1); - if (ctx->Cache && cache_has_key(ctx->Cache, shader->sha1)) { - /* We've seen this shader before and know it compiles */ - if (ctx->_Shader->Flags & GLSL_CACHE_INFO) { - fprintf(stderr, "deferring compile of shader: %s\n", - _mesa_sha1_format(buf, shader->sha1)); + if (!force_recompile) { + char buf[41]; + _mesa_sha1_compute(source, strlen(source), shader->sha1); + if (ctx->Cache && cache_has_key(ctx->Cache, shader->sha1)) { + /* We've seen this shader before and know it compiles */ + if (ctx->_Shader->Flags & GLSL_CACHE_INFO) { + fprintf(stderr, "deferring compile of shader: %s\n", + _mesa_sha1_format(buf, shader->sha1)); + } + shader->CompileStatus = true; + return; } - shader->CompileStatus = true; - return; } #endif diff --git a/src/compiler/glsl/program.h b/src/compiler/glsl/program.h index 8f5a31b..58a7069 100644 --- a/src/compiler/glsl/program.h +++ b/src/compiler/glsl/program.h @@ -33,7 +33,7 @@ struct gl_shader_program; extern void _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, - bool dump_ast, bool dump_hir); + bool dump_ast, bool dump_hir, bool force_recompile); #ifdef __cplusplus } /* extern "C" */ diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index d6e6829..2ed33c5 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -279,7 +279,8 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader) struct _mesa_glsl_parse_state *state = new(shader) _mesa_glsl_parse_state(ctx, shader->Stage, shader); - _mesa_glsl_compile_shader(ctx, shader, options->dump_ast, options->dump_hir); + _mesa_glsl_compile_shader(ctx, shader, options->dump_ast, + options->dump_hir, true); /* Print out the resulting IR */ if (!state->error && options->dump_lir) { diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index b0d6b6e..c0d7fd5 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1033,7 +1033,7 @@ _mesa_compile_shader(struct gl_context *ctx, struct gl_shader *sh) /* this call will set the shader->CompileStatus field to indicate if * compilation was successful. */ - _mesa_glsl_compile_shader(ctx, sh, false, false); + _mesa_glsl_compile_shader(ctx, sh, false, false, false); if (ctx->_Shader->Flags & GLSL_LOG) { _mesa_write_shader_to_file(sh); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev