[Mesa-dev] [PATCH 5/5] glcpp: Avoid unnecessary call to strlen
Thomas Helland
thomashelland90 at gmail.com
Thu Sep 14 09:22:51 UTC 2017
2017-09-14 3:29 GMT+02:00 Ian Romanick <idr at freedesktop.org>:
> On 09/11/2017 01:21 PM, Thomas Helland wrote:
>> Length of the token was already calculated by flex and stored in yyleng,
>> no need to implicitly call strlen() via linear_strdup().
>>
>> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>> Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
>>
>> V2: Also convert this pattern in glsl_lexer.ll
>>
>> V3: Remove a misplaced comment
>> Fix compile warning from V2
>> ---
>> src/compiler/glsl/glcpp/glcpp-lex.l | 9 +-
>> src/compiler/glsl/glsl_lexer.ll | 32 ++++-
>> src/compiler/glsl/glsl_parser.yy | 246 ++++++++++++++++++------------------
>> 3 files changed, 157 insertions(+), 130 deletions(-)
>>
>> diff --git a/src/compiler/glsl/glcpp/glcpp-lex.l b/src/compiler/glsl/glcpp/glcpp-lex.l
>> index 381b97364a..9cfcc12022 100644
>> --- a/src/compiler/glsl/glcpp/glcpp-lex.l
>> +++ b/src/compiler/glsl/glcpp/glcpp-lex.l
>> @@ -101,7 +101,14 @@ void glcpp_set_column (int column_no , yyscan_t yyscanner);
>> #define RETURN_STRING_TOKEN(token) \
>> do { \
>> if (! parser->skipping) { \
>> - yylval->str = linear_strdup(yyextra->linalloc, yytext); \
>> + /* We're not doing linear_strdup here, to avoid \
>> + * an implicit call on strlen() for the length \
>> + * of the string, as this is already found by \
>> + * flex and stored in yyleng */ \
>> + void *mem_ctx = yyextra->linalloc; \
>> + yylval->str = linear_alloc_child(mem_ctx, \
>> + yyleng + 1); \
>> + memcpy(yylval->str, yytext, yyleng + 1); \
>> RETURN_TOKEN_NEVER_SKIP (token); \
>> } \
>> } while(0)
>> diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll
>> index 7c41455d98..3a67f0ea40 100644
>> --- a/src/compiler/glsl/glsl_lexer.ll
>> +++ b/src/compiler/glsl/glsl_lexer.ll
>> @@ -81,8 +81,13 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *);
>> "illegal use of reserved word `%s'", yytext); \
>> return ERROR_TOK; \
>> } else { \
>> - void *mem_ctx = yyextra->linalloc; \
>> - yylval->identifier = linear_strdup(mem_ctx, yytext); \
>> + /* We're not doing linear_strdup here, to avoid an implicit \
>> + * call on strlen() for the length of the string, as this is \
>> + * already found by flex and stored in yyleng */ \
>> + void *mem_ctx = yyextra->linalloc; \
>> + yylval->identifier = (char *) linear_alloc_child(mem_ctx, \
>> + yyleng + 1); \
>> + memcpy(yylval->identifier, yytext, yyleng + 1); \
>
> Could this (here and below) be implemented as:
>
> char *id = (char *) linear_alloc_child(mem_ctx, yyleng + 1);
> memcpy(id, yytext, yyleng + 1);
> yylval->identifier = id;
>
> Then the type of identifier doesn't have to change, and the last hunk is
> unnecessary.
>
That should do the trick, not sure why I didn't think of that.
I'll roll up a reworked patch this evening, or during the weekend.
>> return classify_identifier(yyextra, yytext); \
>> } \
>> } while (0)
>> @@ -261,8 +266,13 @@ HASH ^{SPC}#{SPC}
>> <PP>[ \t\r]* { }
>> <PP>: return COLON;
>> <PP>[_a-zA-Z][_a-zA-Z0-9]* {
>> + /* We're not doing linear_strdup here, to avoid an implicit call
>> + * on strlen() for the length of the string, as this is already
>> + * found by flex and stored in yyleng
>> + */
>> void *mem_ctx = yyextra->linalloc;
>> - yylval->identifier = linear_strdup(mem_ctx, yytext);
>> + yylval->identifier = (char *) linear_alloc_child(mem_ctx, yyleng + 1);
>> + memcpy(yylval->identifier, yytext, yyleng + 1);
>> return IDENTIFIER;
>> }
>> <PP>[1-9][0-9]* {
>> @@ -449,8 +459,13 @@ layout {
>> || yyextra->ARB_tessellation_shader_enable) {
>> return LAYOUT_TOK;
>> } else {
>> + /* We're not doing linear_strdup here, to avoid an implicit call
>> + * on strlen() for the length of the string, as this is already
>> + * found by flex and stored in yyleng
>> + */
>> void *mem_ctx = yyextra->linalloc;
>> - yylval->identifier = linear_strdup(mem_ctx, yytext);
>> + yylval->identifier = (char *) linear_alloc_child(mem_ctx, yyleng + 1);
>> + memcpy(yylval->identifier, yytext, yyleng + 1);
>> return classify_identifier(yyextra, yytext);
>> }
>> }
>> @@ -621,12 +636,17 @@ u64vec4 KEYWORD_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, U64V
>> [_a-zA-Z][_a-zA-Z0-9]* {
>> struct _mesa_glsl_parse_state *state = yyextra;
>> void *ctx = state->linalloc;
>> - if (state->es_shader && strlen(yytext) > 1024) {
>> + if (state->es_shader && yyleng + 1 > 1024) {
>> _mesa_glsl_error(yylloc, state,
>> "Identifier `%s' exceeds 1024 characters",
>> yytext);
>> } else {
>> - yylval->identifier = linear_strdup(ctx, yytext);
>> + /* We're not doing linear_strdup here, to avoid an implicit call
>> + * on strlen() for the length of the string, as this is already
>> + * found by flex and stored in yyleng
>> + */
>> + yylval->identifier = (char *) linear_alloc_child(ctx, yyleng + 1);
>> + memcpy(yylval->identifier, yytext, yyleng + 1);
>> }
>> return classify_identifier(state, yytext);
>> }
>> diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy
>> index 7b93d34fa3..d10b9a6a12 100644
>> --- a/src/compiler/glsl/glsl_parser.yy
>> +++ b/src/compiler/glsl/glsl_parser.yy
>> @@ -100,7 +100,7 @@ static bool match_layout_qualifier(const char *s1, const char *s2,
>> int64_t n64;
>> float real;
>> double dreal;
>> - const char *identifier;
>> + char *identifier;
>>
>> struct ast_type_qualifier type_qualifier;
>>
>> @@ -2231,128 +2231,128 @@ type_specifier_nonarray:
>> ;
>>
>> basic_type_specifier_nonarray:
>> - VOID_TOK { $$ = "void"; }
>> - | FLOAT_TOK { $$ = "float"; }
>> - | DOUBLE_TOK { $$ = "double"; }
>> - | INT_TOK { $$ = "int"; }
>> - | UINT_TOK { $$ = "uint"; }
>> - | BOOL_TOK { $$ = "bool"; }
>> - | VEC2 { $$ = "vec2"; }
>> - | VEC3 { $$ = "vec3"; }
>> - | VEC4 { $$ = "vec4"; }
>> - | BVEC2 { $$ = "bvec2"; }
>> - | BVEC3 { $$ = "bvec3"; }
>> - | BVEC4 { $$ = "bvec4"; }
>> - | IVEC2 { $$ = "ivec2"; }
>> - | IVEC3 { $$ = "ivec3"; }
>> - | IVEC4 { $$ = "ivec4"; }
>> - | UVEC2 { $$ = "uvec2"; }
>> - | UVEC3 { $$ = "uvec3"; }
>> - | UVEC4 { $$ = "uvec4"; }
>> - | DVEC2 { $$ = "dvec2"; }
>> - | DVEC3 { $$ = "dvec3"; }
>> - | DVEC4 { $$ = "dvec4"; }
>> - | MAT2X2 { $$ = "mat2"; }
>> - | MAT2X3 { $$ = "mat2x3"; }
>> - | MAT2X4 { $$ = "mat2x4"; }
>> - | MAT3X2 { $$ = "mat3x2"; }
>> - | MAT3X3 { $$ = "mat3"; }
>> - | MAT3X4 { $$ = "mat3x4"; }
>> - | MAT4X2 { $$ = "mat4x2"; }
>> - | MAT4X3 { $$ = "mat4x3"; }
>> - | MAT4X4 { $$ = "mat4"; }
>> - | DMAT2X2 { $$ = "dmat2"; }
>> - | DMAT2X3 { $$ = "dmat2x3"; }
>> - | DMAT2X4 { $$ = "dmat2x4"; }
>> - | DMAT3X2 { $$ = "dmat3x2"; }
>> - | DMAT3X3 { $$ = "dmat3"; }
>> - | DMAT3X4 { $$ = "dmat3x4"; }
>> - | DMAT4X2 { $$ = "dmat4x2"; }
>> - | DMAT4X3 { $$ = "dmat4x3"; }
>> - | DMAT4X4 { $$ = "dmat4"; }
>> - | SAMPLER1D { $$ = "sampler1D"; }
>> - | SAMPLER2D { $$ = "sampler2D"; }
>> - | SAMPLER2DRECT { $$ = "sampler2DRect"; }
>> - | SAMPLER3D { $$ = "sampler3D"; }
>> - | SAMPLERCUBE { $$ = "samplerCube"; }
>> - | SAMPLEREXTERNALOES { $$ = "samplerExternalOES"; }
>> - | SAMPLER1DSHADOW { $$ = "sampler1DShadow"; }
>> - | SAMPLER2DSHADOW { $$ = "sampler2DShadow"; }
>> - | SAMPLER2DRECTSHADOW { $$ = "sampler2DRectShadow"; }
>> - | SAMPLERCUBESHADOW { $$ = "samplerCubeShadow"; }
>> - | SAMPLER1DARRAY { $$ = "sampler1DArray"; }
>> - | SAMPLER2DARRAY { $$ = "sampler2DArray"; }
>> - | SAMPLER1DARRAYSHADOW { $$ = "sampler1DArrayShadow"; }
>> - | SAMPLER2DARRAYSHADOW { $$ = "sampler2DArrayShadow"; }
>> - | SAMPLERBUFFER { $$ = "samplerBuffer"; }
>> - | SAMPLERCUBEARRAY { $$ = "samplerCubeArray"; }
>> - | SAMPLERCUBEARRAYSHADOW { $$ = "samplerCubeArrayShadow"; }
>> - | ISAMPLER1D { $$ = "isampler1D"; }
>> - | ISAMPLER2D { $$ = "isampler2D"; }
>> - | ISAMPLER2DRECT { $$ = "isampler2DRect"; }
>> - | ISAMPLER3D { $$ = "isampler3D"; }
>> - | ISAMPLERCUBE { $$ = "isamplerCube"; }
>> - | ISAMPLER1DARRAY { $$ = "isampler1DArray"; }
>> - | ISAMPLER2DARRAY { $$ = "isampler2DArray"; }
>> - | ISAMPLERBUFFER { $$ = "isamplerBuffer"; }
>> - | ISAMPLERCUBEARRAY { $$ = "isamplerCubeArray"; }
>> - | USAMPLER1D { $$ = "usampler1D"; }
>> - | USAMPLER2D { $$ = "usampler2D"; }
>> - | USAMPLER2DRECT { $$ = "usampler2DRect"; }
>> - | USAMPLER3D { $$ = "usampler3D"; }
>> - | USAMPLERCUBE { $$ = "usamplerCube"; }
>> - | USAMPLER1DARRAY { $$ = "usampler1DArray"; }
>> - | USAMPLER2DARRAY { $$ = "usampler2DArray"; }
>> - | USAMPLERBUFFER { $$ = "usamplerBuffer"; }
>> - | USAMPLERCUBEARRAY { $$ = "usamplerCubeArray"; }
>> - | SAMPLER2DMS { $$ = "sampler2DMS"; }
>> - | ISAMPLER2DMS { $$ = "isampler2DMS"; }
>> - | USAMPLER2DMS { $$ = "usampler2DMS"; }
>> - | SAMPLER2DMSARRAY { $$ = "sampler2DMSArray"; }
>> - | ISAMPLER2DMSARRAY { $$ = "isampler2DMSArray"; }
>> - | USAMPLER2DMSARRAY { $$ = "usampler2DMSArray"; }
>> - | IMAGE1D { $$ = "image1D"; }
>> - | IMAGE2D { $$ = "image2D"; }
>> - | IMAGE3D { $$ = "image3D"; }
>> - | IMAGE2DRECT { $$ = "image2DRect"; }
>> - | IMAGECUBE { $$ = "imageCube"; }
>> - | IMAGEBUFFER { $$ = "imageBuffer"; }
>> - | IMAGE1DARRAY { $$ = "image1DArray"; }
>> - | IMAGE2DARRAY { $$ = "image2DArray"; }
>> - | IMAGECUBEARRAY { $$ = "imageCubeArray"; }
>> - | IMAGE2DMS { $$ = "image2DMS"; }
>> - | IMAGE2DMSARRAY { $$ = "image2DMSArray"; }
>> - | IIMAGE1D { $$ = "iimage1D"; }
>> - | IIMAGE2D { $$ = "iimage2D"; }
>> - | IIMAGE3D { $$ = "iimage3D"; }
>> - | IIMAGE2DRECT { $$ = "iimage2DRect"; }
>> - | IIMAGECUBE { $$ = "iimageCube"; }
>> - | IIMAGEBUFFER { $$ = "iimageBuffer"; }
>> - | IIMAGE1DARRAY { $$ = "iimage1DArray"; }
>> - | IIMAGE2DARRAY { $$ = "iimage2DArray"; }
>> - | IIMAGECUBEARRAY { $$ = "iimageCubeArray"; }
>> - | IIMAGE2DMS { $$ = "iimage2DMS"; }
>> - | IIMAGE2DMSARRAY { $$ = "iimage2DMSArray"; }
>> - | UIMAGE1D { $$ = "uimage1D"; }
>> - | UIMAGE2D { $$ = "uimage2D"; }
>> - | UIMAGE3D { $$ = "uimage3D"; }
>> - | UIMAGE2DRECT { $$ = "uimage2DRect"; }
>> - | UIMAGECUBE { $$ = "uimageCube"; }
>> - | UIMAGEBUFFER { $$ = "uimageBuffer"; }
>> - | UIMAGE1DARRAY { $$ = "uimage1DArray"; }
>> - | UIMAGE2DARRAY { $$ = "uimage2DArray"; }
>> - | UIMAGECUBEARRAY { $$ = "uimageCubeArray"; }
>> - | UIMAGE2DMS { $$ = "uimage2DMS"; }
>> - | UIMAGE2DMSARRAY { $$ = "uimage2DMSArray"; }
>> - | ATOMIC_UINT { $$ = "atomic_uint"; }
>> - | INT64_TOK { $$ = "int64_t"; }
>> - | I64VEC2 { $$ = "i64vec2"; }
>> - | I64VEC3 { $$ = "i64vec3"; }
>> - | I64VEC4 { $$ = "i64vec4"; }
>> - | UINT64_TOK { $$ = "uint64_t"; }
>> - | U64VEC2 { $$ = "u64vec2"; }
>> - | U64VEC3 { $$ = "u64vec3"; }
>> - | U64VEC4 { $$ = "u64vec4"; }
>> + VOID_TOK { $$ = (char *) "void"; }
>> + | FLOAT_TOK { $$ = (char *) "float"; }
>> + | DOUBLE_TOK { $$ = (char *) "double"; }
>> + | INT_TOK { $$ = (char *) "int"; }
>> + | UINT_TOK { $$ = (char *) "uint"; }
>> + | BOOL_TOK { $$ = (char *) "bool"; }
>> + | VEC2 { $$ = (char *) "vec2"; }
>> + | VEC3 { $$ = (char *) "vec3"; }
>> + | VEC4 { $$ = (char *) "vec4"; }
>> + | BVEC2 { $$ = (char *) "bvec2"; }
>> + | BVEC3 { $$ = (char *) "bvec3"; }
>> + | BVEC4 { $$ = (char *) "bvec4"; }
>> + | IVEC2 { $$ = (char *) "ivec2"; }
>> + | IVEC3 { $$ = (char *) "ivec3"; }
>> + | IVEC4 { $$ = (char *) "ivec4"; }
>> + | UVEC2 { $$ = (char *) "uvec2"; }
>> + | UVEC3 { $$ = (char *) "uvec3"; }
>> + | UVEC4 { $$ = (char *) "uvec4"; }
>> + | DVEC2 { $$ = (char *) "dvec2"; }
>> + | DVEC3 { $$ = (char *) "dvec3"; }
>> + | DVEC4 { $$ = (char *) "dvec4"; }
>> + | MAT2X2 { $$ = (char *) "mat2"; }
>> + | MAT2X3 { $$ = (char *) "mat2x3"; }
>> + | MAT2X4 { $$ = (char *) "mat2x4"; }
>> + | MAT3X2 { $$ = (char *) "mat3x2"; }
>> + | MAT3X3 { $$ = (char *) "mat3"; }
>> + | MAT3X4 { $$ = (char *) "mat3x4"; }
>> + | MAT4X2 { $$ = (char *) "mat4x2"; }
>> + | MAT4X3 { $$ = (char *) "mat4x3"; }
>> + | MAT4X4 { $$ = (char *) "mat4"; }
>> + | DMAT2X2 { $$ = (char *) "dmat2"; }
>> + | DMAT2X3 { $$ = (char *) "dmat2x3"; }
>> + | DMAT2X4 { $$ = (char *) "dmat2x4"; }
>> + | DMAT3X2 { $$ = (char *) "dmat3x2"; }
>> + | DMAT3X3 { $$ = (char *) "dmat3"; }
>> + | DMAT3X4 { $$ = (char *) "dmat3x4"; }
>> + | DMAT4X2 { $$ = (char *) "dmat4x2"; }
>> + | DMAT4X3 { $$ = (char *) "dmat4x3"; }
>> + | DMAT4X4 { $$ = (char *) "dmat4"; }
>> + | SAMPLER1D { $$ = (char *) "sampler1D"; }
>> + | SAMPLER2D { $$ = (char *) "sampler2D"; }
>> + | SAMPLER2DRECT { $$ = (char *) "sampler2DRect"; }
>> + | SAMPLER3D { $$ = (char *) "sampler3D"; }
>> + | SAMPLERCUBE { $$ = (char *) "samplerCube"; }
>> + | SAMPLEREXTERNALOES { $$ = (char *) "samplerExternalOES"; }
>> + | SAMPLER1DSHADOW { $$ = (char *) "sampler1DShadow"; }
>> + | SAMPLER2DSHADOW { $$ = (char *) "sampler2DShadow"; }
>> + | SAMPLER2DRECTSHADOW { $$ = (char *) "sampler2DRectShadow"; }
>> + | SAMPLERCUBESHADOW { $$ = (char *) "samplerCubeShadow"; }
>> + | SAMPLER1DARRAY { $$ = (char *) "sampler1DArray"; }
>> + | SAMPLER2DARRAY { $$ = (char *) "sampler2DArray"; }
>> + | SAMPLER1DARRAYSHADOW { $$ = (char *) "sampler1DArrayShadow"; }
>> + | SAMPLER2DARRAYSHADOW { $$ = (char *) "sampler2DArrayShadow"; }
>> + | SAMPLERBUFFER { $$ = (char *) "samplerBuffer"; }
>> + | SAMPLERCUBEARRAY { $$ = (char *) "samplerCubeArray"; }
>> + | SAMPLERCUBEARRAYSHADOW { $$ = (char *) "samplerCubeArrayShadow"; }
>> + | ISAMPLER1D { $$ = (char *) "isampler1D"; }
>> + | ISAMPLER2D { $$ = (char *) "isampler2D"; }
>> + | ISAMPLER2DRECT { $$ = (char *) "isampler2DRect"; }
>> + | ISAMPLER3D { $$ = (char *) "isampler3D"; }
>> + | ISAMPLERCUBE { $$ = (char *) "isamplerCube"; }
>> + | ISAMPLER1DARRAY { $$ = (char *) "isampler1DArray"; }
>> + | ISAMPLER2DARRAY { $$ = (char *) "isampler2DArray"; }
>> + | ISAMPLERBUFFER { $$ = (char *) "isamplerBuffer"; }
>> + | ISAMPLERCUBEARRAY { $$ = (char *) "isamplerCubeArray"; }
>> + | USAMPLER1D { $$ = (char *) "usampler1D"; }
>> + | USAMPLER2D { $$ = (char *) "usampler2D"; }
>> + | USAMPLER2DRECT { $$ = (char *) "usampler2DRect"; }
>> + | USAMPLER3D { $$ = (char *) "usampler3D"; }
>> + | USAMPLERCUBE { $$ = (char *) "usamplerCube"; }
>> + | USAMPLER1DARRAY { $$ = (char *) "usampler1DArray"; }
>> + | USAMPLER2DARRAY { $$ = (char *) "usampler2DArray"; }
>> + | USAMPLERBUFFER { $$ = (char *) "usamplerBuffer"; }
>> + | USAMPLERCUBEARRAY { $$ = (char *) "usamplerCubeArray"; }
>> + | SAMPLER2DMS { $$ = (char *) "sampler2DMS"; }
>> + | ISAMPLER2DMS { $$ = (char *) "isampler2DMS"; }
>> + | USAMPLER2DMS { $$ = (char *) "usampler2DMS"; }
>> + | SAMPLER2DMSARRAY { $$ = (char *) "sampler2DMSArray"; }
>> + | ISAMPLER2DMSARRAY { $$ = (char *) "isampler2DMSArray"; }
>> + | USAMPLER2DMSARRAY { $$ = (char *) "usampler2DMSArray"; }
>> + | IMAGE1D { $$ = (char *) "image1D"; }
>> + | IMAGE2D { $$ = (char *) "image2D"; }
>> + | IMAGE3D { $$ = (char *) "image3D"; }
>> + | IMAGE2DRECT { $$ = (char *) "image2DRect"; }
>> + | IMAGECUBE { $$ = (char *) "imageCube"; }
>> + | IMAGEBUFFER { $$ = (char *) "imageBuffer"; }
>> + | IMAGE1DARRAY { $$ = (char *) "image1DArray"; }
>> + | IMAGE2DARRAY { $$ = (char *) "image2DArray"; }
>> + | IMAGECUBEARRAY { $$ = (char *) "imageCubeArray"; }
>> + | IMAGE2DMS { $$ = (char *) "image2DMS"; }
>> + | IMAGE2DMSARRAY { $$ = (char *) "image2DMSArray"; }
>> + | IIMAGE1D { $$ = (char *) "iimage1D"; }
>> + | IIMAGE2D { $$ = (char *) "iimage2D"; }
>> + | IIMAGE3D { $$ = (char *) "iimage3D"; }
>> + | IIMAGE2DRECT { $$ = (char *) "iimage2DRect"; }
>> + | IIMAGECUBE { $$ = (char *) "iimageCube"; }
>> + | IIMAGEBUFFER { $$ = (char *) "iimageBuffer"; }
>> + | IIMAGE1DARRAY { $$ = (char *) "iimage1DArray"; }
>> + | IIMAGE2DARRAY { $$ = (char *) "iimage2DArray"; }
>> + | IIMAGECUBEARRAY { $$ = (char *) "iimageCubeArray"; }
>> + | IIMAGE2DMS { $$ = (char *) "iimage2DMS"; }
>> + | IIMAGE2DMSARRAY { $$ = (char *) "iimage2DMSArray"; }
>> + | UIMAGE1D { $$ = (char *) "uimage1D"; }
>> + | UIMAGE2D { $$ = (char *) "uimage2D"; }
>> + | UIMAGE3D { $$ = (char *) "uimage3D"; }
>> + | UIMAGE2DRECT { $$ = (char *) "uimage2DRect"; }
>> + | UIMAGECUBE { $$ = (char *) "uimageCube"; }
>> + | UIMAGEBUFFER { $$ = (char *) "uimageBuffer"; }
>> + | UIMAGE1DARRAY { $$ = (char *) "uimage1DArray"; }
>> + | UIMAGE2DARRAY { $$ = (char *) "uimage2DArray"; }
>> + | UIMAGECUBEARRAY { $$ = (char *) "uimageCubeArray"; }
>> + | UIMAGE2DMS { $$ = (char *) "uimage2DMS"; }
>> + | UIMAGE2DMSARRAY { $$ = (char *) "uimage2DMSArray"; }
>> + | ATOMIC_UINT { $$ = (char *) "atomic_uint"; }
>> + | INT64_TOK { $$ = (char *) "int64_t"; }
>> + | I64VEC2 { $$ = (char *) "i64vec2"; }
>> + | I64VEC3 { $$ = (char *) "i64vec3"; }
>> + | I64VEC4 { $$ = (char *) "i64vec4"; }
>> + | UINT64_TOK { $$ = (char *) "uint64_t"; }
>> + | U64VEC2 { $$ = (char *) "u64vec2"; }
>> + | U64VEC3 { $$ = (char *) "u64vec3"; }
>> + | U64VEC4 { $$ = (char *) "u64vec4"; }
>> ;
>>
>> precision_qualifier:
>>
>
More information about the mesa-dev
mailing list