[Mesa-dev] [PATCH] glsl: Don't lose precision qualifiers when encountering "centroid".

Ian Romanick idr at freedesktop.org
Fri Feb 7 01:04:16 CET 2014


On 02/05/2014 09:42 PM, Kenneth Graunke wrote:
> 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
> Reported-by: Kevin Rogovin <kevin.rogovin at intel.com>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>

Good catch!

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>  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 b26c203..dc35c1a 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
>     {
> 



More information about the mesa-dev mailing list