From aaa69c79cd584db4d9c6ea7794e93d29f3d54572 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 23 May 2016 14:29:09 +1000 Subject: [PATCH] glsl: allow layout qualifier overrides with ARB_shading_language_420pack GLSL 4.20 allows overriding the layout qualifiers. This helps fix: GL45-CTS.shading_language_420pack.qualifier_override_layout Reviewed-by: Timothy Arceri Signed-off-by: Dave Airlie --- src/compiler/glsl/ast_type.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/ast_type.cpp b/src/compiler/glsl/ast_type.cpp index c44dcc605ae..54e9dadaa94 100644 --- a/src/compiler/glsl/ast_type.cpp +++ b/src/compiler/glsl/ast_type.cpp @@ -711,7 +711,12 @@ ast_layout_expression::process_qualifier_constant(struct _mesa_glsl_parse_state return false; } - if (!first_pass && *value != const_int->value.u[0]) { + /* From section 4.4 "Layout Qualifiers" of the GLSL 4.50 spec: + * "When the same layout-qualifier-name occurs multiple times, + * 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)", -- 2.30.2