Mesa (master): glsl: Add support for AMD_conservative_depth to parser

Chad Versace chadversary at kemper.freedesktop.org
Thu Jan 27 01:49:38 UTC 2011


Module: Mesa
Branch: master
Commit: fb5db0570cad458232ad61b7af39622bacbe9af6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb5db0570cad458232ad61b7af39622bacbe9af6

Author: Chad Versace <chad.versace at intel.com>
Date:   Thu Jan 27 01:40:14 2011 -0800

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

---

 src/glsl/glsl_lexer.lpp       |    1 +
 src/glsl/glsl_parser.ypp      |   39 +++++++++++++++++++++++++++++++--------
 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 d30759b..555bc1f 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 3982167..3955648 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 030d27a..92029e2 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. */




More information about the mesa-commit mailing list