Revert "glsl: geom shader max_vertices layout must match."
authorAndres Gomez <agomez@igalia.com>
Sat, 22 Oct 2016 14:13:16 +0000 (17:13 +0300)
committerAndres Gomez <agomez@igalia.com>
Fri, 25 Nov 2016 11:18:31 +0000 (13:18 +0200)
This reverts commit 4c863993780a11cea6f88fa0682796bee5794042.

The commit was erroneous because the ast_layout_expression class was
created to hold a list of values for a layout-qualifier-name which is
allowed to appear in more than one expression in the same
shader/program but not to hold different values.

In other words, the list is used for an after check that all the
declared values for a layout-qualifier-name are consistent.

Therefore, the values stored must match always, not just for
"max_vertices" or any other eventual layout-qualifier-name.

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
src/compiler/glsl/ast.h
src/compiler/glsl/ast_type.cpp
src/compiler/glsl/glsl_parser_extras.cpp

index d8b425c5981cecc2eaaa0a570c332e4011739431..afe91ea6d32de3fbeb1e7b0c3d4f0cee83a93e49 100644 (file)
@@ -377,8 +377,7 @@ public:
 
    bool process_qualifier_constant(struct _mesa_glsl_parse_state *state,
                                    const char *qual_indentifier,
-                                   unsigned *value, bool can_be_zero,
-                                   bool must_match = false);
+                                   unsigned *value, bool can_be_zero);
 
    void merge_qualifier(ast_layout_expression *l_expr)
    {
index dc4f2073fc9e43b0a25fa89622b288b32cca5278..b10ea3b787a1eb395a7224f44cf9f6355cd8a4f9 100644 (file)
@@ -769,8 +769,7 @@ bool
 ast_layout_expression::process_qualifier_constant(struct _mesa_glsl_parse_state *state,
                                                   const char *qual_indentifier,
                                                   unsigned *value,
-                                                  bool can_be_zero,
-                                                  bool must_match)
+                                                  bool can_be_zero)
 {
    int min_value = 0;
    bool first_pass = true;
@@ -808,14 +807,12 @@ ast_layout_expression::process_qualifier_constant(struct _mesa_glsl_parse_state
        *  in a single declaration, the last occurrence overrides the
        *  former occurrence(s)."
        */
-      if (!first_pass) {
-         if ((must_match || !state->has_420pack()) && *value != const_int->value.u[0]) {
-            YYLTYPE loc = const_expression->get_location();
-            _mesa_glsl_error(&loc, state, "%s layout qualifier does not "
-                             "match previous declaration (%d vs %d)",
-                             qual_indentifier, *value, const_int->value.i[0]);
-            return false;
-         }
+      if (!state->has_420pack() && !first_pass && *value != const_int->value.u[0]) {
+         YYLTYPE loc = const_expression->get_location();
+         _mesa_glsl_error(&loc, state, "%s layout qualifier does not "
+                         "match previous declaration (%d vs %d)",
+                          qual_indentifier, *value, const_int->value.i[0]);
+         return false;
       } else {
          first_pass = false;
          *value = const_int->value.u[0];
index 78f7fe259654395232e43477ad504c1b7d67cae2..1e0298eb84eef5e786d59c74f6b5e6453a1a5cc8 100644 (file)
@@ -1744,7 +1744,7 @@ set_shader_inout_layout(struct gl_shader *shader,
          unsigned qual_max_vertices;
          if (state->out_qualifier->max_vertices->
                process_qualifier_constant(state, "max_vertices",
-                                          &qual_max_vertices, true, true)) {
+                                          &qual_max_vertices, true)) {
 
             if (qual_max_vertices > state->Const.MaxGeometryOutputVertices) {
                YYLTYPE loc = state->out_qualifier->max_vertices->get_location();