summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2013-07-15 11:45:24 -0700
committerKenneth Graunke <kenneth@whitecape.org>2013-07-18 16:57:22 -0700
commita4d15a3cd963dee6beb0b6d8a4c25b371ea9a289 (patch)
treebf474f4be877d9e57d22e49cc27b696f64e4106b
parent83fe4f7019283851d56df14f47a5d5c01d6b6b9e (diff)
glsl: Refactor parameter qualifier handling.
"Parameter direction qualifier" is a new term I invented just now; it's not part of any GLSL specification. This paves the way handling multiple parameter qualifiers, in any order, as required by GLSL 4.20/ARB_shading_language_420pack. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com>
-rw-r--r--src/glsl/glsl_parser.yy13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index ffaf0f3344b..0c5defb47a7 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -180,6 +180,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
%type <parameter_declarator> parameter_declarator
%type <parameter_declarator> parameter_declaration
%type <type_qualifier> parameter_qualifier
+%type <type_qualifier> parameter_direction_qualifier
%type <type_qualifier> parameter_type_qualifier
%type <type_specifier> parameter_type_specifier
%type <function_definition> function_definition
@@ -903,7 +904,17 @@ parameter_qualifier:
{
memset(& $$, 0, sizeof($$));
}
- | IN_TOK
+ | parameter_direction_qualifier parameter_qualifier
+ {
+ if (($1.flags.q.in || $1.flags.q.out) && ($2.flags.q.in || $2.flags.q.out))
+ _mesa_glsl_error(&@1, state, "duplicate in/out/inout qualifier");
+
+ $$ = $1;
+ $$.merge_qualifier(&@1, state, $2);
+ }
+
+parameter_direction_qualifier:
+ IN_TOK
{
memset(& $$, 0, sizeof($$));
$$.flags.q.in = 1;