diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index 88aae64d424..16173660cac 100644 --- a/src/glsl/glsl_parser.yy +++ b/src/glsl/glsl_parser.yy @@ -220,7 +220,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) %type declaration %type declaration_statement %type jump_statement -%type uniform_block +%type uniform_block basic_uniform_block %type struct_specifier %type struct_declaration_list %type struct_declaration @@ -1884,6 +1884,21 @@ function_definition: /* layout_qualifieropt is packed into this rule */ uniform_block: + basic_uniform_block + { + $$ = $1; + } + | layout_qualifier basic_uniform_block + { + ast_uniform_block *block = (ast_uniform_block *) $2; + if (!block->layout.merge_qualifier(& @1, state, $1)) { + YYERROR; + } + $$ = block; + } + ; + +basic_uniform_block: UNIFORM NEW_IDENTIFIER '{' member_list '}' ';' { void *ctx = state; @@ -1900,26 +1915,6 @@ uniform_block: "required for defining uniform blocks\n"); } } - | layout_qualifier UNIFORM NEW_IDENTIFIER '{' member_list '}' ';' - { - void *ctx = state; - - ast_type_qualifier qual = *state->default_uniform_qualifier; - if (!qual.merge_qualifier(& @1, state, $1)) { - YYERROR; - } - $$ = new(ctx) ast_uniform_block(qual, $3, $5); - - if (!state->ARB_uniform_buffer_object_enable) { - _mesa_glsl_error(& @1, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "required for defining uniform blocks\n"); - } else if (state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(& @1, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "required for defining uniform blocks\n"); - } - } ; member_list: