diff options
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r-- | src/compiler/glsl/glsl_parser_extras.cpp | 19 | ||||
-rw-r--r-- | src/compiler/glsl/shader_cache.cpp | 10 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index ca74b559dc..eb12efff8a 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -2005,18 +2005,9 @@ void _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, 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); const char *source = force_recompile && shader->FallbackSource ? shader->FallbackSource : shader->Source; - if (ctx->Const.GenerateTemporaryNames) - (void) p_atomic_cmpxchg(&ir_variable::temporaries_allocate_names, - false, true); - - state->error = glcpp_preprocess(state, &source, &state->info_log, - add_builtin_defines, state, ctx); - if (!force_recompile) { if (ctx->Cache) { char buf[41]; @@ -2050,6 +2041,16 @@ _mesa_glsl_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); + + if (ctx->Const.GenerateTemporaryNames) + (void) p_atomic_cmpxchg(&ir_variable::temporaries_allocate_names, + false, true); + + state->error = glcpp_preprocess(state, &source, &state->info_log, + add_builtin_defines, state, ctx); + if (!state->error) { _mesa_glsl_lexer_ctor(state, source); _mesa_glsl_parse(state); diff --git a/src/compiler/glsl/shader_cache.cpp b/src/compiler/glsl/shader_cache.cpp index e51fecd651..738e5488ac 100644 --- a/src/compiler/glsl/shader_cache.cpp +++ b/src/compiler/glsl/shader_cache.cpp @@ -1319,6 +1319,16 @@ shader_cache_read_program_metadata(struct gl_context *ctx, ctx->API, ctx->Const.GLSLVersion, ctx->Const.ForceGLSLVersion); + /* We run the preprocessor on shaders after hashing them, so we need to + * add any extension override vars to the hash. If we don't do this the + * preprocessor could result in different output and we could load the + * wrong shader. + */ + char *ext_override = getenv("MESA_EXTENSION_OVERRIDE"); + if (ext_override) { + ralloc_asprintf_append(&buf, "ext:%s", ext_override); + } + /* DRI config options may also change the output from the compiler so * include them as an input to sha1 creation. */ |