diff options
-rw-r--r-- | src/compiler/glsl/glsl_parser.yy | 17 | ||||
-rw-r--r-- | src/compiler/glsl/glsl_parser_extras.cpp | 2 | ||||
-rw-r--r-- | src/compiler/glsl/glsl_parser_extras.h | 1 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 5 |
4 files changed, 25 insertions, 0 deletions
diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy index bc2571b6844..fd1592beca0 100644 --- a/src/compiler/glsl/glsl_parser.yy +++ b/src/compiler/glsl/glsl_parser.yy @@ -897,6 +897,23 @@ parameter_declarator: $$->identifier = $2; state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); } + | layout_qualifier type_specifier any_identifier + { + if (state->allow_layout_qualifier_on_function_parameter) { + void *ctx = state->linalloc; + $$ = new(ctx) ast_parameter_declarator(); + $$->set_location_range(@2, @3); + $$->type = new(ctx) ast_fully_specified_type(); + $$->type->set_location(@2); + $$->type->specifier = $2; + $$->identifier = $3; + state->symbols->add_variable(new(state) ir_variable(NULL, $3, ir_var_auto)); + } else { + _mesa_glsl_error(&@1, state, + "is is not allowed on function parameter"); + YYERROR; + } + } | type_specifier any_identifier array_specifier { void *ctx = state->linalloc; diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 21d41224440..1bdd7c4bf17 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -311,6 +311,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, ctx->Const.AllowGLSLExtensionDirectiveMidShader; this->allow_builtin_variable_redeclaration = ctx->Const.AllowGLSLBuiltinVariableRedeclaration; + this->allow_layout_qualifier_on_function_parameter = + ctx->Const.AllowLayoutQualifiersOnFunctionParameters; this->cs_input_local_size_variable_specified = false; diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h index e03b34d7d6c..966d848509c 100644 --- a/src/compiler/glsl/glsl_parser_extras.h +++ b/src/compiler/glsl/glsl_parser_extras.h @@ -868,6 +868,7 @@ struct _mesa_glsl_parse_state { bool allow_extension_directive_midshader; bool allow_builtin_variable_redeclaration; + bool allow_layout_qualifier_on_function_parameter; /** * Known subroutine type declarations. diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 718293be116..5ff0d3227a8 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3769,6 +3769,11 @@ struct gl_constants GLboolean AllowHigherCompatVersion; /** + * Allow layout qualifiers on function parameters. + */ + GLboolean AllowLayoutQualifiersOnFunctionParameters; + + /** * Force computing the absolute value for sqrt() and inversesqrt() to follow * D3D9 when apps rely on this behaviour. */ |