diff options
-rw-r--r-- | docs/shading.html | 2 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 1 | ||||
-rw-r--r-- | src/mesa/main/shaderapi.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_shader_cache.c | 6 |
4 files changed, 10 insertions, 1 deletions
diff --git a/docs/shading.html b/docs/shading.html index 7e3d2e4fced..c789102e641 100644 --- a/docs/shading.html +++ b/docs/shading.html @@ -50,6 +50,8 @@ execution. These are generally used for debugging. The filenames will be "shader_X.vert" or "shader_X.frag" where X the shader ID. <li><b>cache_info</b> - print debug information about shader cache +<li><b>cache_fb</b> - force cached shaders to be ignored and do a full + recompile via the fallback path</li> <li><b>uniform</b> - print message to stdout when glUniform is called <li><b>nopvert</b> - force vertex shaders to be a simple shader that just transforms the vertex position with ftransform() and passes through the color and diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index efc69202540..d060f8f7d33 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2977,6 +2977,7 @@ struct gl_shader_program #define GLSL_REPORT_ERRORS 0x40 /**< Print compilation errors */ #define GLSL_DUMP_ON_ERROR 0x80 /**< Dump shaders to stderr on compile error */ #define GLSL_CACHE_INFO 0x100 /**< Print debug information about shader cache */ +#define GLSL_CACHE_FALLBACK 0x200 /**< Force shader cache fallback paths */ /** diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 68fb3faf0c6..325542e5230 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -77,6 +77,8 @@ _mesa_get_shader_flags(void) flags |= GLSL_DUMP; if (strstr(env, "log")) flags |= GLSL_LOG; + if (strstr(env, "cache_fb")) + flags |= GLSL_CACHE_FALLBACK; if (strstr(env, "cache_info")) flags |= GLSL_CACHE_INFO; if (strstr(env, "nopvert")) diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c index 175d69d732e..45438e56bd2 100644 --- a/src/mesa/state_tracker/st_shader_cache.c +++ b/src/mesa/state_tracker/st_shader_cache.c @@ -225,8 +225,12 @@ st_load_tgsi_from_disk_cache(struct gl_context *ctx, if (prog->data->LinkStatus != linking_skipped) return false; - struct st_context *st = st_context(ctx); uint8_t *buffer = NULL; + if (ctx->_Shader->Flags & GLSL_CACHE_FALLBACK) { + goto fallback_recompile; + } + + struct st_context *st = st_context(ctx); for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; |