From 5132d0c7b695d838617bf586e730899c65361668 Mon Sep 17 00:00:00 2001 From: Andres Gomez Date: Sat, 22 Oct 2016 17:04:33 +0300 Subject: [PATCH] glsl: simplified error checking for duplicated layout-qualifiers The GLSL parser has been simplified to check for the needed GL_ARB_shading_language_420pack extension just when merging the qualifiers in the proper cases. Reviewed-by: Timothy Arceri Signed-off-by: Andres Gomez --- src/compiler/glsl/ast_type.cpp | 6 ++++++ src/compiler/glsl/glsl_parser.yy | 24 ------------------------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/compiler/glsl/ast_type.cpp b/src/compiler/glsl/ast_type.cpp index bfe1d2f..788f734 100644 --- a/src/compiler/glsl/ast_type.cpp +++ b/src/compiler/glsl/ast_type.cpp @@ -268,6 +268,12 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, return false; } + if (is_multiple_layouts_merge && !state->has_420pack_or_es31()) { + _mesa_glsl_error(loc, state, + "duplicate layout(...) qualifiers"); + return false; + } + if (q.flags.q.prim_type) { r &= validate_prim_type(loc, state, *this, q); this->flags.q.prim_type = 1; diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy index 5529f11..9136fdd 100644 --- a/src/compiler/glsl/glsl_parser.yy +++ b/src/compiler/glsl/glsl_parser.yy @@ -1887,9 +1887,6 @@ type_qualifier: * precise qualifiers since these are useful in ARB_separate_shader_objects. * There is no clear spec guidance on this either. */ - if (!state->has_420pack_or_es31() && $2.has_layout()) - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - $$ = $1; $$.merge_qualifier(& @1, state, $2, false, $2.has_layout()); } @@ -2713,11 +2710,6 @@ interface_block: { ast_interface_block *block = (ast_interface_block *) $2; - if (!state->has_420pack_or_es31() && block->layout.has_layout()) { - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - YYERROR; - } - if (!$1.merge_qualifier(& @1, state, block->layout, false, block->layout.has_layout())) { YYERROR; @@ -2855,10 +2847,6 @@ layout_uniform_defaults: layout_qualifier layout_uniform_defaults { $$ = $1; - if (!state->has_420pack_or_es31()) { - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - YYERROR; - } if (!$$.merge_qualifier(& @1, state, $2, false, true)) { YYERROR; } @@ -2870,10 +2858,6 @@ layout_buffer_defaults: layout_qualifier layout_buffer_defaults { $$ = $1; - if (!state->has_420pack_or_es31()) { - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - YYERROR; - } if (!$$.merge_qualifier(& @1, state, $2, false, true)) { YYERROR; } @@ -2885,10 +2869,6 @@ layout_in_defaults: layout_qualifier layout_in_defaults { $$ = $1; - if (!state->has_420pack_or_es31()) { - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - YYERROR; - } if (!$$.merge_qualifier(& @1, state, $2, false, true)) { YYERROR; } @@ -2908,10 +2888,6 @@ layout_out_defaults: layout_qualifier layout_out_defaults { $$ = $1; - if (!state->has_420pack_or_es31()) { - _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers"); - YYERROR; - } if (!$$.merge_qualifier(& @1, state, $2, false, true)) { YYERROR; } -- 2.7.4