Mesa (10.1): glsl: Don't lose precision qualifiers when encountering " centroid".
Ian Romanick
idr at kemper.freedesktop.org
Sat Feb 8 01:10:20 UTC 2014
Module: Mesa
Branch: 10.1
Commit: ecaf9259e92b22f5f219fc050337336abae642fb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecaf9259e92b22f5f219fc050337336abae642fb
Author: Kenneth Graunke <kenneth at whitecape.org>
Date: Wed Feb 5 21:42:00 2014 -0800
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: mesa-stable at lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reported-by: Kevin Rogovin <kevin.rogovin at intel.com>
Reviewed-by: Matt Turner <mattst88 at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
(cherry picked from commit 2062f40d81de4743758851b03dad506f9cb6f306)
---
src/glsl/glsl_parser.yy | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 928c57e..f939fe8 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1466,7 +1466,7 @@ type_qualifier:
"just before storage qualifiers");
}
$$ = $1;
- $$.flags.i |= $2.flags.i;
+ $$.merge_qualifier(&@1, state, $2);
}
| storage_qualifier type_qualifier
{
More information about the mesa-commit
mailing list