diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll index f1426a9c486..d83e700f6fb 100644 --- a/src/compiler/glsl/glsl_lexer.ll +++ b/src/compiler/glsl/glsl_lexer.ll @@ -612,7 +612,7 @@ short KEYWORD(110, 100, 0, 0, SHORT_TOK); double TYPE_WITH_ALT(130, 100, 130, 300, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::double_type); half KEYWORD(110, 100, 0, 0, HALF); fixed KEYWORD(110, 100, 0, 0, FIXED_TOK); -unsigned KEYWORD(110, 100, 0, 0, UNSIGNED); +unsigned KEYWORD_WITH_ALT(110, 100, 0, 0, yyextra->EXT_gpu_shader4_enable, UNSIGNED); input KEYWORD(110, 100, 0, 0, INPUT_TOK); output KEYWORD(110, 100, 0, 0, OUTPUT); hvec2 KEYWORD(110, 100, 0, 0, HVEC2); diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy index b91c24ebe97..9e9b49c8462 100644 --- a/src/compiler/glsl/glsl_parser.yy +++ b/src/compiler/glsl/glsl_parser.yy @@ -2308,7 +2308,16 @@ type_specifier_nonarray: basic_type_specifier_nonarray: VOID_TOK { $$ = glsl_type::void_type; } - | BASIC_TYPE_TOK { $$ = $1; }; + | BASIC_TYPE_TOK { $$ = $1; } + | UNSIGNED BASIC_TYPE_TOK + { + if ($2 == glsl_type::int_type) { + $$ = glsl_type::uint_type; + } else { + _mesa_glsl_error(&@1, state, + "\"unsigned\" is only allowed before \"int\""); + } + } ; precision_qualifier: