diff options
author | Chad Versace <[email protected]> | 2011-01-27 01:40:14 -0800 |
---|---|---|
committer | Chad Versace <[email protected]> | 2011-01-26 16:37:44 -0800 |
commit | fb5db0570cad458232ad61b7af39622bacbe9af6 (patch) | |
tree | ed7c6d7e70a54536a56817830a4dbb2bc6c27787 | |
parent | 565a22090c3f143a343c19249a92be6a84b291b0 (diff) |
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
-rw-r--r-- | src/glsl/glsl_lexer.lpp | 1 | ||||
-rw-r--r-- | src/glsl/glsl_parser.ypp | 39 | ||||
-rw-r--r-- | src/glsl/glsl_parser_extras.h | 2 |
3 files changed, 34 insertions, 8 deletions
diff --git a/src/glsl/glsl_lexer.lpp b/src/glsl/glsl_lexer.lpp index d30759be2b8..555bc1f8854 100644 --- a/src/glsl/glsl_lexer.lpp +++ b/src/glsl/glsl_lexer.lpp @@ -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; diff --git a/src/glsl/glsl_parser.ypp b/src/glsl/glsl_parser.ypp index 3982167c482..3955648eb61 100644 --- a/src/glsl/glsl_parser.ypp +++ b/src/glsl/glsl_parser.ypp @@ -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 diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h index 030d27a2627..92029e2e8dd 100644 --- a/src/glsl/glsl_parser_extras.h +++ b/src/glsl/glsl_parser_extras.h @@ -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. */ |