glsl: Add support for AMD_conservative_depth to parser

When AMD_conservative_depth is enabled:
* Let 'layout' be a token.
* Extend the production rule of layout_qualifier_id to process the tokens:
   depth_any
   depth_greater
   depth_less
   depth_unchanged
This commit is contained in:
Chad Versace 2011-01-27 01:40:14 -08:00
parent 565a22090c
commit fb5db0570c
3 changed files with 34 additions and 8 deletions

View file

@ -252,6 +252,7 @@ void return VOID_TOK;
layout {
if ((yyextra->language_version >= 140)
|| yyextra->AMD_conservative_depth_enable
|| yyextra->ARB_explicit_attrib_location_enable
|| (yyextra->ARB_fragment_coord_conventions_enable)){
return LAYOUT_TOK;

View file

@ -1018,7 +1018,8 @@ layout_qualifier_id:
memset(& $$, 0, sizeof($$));
if (state->ARB_fragment_coord_conventions_enable) {
/* Layout qualifiers for ARB_fragment_coord_conventions. */
if (!got_one && state->ARB_fragment_coord_conventions_enable) {
if (strcmp($1, "origin_upper_left") == 0) {
got_one = true;
$$.flags.q.origin_upper_left = 1;
@ -1026,19 +1027,41 @@ layout_qualifier_id:
got_one = true;
$$.flags.q.pixel_center_integer = 1;
}
if (got_one && state->ARB_fragment_coord_conventions_warn) {
_mesa_glsl_warning(& @1, state,
"GL_ARB_fragment_coord_conventions layout "
"identifier `%s' used\n", $1);
}
}
/* Layout qualifiers for AMD_conservative_depth. */
if (!got_one && state->AMD_conservative_depth_enable) {
if (strcmp($1, "depth_any") == 0) {
got_one = true;
$$.flags.q.depth_any = 1;
} else if (strcmp($1, "depth_greater") == 0) {
got_one = true;
$$.flags.q.depth_greater = 1;
} else if (strcmp($1, "depth_less") == 0) {
got_one = true;
$$.flags.q.depth_less = 1;
} else if (strcmp($1, "depth_unchanged") == 0) {
got_one = true;
$$.flags.q.depth_unchanged = 1;
}
if (got_one && state->AMD_conservative_depth_warn) {
_mesa_glsl_warning(& @1, state,
"GL_AMD_conservative_depth "
"layout qualifier `%s' is used\n", $1);
}
}
/* If the identifier didn't match any known layout identifiers,
* emit an error.
*/
if (!got_one) {
_mesa_glsl_error(& @1, state, "unrecognized layout identifier "
"`%s'\n", $1);
YYERROR;
} else if (state->ARB_fragment_coord_conventions_warn) {
_mesa_glsl_warning(& @1, state,
"GL_ARB_fragment_coord_conventions layout "
"identifier `%s' used\n", $1);
}
}
| IDENTIFIER '=' INTCONSTANT

View file

@ -144,6 +144,8 @@ struct _mesa_glsl_parse_state {
unsigned EXT_texture_array_warn:1;
unsigned ARB_shader_stencil_export_enable:1;
unsigned ARB_shader_stencil_export_warn:1;
unsigned AMD_conservative_depth_enable:1;
unsigned AMD_conservative_depth_warn:1;
/*@}*/
/** Extensions supported by the OpenGL implementation. */