summaryrefslogtreecommitdiff
path: root/src/compiler/glsl/glsl_parser_extras.cpp
diff options
context:
space:
mode:
authorTimothy Arceri <tarceri@itsqueeze.com>2020-10-03 13:24:30 +1000
committerDylan Baker <dylan.c.baker@intel.com>2020-12-29 21:06:56 -0800
commit7ca951d11ade592f125d4030ffc020a0c1640931 (patch)
treecbd823e07775dee0194aa9873472112d83c045c6 /src/compiler/glsl/glsl_parser_extras.cpp
parente8a6bf6e1032ea62082ca303446f46a47ae3604c (diff)
glsl: default to compat shaders in compat profile
If the shader does not specify "core" or "compatibility" in shaders above 1.40 we were defaulting these shaders to core shaders when in a compat profile. Instead default to compat shaders. This brings us inline with the behaviour of the binary drivers and fixes a crash on start-up for the game Foundation. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3594 Fixes: c7e3d31b0b5f ("glsl: fix compat shaders in GLSL 1.40") Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6993> (cherry picked from commit 6c8cc9be12dc5d6c0d2386d6addb69d8f2fb5399)
Diffstat (limited to 'src/compiler/glsl/glsl_parser_extras.cpp')
-rw-r--r--src/compiler/glsl/glsl_parser_extras.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp
index 7daf65bef6d..6c735eaea04 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -396,14 +396,13 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
{
bool es_token_present = false;
bool compat_token_present = false;
+ bool core_token_present = false;
if (ident) {
if (strcmp(ident, "es") == 0) {
es_token_present = true;
} else if (version >= 150) {
if (strcmp(ident, "core") == 0) {
- /* Accept the token. There's no need to record that this is
- * a core profile shader since that's the only profile we support.
- */
+ core_token_present = true;
} else if (strcmp(ident, "compatibility") == 0) {
compat_token_present = true;
@@ -444,7 +443,8 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
this->compat_shader = compat_token_present ||
(this->ctx->API == API_OPENGL_COMPAT &&
- this->language_version == 140) ||
+ this->language_version >= 140 &&
+ !core_token_present) ||
(!this->es_shader && this->language_version < 140);
bool supported = false;