summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Gomez <[email protected]>2016-10-22 17:13:16 +0300
committerAndres Gomez <[email protected]>2016-11-25 13:18:31 +0200
commit2a47c83d7e15cf8708dd148dbe15f87e575a2810 (patch)
treee22d125cd7324008358b8b63e23d3a49e9b48884
parente5041c64094255fae6ca7327cfd75a7595442478 (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 <[email protected]> Signed-off-by: Andres Gomez <[email protected]>
-rw-r--r--src/compiler/glsl/ast.h3
-rw-r--r--src/compiler/glsl/ast_type.cpp17
-rw-r--r--src/compiler/glsl/glsl_parser_extras.cpp2
3 files changed, 9 insertions, 13 deletions
diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h
index d8b425c5981..afe91ea6d32 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 dc4f2073fc9..b10ea3b787a 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 78f7fe25965..1e0298eb84e 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();