Mesa (master): glsl: Merge UBO layout qualifiers in a qualifier list.

Eric Anholt anholt at kemper.freedesktop.org
Tue Jul 31 19:21:42 UTC 2012


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

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Jun 22 13:31:56 2012 -0700

glsl: Merge UBO layout qualifiers in a qualifier list.

Yes, you get to say things like "layout(row_major, column_major)" and
get column major.

Part of fixing piglit ARB_uniform_buffer_object/row_major.

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

---

 src/glsl/glsl_parser.yy |   24 +++++++++++++++++++++++-
 1 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index b7e1a5b..ba21b54 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1113,13 +1113,35 @@ layout_qualifier_id_list:
 	layout_qualifier_id
 	| layout_qualifier_id_list ',' layout_qualifier_id
 	{
-	   if (($1.flags.i & $3.flags.i) != 0) {
+	   ast_type_qualifier ubo_mat_mask;
+	   ubo_mat_mask.flags.i = 0;
+	   ubo_mat_mask.flags.q.row_major = 1;
+	   ubo_mat_mask.flags.q.column_major = 1;
+
+	   ast_type_qualifier ubo_layout_mask;
+	   ubo_layout_mask.flags.i = 0;
+	   ubo_layout_mask.flags.q.std140 = 1;
+	   ubo_layout_mask.flags.q.packed = 1;
+	   ubo_layout_mask.flags.q.shared = 1;
+
+	   /* Uniform block layout qualifiers get to overwrite each
+	    * other (rightmost having priority), while all other
+	    * qualifiers currently don't allow duplicates.
+	    */
+	   if (($1.flags.i & $3.flags.i & ~(ubo_mat_mask.flags.i |
+					    ubo_layout_mask.flags.i)) != 0) {
 	      _mesa_glsl_error(& @3, state,
 			       "duplicate layout qualifiers used\n");
 	      YYERROR;
 	   }
 
 	   $$ = $1;
+
+	   if (($3.flags.i & ubo_mat_mask.flags.i) != 0)
+	      $$.flags.i &= ~ubo_mat_mask.flags.i;
+	   if (($3.flags.i & ubo_layout_mask.flags.i) != 0)
+	      $$.flags.i &= ~ubo_layout_mask.flags.i;
+
 	   $$.flags.i |= $3.flags.i;
 
 	   if ($3.flags.q.explicit_location)




More information about the mesa-commit mailing list