[Mesa-dev] [PATCH 17/88] glsl: add param to force shader recompile

Timothy Arceri timothy.arceri at collabora.com
Sat Sep 24 05:24:58 UTC 2016


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



More information about the mesa-dev mailing list