mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
glsl: force_glsl_version to shaders with no defined version
If a shader has no defined version force_glsl_version was
previous ignored and the shader would default to 110. This updates
the code so that those shaders are forced to a new level also.
We reused the existing code to make sure a sensible value is set
for the version.
Cc: mesa-stable
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11602>
(cherry picked from commit e607205af0)
This commit is contained in:
parent
b61c8d620a
commit
f1c531aa65
3 changed files with 53 additions and 36 deletions
|
|
@ -5656,7 +5656,7 @@
|
|||
"description": "glsl: force_glsl_version to shaders with no defined version",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -331,6 +331,10 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||
this->bindless_image_specified = false;
|
||||
this->bound_sampler_specified = false;
|
||||
this->bound_image_specified = false;
|
||||
|
||||
this->language_version = this->forced_language_version ?
|
||||
this->forced_language_version : this->language_version;
|
||||
set_valid_gl_and_glsl_versions(NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -384,6 +388,51 @@ _mesa_glsl_parse_state::check_version(unsigned required_glsl_version,
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This makes sure any GLSL versions defined or overridden are valid. If not it
|
||||
* sets a valid value.
|
||||
*/
|
||||
void
|
||||
_mesa_glsl_parse_state::set_valid_gl_and_glsl_versions(YYLTYPE *locp)
|
||||
{
|
||||
bool supported = false;
|
||||
for (unsigned i = 0; i < this->num_supported_versions; i++) {
|
||||
if (this->supported_versions[i].ver == this->language_version
|
||||
&& this->supported_versions[i].es == this->es_shader) {
|
||||
this->gl_version = this->supported_versions[i].gl_ver;
|
||||
supported = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!supported) {
|
||||
if (locp) {
|
||||
_mesa_glsl_error(locp, this, "%s is not supported. "
|
||||
"Supported versions are: %s",
|
||||
this->get_version_string(),
|
||||
this->supported_version_string);
|
||||
}
|
||||
|
||||
/* On exit, the language_version must be set to a valid value.
|
||||
* Later calls to _mesa_glsl_initialize_types will misbehave if
|
||||
* the version is invalid.
|
||||
*/
|
||||
switch (this->ctx->API) {
|
||||
case API_OPENGL_COMPAT:
|
||||
case API_OPENGL_CORE:
|
||||
this->language_version = this->ctx->Const.GLSLVersion;
|
||||
break;
|
||||
|
||||
case API_OPENGLES:
|
||||
FALLTHROUGH;
|
||||
|
||||
case API_OPENGLES2:
|
||||
this->language_version = 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a GLSL #version directive.
|
||||
*
|
||||
|
|
@ -449,41 +498,7 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
|||
this->language_version == 140) ||
|
||||
(!this->es_shader && this->language_version < 140);
|
||||
|
||||
bool supported = false;
|
||||
for (unsigned i = 0; i < this->num_supported_versions; i++) {
|
||||
if (this->supported_versions[i].ver == this->language_version
|
||||
&& this->supported_versions[i].es == this->es_shader) {
|
||||
this->gl_version = this->supported_versions[i].gl_ver;
|
||||
supported = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!supported) {
|
||||
_mesa_glsl_error(locp, this, "%s is not supported. "
|
||||
"Supported versions are: %s",
|
||||
this->get_version_string(),
|
||||
this->supported_version_string);
|
||||
|
||||
/* On exit, the language_version must be set to a valid value.
|
||||
* Later calls to _mesa_glsl_initialize_types will misbehave if
|
||||
* the version is invalid.
|
||||
*/
|
||||
switch (this->ctx->API) {
|
||||
case API_OPENGL_COMPAT:
|
||||
case API_OPENGL_CORE:
|
||||
this->language_version = this->ctx->Const.GLSLVersion;
|
||||
break;
|
||||
|
||||
case API_OPENGLES:
|
||||
assert(!"Should not get here.");
|
||||
FALLTHROUGH;
|
||||
|
||||
case API_OPENGLES2:
|
||||
this->language_version = 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
set_valid_gl_and_glsl_versions(locp);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -368,6 +368,8 @@ struct _mesa_glsl_parse_state {
|
|||
is_version(400, 0);
|
||||
}
|
||||
|
||||
void set_valid_gl_and_glsl_versions(YYLTYPE *locp);
|
||||
|
||||
void process_version_directive(YYLTYPE *locp, int version,
|
||||
const char *ident);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue