Mesa (master): glsl: Take advantage of the layout qualifier flags union to clean up parsing.

Eric Anholt anholt at kemper.freedesktop.org
Mon Jul 9 19:45:08 UTC 2012


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

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Apr 24 12:14:39 2012 -0700

glsl: Take advantage of the layout qualifier flags union to clean up parsing.

The got_one variable was set iff one of the bits in flags.i was set.

v2: Fix incorrect dropping of the ARB_conservative_depth warning.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org> (v1)
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/glsl/glsl_parser.yy |   28 +++++++---------------------
 1 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 5ca8740..9ad67e2 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1119,21 +1119,17 @@ layout_qualifier_id_list:
 layout_qualifier_id:
 	any_identifier
 	{
-	   bool got_one = false;
-
 	   memset(& $$, 0, sizeof($$));
 
 	   /* Layout qualifiers for ARB_fragment_coord_conventions. */
-	   if (!got_one && state->ARB_fragment_coord_conventions_enable) {
+	   if (!$$.flags.i && state->ARB_fragment_coord_conventions_enable) {
 	      if (strcmp($1, "origin_upper_left") == 0) {
-		 got_one = true;
 		 $$.flags.q.origin_upper_left = 1;
 	      } else if (strcmp($1, "pixel_center_integer") == 0) {
-		 got_one = true;
 		 $$.flags.q.pixel_center_integer = 1;
 	      }
 
-	      if (got_one && state->ARB_fragment_coord_conventions_warn) {
+	      if ($$.flags.i && state->ARB_fragment_coord_conventions_warn) {
 		 _mesa_glsl_warning(& @1, state,
 				    "GL_ARB_fragment_coord_conventions layout "
 				    "identifier `%s' used\n", $1);
@@ -1141,36 +1137,32 @@ layout_qualifier_id:
 	   }
 
 	   /* Layout qualifiers for AMD/ARB_conservative_depth. */
-	   if (!got_one &&
+	   if (!$$.flags.i &&
 	       (state->AMD_conservative_depth_enable ||
 	        state->ARB_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) {
+	      if ($$.flags.i && state->AMD_conservative_depth_warn) {
 	         _mesa_glsl_warning(& @1, state,
 	                            "GL_AMD_conservative_depth "
 	                            "layout qualifier `%s' is used\n", $1);
 	      }
-	      if (got_one && state->ARB_conservative_depth_warn) {
+	      if ($$.flags.i && state->ARB_conservative_depth_warn) {
 	         _mesa_glsl_warning(& @1, state,
 	                            "GL_ARB_conservative_depth "
 	                            "layout qualifier `%s' is used\n", $1);
 	      }
 	   }
 
-	   if (!got_one) {
+	   if (!$$.flags.i) {
 	      _mesa_glsl_error(& @1, state, "unrecognized layout identifier "
 			       "`%s'\n", $1);
 	      YYERROR;
@@ -1178,8 +1170,6 @@ layout_qualifier_id:
 	}
 	| any_identifier '=' INTCONSTANT
 	{
-	   bool got_one = false;
-
 	   memset(& $$, 0, sizeof($$));
 
 	   if (state->ARB_explicit_attrib_location_enable) {
@@ -1187,8 +1177,6 @@ layout_qualifier_id:
 	       * FINISHME: GLSL 1.30 (or later) are supported.
 	       */
 	      if (strcmp("location", $1) == 0) {
-		 got_one = true;
-
 		 $$.flags.q.explicit_location = 1;
 
 		 if ($3 >= 0) {
@@ -1201,8 +1189,6 @@ layout_qualifier_id:
 	      }
 
 	      if (strcmp("index", $1) == 0) {
-	      	 got_one = true;
-
 		 $$.flags.q.explicit_index = 1;
 
 		 if ($3 >= 0) {
@@ -1218,7 +1204,7 @@ layout_qualifier_id:
 	   /* If the identifier didn't match any known layout identifiers,
 	    * emit an error.
 	    */
-	   if (!got_one) {
+	   if (!$$.flags.i) {
 	      _mesa_glsl_error(& @1, state, "unrecognized layout identifier "
 			       "`%s'\n", $1);
 	      YYERROR;




More information about the mesa-commit mailing list