If another layout qualifier appeared to the left of `invocations` in the GS input layout declaration, the invocation count would be dropped on the floor.
Fixes the piglit test: spec/ARB_transform_feedback3/arb_transform_feedback3-ext_interleaved_two_bufs_gs_max Signed-off-by: Chris Forbes <chr...@ijw.co.nz> Cc: Ilia Mirkin <imir...@alum.mit.edu> --- Note that the handling of the special rules for layout declarations in general is a bit of a disaster -- merge_in_qualifier tries to do the right thing, but merge_qualifier still ends up coming into play in various cases. It's probably better to dispose of the distinction within the parser, and disallow qualifiers appearing in the wrong contexts later. (This is what is already done to disallow layout-declaration-only qualifiers on variables) src/glsl/ast_type.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp index 77053d5..ddd1f4e 100644 --- a/src/glsl/ast_type.cpp +++ b/src/glsl/ast_type.cpp @@ -154,6 +154,16 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, this->max_vertices = q.max_vertices; } + if (q.flags.q.invocations) { + if (this->flags.q.invocations && this->invocations != q.invocations) { + _mesa_glsl_error(loc, state, + "geometry shader set conflicting invocations " + "(%d and %d)", this->invocations, q.invocations); + return false; + } + this->invocations = q.invocations; + } + if ((q.flags.i & ubo_mat_mask.flags.i) != 0) this->flags.i &= ~ubo_mat_mask.flags.i; if ((q.flags.i & ubo_layout_mask.flags.i) != 0) -- 2.0.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev