glsl: Allow compatibility shaders with MESA_GL_VERSION_OVERRIDE=...
Previously if you used MESA_GL_VERSION_OVERRIDE=3.3COMPAT, Mesa exposed an OpenGL 3.3 compatibility profile context (with various unimplemented features and bugs), but still refused to compile shaders with #version 330 compatibility This patch simply adds a small bit of plumbing to let that through. Of course the same caveats apply: compatibility profile is still not supported (and will not be supported), so there are no guarantees that anything will work. Tested-by: Dylan Baker <dylan@pnwbakers.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -83,6 +83,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
||||
this->forced_language_version = ctx->Const.ForceGLSLVersion;
|
||||
this->zero_init = ctx->Const.GLSLZeroInit;
|
||||
this->gl_version = 20;
|
||||
this->compat_shader = true;
|
||||
this->es_shader = false;
|
||||
this->ARB_texture_rectangle_enable = true;
|
||||
|
||||
@@ -370,6 +371,7 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
||||
const char *ident)
|
||||
{
|
||||
bool es_token_present = false;
|
||||
bool compat_token_present = false;
|
||||
if (ident) {
|
||||
if (strcmp(ident, "es") == 0) {
|
||||
es_token_present = true;
|
||||
@@ -379,8 +381,12 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
||||
* a core profile shader since that's the only profile we support.
|
||||
*/
|
||||
} else if (strcmp(ident, "compatibility") == 0) {
|
||||
_mesa_glsl_error(locp, this,
|
||||
"the compatibility profile is not supported");
|
||||
compat_token_present = true;
|
||||
|
||||
if (this->ctx->API != API_OPENGL_COMPAT) {
|
||||
_mesa_glsl_error(locp, this,
|
||||
"the compatibility profile is not supported");
|
||||
}
|
||||
} else {
|
||||
_mesa_glsl_error(locp, this,
|
||||
"\"%s\" is not a valid shading language profile; "
|
||||
@@ -412,6 +418,9 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
||||
else
|
||||
this->language_version = version;
|
||||
|
||||
this->compat_shader = compat_token_present ||
|
||||
(!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
|
||||
|
Reference in New Issue
Block a user