diff options
author | Kenneth Graunke <[email protected]> | 2014-02-05 21:42:00 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-02-07 12:36:38 -0800 |
commit | 2062f40d81de4743758851b03dad506f9cb6f306 (patch) | |
tree | 14d9247cb17765c46d9f52a599cf2d300ae602e2 /src/glsl/glsl_parser.yy | |
parent | f47e5962885d9f7de23a8c9c9ba035017e24ffd6 (diff) |
glsl: Don't lose precision qualifiers when encountering "centroid".
Mesa fails to retain the precision qualifier when parsing:
#version 300 es
centroid in mediump vec2 v;
Consider how the parser's type_qualifier production is applied.
First, the precision_qualifier rule creates a new ast_type_qualifier:
<precision: mediump>
Then the storage_qualifier rule creates a second one:
<flags: in>
and calls merge_qualifier() to fold in any previous qualifications,
returning:
<flags: in, precision: mediump>
Finally, the auxiliary_storage_qualifier creates one for "centroid":
<flags: centroid>
it then does $$ = $1 and $$.flags |= $2.flags, resulting in:
<flags: centroid, in>
Since precision isn't stored in the flags bitfield, it is lost. We need
to instead call merge_qualifier to combine all the fields.
Cc: [email protected]
Signed-off-by: Kenneth Graunke <[email protected]>
Reported-by: Kevin Rogovin <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/glsl/glsl_parser.yy')
-rw-r--r-- | src/glsl/glsl_parser.yy | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index b26c2030fe1..dc35c1a51b3 100644 --- a/src/glsl/glsl_parser.yy +++ b/src/glsl/glsl_parser.yy @@ -1494,7 +1494,7 @@ type_qualifier: "just before storage qualifiers"); } $$ = $1; - $$.flags.i |= $2.flags.i; + $$.merge_qualifier(&@1, state, $2); } | storage_qualifier type_qualifier { |