glsl/parser: Extract version directive processing into a function.
Version directive handling is going to have to be used within two parser rules, one for desktop-style version directives (e.g. "#version 130") and one for the new ES-style version directive (e.g. "#version 300 es"), so this patch moves it to a function that can be called from both rules. No functional change. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Acked-by: Carl Worth <cworth@cworth.org>
This commit is contained in:
parent
a03c2c7ab9
commit
629b9edc99
|
@ -261,48 +261,7 @@ version_statement:
|
|||
/* blank - no #version specified: defaults are already set */
|
||||
| VERSION_TOK INTCONSTANT EOL
|
||||
{
|
||||
bool supported = false;
|
||||
|
||||
switch ($2) {
|
||||
case 100:
|
||||
state->es_shader = true;
|
||||
supported = state->ctx->API == API_OPENGLES2 ||
|
||||
state->ctx->Extensions.ARB_ES2_compatibility;
|
||||
break;
|
||||
case 110:
|
||||
case 120:
|
||||
/* FINISHME: Once the OpenGL 3.0 'forward compatible' context or
|
||||
* the OpenGL 3.2 Core context is supported, this logic will need
|
||||
* change. Older versions of GLSL are no longer supported
|
||||
* outside the compatibility contexts of 3.x.
|
||||
*/
|
||||
case 130:
|
||||
case 140:
|
||||
case 150:
|
||||
case 330:
|
||||
case 400:
|
||||
case 410:
|
||||
case 420:
|
||||
supported = _mesa_is_desktop_gl(state->ctx) &&
|
||||
((unsigned) $2) <= state->ctx->Const.GLSLVersion;
|
||||
break;
|
||||
default:
|
||||
supported = false;
|
||||
break;
|
||||
}
|
||||
|
||||
state->language_version = $2;
|
||||
|
||||
if (!supported) {
|
||||
_mesa_glsl_error(& @2, state, "%s is not supported. "
|
||||
"Supported versions are: %s\n",
|
||||
state->get_version_string(),
|
||||
state->supported_version_string);
|
||||
}
|
||||
|
||||
if (state->language_version >= 140) {
|
||||
state->ARB_uniform_buffer_object_enable = true;
|
||||
}
|
||||
state->process_version_directive(&@2, $2);
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
@ -174,6 +174,58 @@ _mesa_glsl_parse_state::check_version(unsigned required_glsl_version,
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a GLSL #version directive.
|
||||
*
|
||||
* \param version is the integer that follows the #version token.
|
||||
*/
|
||||
void
|
||||
_mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version)
|
||||
{
|
||||
bool supported = false;
|
||||
|
||||
switch (version) {
|
||||
case 100:
|
||||
this->es_shader = true;
|
||||
supported = this->ctx->API == API_OPENGLES2 ||
|
||||
this->ctx->Extensions.ARB_ES2_compatibility;
|
||||
break;
|
||||
case 110:
|
||||
case 120:
|
||||
/* FINISHME: Once the OpenGL 3.0 'forward compatible' context or
|
||||
* the OpenGL 3.2 Core context is supported, this logic will need
|
||||
* change. Older versions of GLSL are no longer supported
|
||||
* outside the compatibility contexts of 3.x.
|
||||
*/
|
||||
case 130:
|
||||
case 140:
|
||||
case 150:
|
||||
case 330:
|
||||
case 400:
|
||||
case 410:
|
||||
case 420:
|
||||
supported = _mesa_is_desktop_gl(this->ctx) &&
|
||||
((unsigned) version) <= this->ctx->Const.GLSLVersion;
|
||||
break;
|
||||
default:
|
||||
supported = false;
|
||||
break;
|
||||
}
|
||||
|
||||
this->language_version = version;
|
||||
|
||||
if (!supported) {
|
||||
_mesa_glsl_error(locp, this, "%s is not supported. "
|
||||
"Supported versions are: %s\n",
|
||||
this->get_version_string(),
|
||||
this->supported_version_string);
|
||||
}
|
||||
|
||||
if (this->language_version >= 140) {
|
||||
this->ARB_uniform_buffer_object_enable = true;
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
_mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target)
|
||||
{
|
||||
|
|
|
@ -136,6 +136,8 @@ struct _mesa_glsl_parse_state {
|
|||
return check_version(130, 300, locp, "bit-wise operations are forbidden");
|
||||
}
|
||||
|
||||
void process_version_directive(YYLTYPE *locp, int version);
|
||||
|
||||
struct gl_context *const ctx;
|
||||
void *scanner;
|
||||
exec_list translation_unit;
|
||||
|
|
Loading…
Reference in New Issue