diff options
author | Andres Gomez <agomez@igalia.com> | 2016-10-22 17:13:16 +0300 |
---|---|---|
committer | Andres Gomez <agomez@igalia.com> | 2016-11-25 13:18:31 +0200 |
commit | 2a47c83d7e15cf8708dd148dbe15f87e575a2810 (patch) | |
tree | e22d125cd7324008358b8b63e23d3a49e9b48884 | |
parent | e5041c64094255fae6ca7327cfd75a7595442478 (diff) |
Revert "glsl: geom shader max_vertices layout must match."
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>
-rw-r--r-- | src/compiler/glsl/ast.h | 3 | ||||
-rw-r--r-- | src/compiler/glsl/ast_type.cpp | 17 | ||||
-rw-r--r-- | src/compiler/glsl/glsl_parser_extras.cpp | 2 |
3 files changed, 9 insertions, 13 deletions
diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h index d8b425c598..afe91ea6d3 100644 --- a/src/compiler/glsl/ast.h +++ b/src/compiler/glsl/ast.h @@ -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) { diff --git a/src/compiler/glsl/ast_type.cpp b/src/compiler/glsl/ast_type.cpp index dc4f2073fc..b10ea3b787 100644 --- a/src/compiler/glsl/ast_type.cpp +++ b/src/compiler/glsl/ast_type.cpp @@ -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]; diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 78f7fe2596..1e0298eb84 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -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(); |