On 03/06/16 02:46, Dave Airlie wrote: > From: Dave Airlie <airl...@redhat.com> > > "all geometry shader output vertex count declarations in a > program must declare the same count."
This spec quote lacks context. As far as I see it comes from GLSL 4.5 spec, "4.4.2.3 Geometry Outputs". > > Fixes: > GL45-CTS.geometry_shader.output.conflicted_output_vertices_max The patch looks good. But testing on Skylake and Broadwell, current master is passing this test without this patch. Did you mean a different test, or you made the test with a different hw? > > Cc: "11.2 12.0" <mesa-sta...@lists.freedesktop.org> > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/compiler/glsl/ast.h | 3 ++- > src/compiler/glsl/ast_type.cpp | 17 ++++++++++------- > src/compiler/glsl/glsl_parser_extras.cpp | 2 +- > 3 files changed, 13 insertions(+), 9 deletions(-) > > diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h > index ca98ed2..06c7b03 100644 > --- a/src/compiler/glsl/ast.h > +++ b/src/compiler/glsl/ast.h > @@ -368,7 +368,8 @@ public: > > bool process_qualifier_constant(struct _mesa_glsl_parse_state *state, > const char *qual_indentifier, > - unsigned *value, bool can_be_zero); > + unsigned *value, bool can_be_zero, > + bool must_match = false); > > 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 54e9dad..1372ff7 100644 > --- a/src/compiler/glsl/ast_type.cpp > +++ b/src/compiler/glsl/ast_type.cpp > @@ -678,7 +678,8 @@ bool > ast_layout_expression::process_qualifier_constant(struct > _mesa_glsl_parse_state *state, > const char > *qual_indentifier, > unsigned *value, > - bool can_be_zero) > + bool can_be_zero, > + bool must_match) > { > int min_value = 0; > bool first_pass = true; > @@ -716,12 +717,14 @@ > ast_layout_expression::process_qualifier_constant(struct > _mesa_glsl_parse_state > * in a single declaration, the last occurrence overrides the > * former occurrence(s)." > */ > - 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; > + 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; > + } > } 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 c9654ac..ba658ae 100644 > --- a/src/compiler/glsl/glsl_parser_extras.cpp > +++ b/src/compiler/glsl/glsl_parser_extras.cpp > @@ -1692,7 +1692,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)) { > + &qual_max_vertices, true, true)) { > > if (qual_max_vertices > state->Const.MaxGeometryOutputVertices) { > YYLTYPE loc = > state->out_qualifier->max_vertices->get_location(); _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev