[Mesa-dev] [PATCH v2 18/28] glsl/lexer: Support double floats

Ian Romanick idr at freedesktop.org
Fri Feb 6 00:40:59 PST 2015


On 02/06/2015 06:56 AM, Ilia Mirkin wrote:
> From: Dave Airlie <airlied at gmail.com>
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/glsl/glsl_lexer.ll | 29 +++++++++++++++++++++++++----
>  1 file changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
> index 57c46be..d8bdaa7 100644
> --- a/src/glsl/glsl_lexer.ll
> +++ b/src/glsl/glsl_lexer.ll
> @@ -458,6 +458,15 @@ layout		{
>  			    return FLOATCONSTANT;
>  			}
>  
> +[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?(lf|LF)	|
> +\.[0-9]+([eE][+-]?[0-9]+)?(lf|LF)	|
> +[0-9]+\.([eE][+-]?[0-9]+)?(lf|LF)	|
> +[0-9]+[eE][+-]?[0-9]+(lf|LF)		|
> +[0-9]+(lf|LF)				{

This last one is not correct.  We used to allow this for float
constants, but we fixed it.  See commit 9d8aa88.

With that fixed, this patch is

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

> +			    yylval->dreal = _mesa_strtod(yytext, NULL);
> +			    return DOUBLECONSTANT;
> +			}
> +
>  true			{
>  			    yylval->n = 1;
>  			    return BOOLCONSTANT;
> @@ -489,7 +498,7 @@ external	KEYWORD(110, 100, 0, 0, EXTERNAL);
>  interface	KEYWORD(110, 100, 0, 0, INTERFACE);
>  long		KEYWORD(110, 100, 0, 0, LONG_TOK);
>  short		KEYWORD(110, 100, 0, 0, SHORT_TOK);
> -double		KEYWORD(110, 100, 400, 0, DOUBLE_TOK);
> +double		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DOUBLE_TOK);
>  half		KEYWORD(110, 100, 0, 0, HALF);
>  fixed		KEYWORD(110, 100, 0, 0, FIXED_TOK);
>  unsigned	KEYWORD(110, 100, 0, 0, UNSIGNED);
> @@ -498,9 +507,21 @@ output		KEYWORD(110, 100, 0, 0, OUTPUT);
>  hvec2		KEYWORD(110, 100, 0, 0, HVEC2);
>  hvec3		KEYWORD(110, 100, 0, 0, HVEC3);
>  hvec4		KEYWORD(110, 100, 0, 0, HVEC4);
> -dvec2		KEYWORD(110, 100, 400, 0, DVEC2);
> -dvec3		KEYWORD(110, 100, 400, 0, DVEC3);
> -dvec4		KEYWORD(110, 100, 400, 0, DVEC4);
> +dvec2		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DVEC2);
> +dvec3		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DVEC3);
> +dvec4		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DVEC4);
> +dmat2		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT2X2);
> +dmat3		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT3X3);
> +dmat4		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT4X4);
> +dmat2x2		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT2X2);
> +dmat2x3		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT2X3);
> +dmat2x4		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT2X4);
> +dmat3x2		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT3X2);
> +dmat3x3		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT3X3);
> +dmat3x4		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT3X4);
> +dmat4x2		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT4X2);
> +dmat4x3		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT4X3);
> +dmat4x4		KEYWORD_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, DMAT4X4);
>  fvec2		KEYWORD(110, 100, 0, 0, FVEC2);
>  fvec3		KEYWORD(110, 100, 0, 0, FVEC3);
>  fvec4		KEYWORD(110, 100, 0, 0, FVEC4);
> 



More information about the mesa-dev mailing list