glsl: Drop the round-trip through ast_type_specifier for many builtin types.
We have lexer recognition of a bunch of our types based on the handling. This code was mapping those recognized tokens to an enum and then to a string of their name. Just drop the enums and provide the string directly in the parser. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -418,72 +418,12 @@ public:
|
||||
};
|
||||
|
||||
|
||||
enum ast_types {
|
||||
ast_void,
|
||||
ast_float,
|
||||
ast_int,
|
||||
ast_uint,
|
||||
ast_bool,
|
||||
ast_vec2,
|
||||
ast_vec3,
|
||||
ast_vec4,
|
||||
ast_bvec2,
|
||||
ast_bvec3,
|
||||
ast_bvec4,
|
||||
ast_ivec2,
|
||||
ast_ivec3,
|
||||
ast_ivec4,
|
||||
ast_uvec2,
|
||||
ast_uvec3,
|
||||
ast_uvec4,
|
||||
ast_mat2,
|
||||
ast_mat2x3,
|
||||
ast_mat2x4,
|
||||
ast_mat3x2,
|
||||
ast_mat3,
|
||||
ast_mat3x4,
|
||||
ast_mat4x2,
|
||||
ast_mat4x3,
|
||||
ast_mat4,
|
||||
ast_sampler1d,
|
||||
ast_sampler2d,
|
||||
ast_sampler2drect,
|
||||
ast_sampler3d,
|
||||
ast_samplercube,
|
||||
ast_samplerexternaloes,
|
||||
ast_sampler1dshadow,
|
||||
ast_sampler2dshadow,
|
||||
ast_sampler2drectshadow,
|
||||
ast_samplercubeshadow,
|
||||
ast_sampler1darray,
|
||||
ast_sampler2darray,
|
||||
ast_sampler1darrayshadow,
|
||||
ast_sampler2darrayshadow,
|
||||
ast_isampler1d,
|
||||
ast_isampler2d,
|
||||
ast_isampler3d,
|
||||
ast_isamplercube,
|
||||
ast_isampler1darray,
|
||||
ast_isampler2darray,
|
||||
ast_usampler1d,
|
||||
ast_usampler2d,
|
||||
ast_usampler3d,
|
||||
ast_usamplercube,
|
||||
ast_usampler1darray,
|
||||
ast_usampler2darray,
|
||||
|
||||
ast_struct,
|
||||
ast_type_name
|
||||
};
|
||||
|
||||
|
||||
class ast_type_specifier : public ast_node {
|
||||
public:
|
||||
ast_type_specifier(int specifier);
|
||||
|
||||
/** Construct a type specifier from a type name */
|
||||
ast_type_specifier(const char *name)
|
||||
: type_specifier(ast_type_name), type_name(name), structure(NULL),
|
||||
: type_name(name), structure(NULL),
|
||||
is_array(false), array_size(NULL), precision(ast_precision_none),
|
||||
is_precision_statement(false)
|
||||
{
|
||||
@@ -492,7 +432,7 @@ public:
|
||||
|
||||
/** Construct a type specifier from a structure definition */
|
||||
ast_type_specifier(ast_struct_specifier *s)
|
||||
: type_specifier(ast_struct), type_name(s->name), structure(s),
|
||||
: type_name(s->name), structure(s),
|
||||
is_array(false), array_size(NULL), precision(ast_precision_none),
|
||||
is_precision_statement(false)
|
||||
{
|
||||
@@ -507,8 +447,6 @@ public:
|
||||
|
||||
ir_rvalue *hir(exec_list *, struct _mesa_glsl_parse_state *);
|
||||
|
||||
enum ast_types type_specifier;
|
||||
|
||||
const char *type_name;
|
||||
ast_struct_specifier *structure;
|
||||
|
||||
|
@@ -3904,8 +3904,8 @@ ast_type_specifier::hir(exec_list *instructions,
|
||||
"arrays");
|
||||
return NULL;
|
||||
}
|
||||
if (this->type_specifier != ast_float
|
||||
&& this->type_specifier != ast_int) {
|
||||
if (strcmp(this->type_name, "float") != 0 &&
|
||||
strcmp(this->type_name, "int") != 0) {
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"default precision statements apply only to types "
|
||||
"float and int");
|
||||
|
@@ -29,7 +29,7 @@ extern "C" {
|
||||
void
|
||||
ast_type_specifier::print(void) const
|
||||
{
|
||||
if (type_specifier == ast_struct) {
|
||||
if (structure) {
|
||||
structure->print();
|
||||
} else {
|
||||
printf("%s ", type_name);
|
||||
@@ -46,72 +46,6 @@ ast_type_specifier::print(void) const
|
||||
}
|
||||
}
|
||||
|
||||
ast_type_specifier::ast_type_specifier(int specifier)
|
||||
: type_specifier(ast_types(specifier)), type_name(NULL), structure(NULL),
|
||||
is_array(false), array_size(NULL), precision(ast_precision_none),
|
||||
is_precision_statement(false)
|
||||
{
|
||||
static const char *const names[] = {
|
||||
"void",
|
||||
"float",
|
||||
"int",
|
||||
"uint",
|
||||
"bool",
|
||||
"vec2",
|
||||
"vec3",
|
||||
"vec4",
|
||||
"bvec2",
|
||||
"bvec3",
|
||||
"bvec4",
|
||||
"ivec2",
|
||||
"ivec3",
|
||||
"ivec4",
|
||||
"uvec2",
|
||||
"uvec3",
|
||||
"uvec4",
|
||||
"mat2",
|
||||
"mat2x3",
|
||||
"mat2x4",
|
||||
"mat3x2",
|
||||
"mat3",
|
||||
"mat3x4",
|
||||
"mat4x2",
|
||||
"mat4x3",
|
||||
"mat4",
|
||||
"sampler1D",
|
||||
"sampler2D",
|
||||
"sampler2DRect",
|
||||
"sampler3D",
|
||||
"samplerCube",
|
||||
"samplerExternalOES",
|
||||
"sampler1DShadow",
|
||||
"sampler2DShadow",
|
||||
"sampler2DRectShadow",
|
||||
"samplerCubeShadow",
|
||||
"sampler1DArray",
|
||||
"sampler2DArray",
|
||||
"sampler1DArrayShadow",
|
||||
"sampler2DArrayShadow",
|
||||
"isampler1D",
|
||||
"isampler2D",
|
||||
"isampler3D",
|
||||
"isamplerCube",
|
||||
"isampler1DArray",
|
||||
"isampler2DArray",
|
||||
"usampler1D",
|
||||
"usampler2D",
|
||||
"usampler3D",
|
||||
"usamplerCube",
|
||||
"usampler1DArray",
|
||||
"usampler2DArray",
|
||||
|
||||
NULL, /* ast_struct */
|
||||
NULL /* ast_type_name */
|
||||
};
|
||||
|
||||
type_name = names[specifier];
|
||||
}
|
||||
|
||||
bool
|
||||
ast_fully_specified_type::has_qualifiers() const
|
||||
{
|
||||
|
@@ -156,7 +156,7 @@ static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
|
||||
%type <type_specifier> type_specifier
|
||||
%type <type_specifier> type_specifier_no_prec
|
||||
%type <type_specifier> type_specifier_nonarray
|
||||
%type <n> basic_type_specifier_nonarray
|
||||
%type <identifier> basic_type_specifier_nonarray
|
||||
%type <fully_specified_type> fully_specified_type
|
||||
%type <function> function_prototype
|
||||
%type <function> function_header
|
||||
@@ -1365,58 +1365,58 @@ type_specifier_nonarray:
|
||||
;
|
||||
|
||||
basic_type_specifier_nonarray:
|
||||
VOID_TOK { $$ = ast_void; }
|
||||
| FLOAT_TOK { $$ = ast_float; }
|
||||
| INT_TOK { $$ = ast_int; }
|
||||
| UINT_TOK { $$ = ast_uint; }
|
||||
| BOOL_TOK { $$ = ast_bool; }
|
||||
| VEC2 { $$ = ast_vec2; }
|
||||
| VEC3 { $$ = ast_vec3; }
|
||||
| VEC4 { $$ = ast_vec4; }
|
||||
| BVEC2 { $$ = ast_bvec2; }
|
||||
| BVEC3 { $$ = ast_bvec3; }
|
||||
| BVEC4 { $$ = ast_bvec4; }
|
||||
| IVEC2 { $$ = ast_ivec2; }
|
||||
| IVEC3 { $$ = ast_ivec3; }
|
||||
| IVEC4 { $$ = ast_ivec4; }
|
||||
| UVEC2 { $$ = ast_uvec2; }
|
||||
| UVEC3 { $$ = ast_uvec3; }
|
||||
| UVEC4 { $$ = ast_uvec4; }
|
||||
| MAT2X2 { $$ = ast_mat2; }
|
||||
| MAT2X3 { $$ = ast_mat2x3; }
|
||||
| MAT2X4 { $$ = ast_mat2x4; }
|
||||
| MAT3X2 { $$ = ast_mat3x2; }
|
||||
| MAT3X3 { $$ = ast_mat3; }
|
||||
| MAT3X4 { $$ = ast_mat3x4; }
|
||||
| MAT4X2 { $$ = ast_mat4x2; }
|
||||
| MAT4X3 { $$ = ast_mat4x3; }
|
||||
| MAT4X4 { $$ = ast_mat4; }
|
||||
| SAMPLER1D { $$ = ast_sampler1d; }
|
||||
| SAMPLER2D { $$ = ast_sampler2d; }
|
||||
| SAMPLER2DRECT { $$ = ast_sampler2drect; }
|
||||
| SAMPLER3D { $$ = ast_sampler3d; }
|
||||
| SAMPLERCUBE { $$ = ast_samplercube; }
|
||||
| SAMPLEREXTERNALOES { $$ = ast_samplerexternaloes; }
|
||||
| SAMPLER1DSHADOW { $$ = ast_sampler1dshadow; }
|
||||
| SAMPLER2DSHADOW { $$ = ast_sampler2dshadow; }
|
||||
| SAMPLER2DRECTSHADOW { $$ = ast_sampler2drectshadow; }
|
||||
| SAMPLERCUBESHADOW { $$ = ast_samplercubeshadow; }
|
||||
| SAMPLER1DARRAY { $$ = ast_sampler1darray; }
|
||||
| SAMPLER2DARRAY { $$ = ast_sampler2darray; }
|
||||
| SAMPLER1DARRAYSHADOW { $$ = ast_sampler1darrayshadow; }
|
||||
| SAMPLER2DARRAYSHADOW { $$ = ast_sampler2darrayshadow; }
|
||||
| ISAMPLER1D { $$ = ast_isampler1d; }
|
||||
| ISAMPLER2D { $$ = ast_isampler2d; }
|
||||
| ISAMPLER3D { $$ = ast_isampler3d; }
|
||||
| ISAMPLERCUBE { $$ = ast_isamplercube; }
|
||||
| ISAMPLER1DARRAY { $$ = ast_isampler1darray; }
|
||||
| ISAMPLER2DARRAY { $$ = ast_isampler2darray; }
|
||||
| USAMPLER1D { $$ = ast_usampler1d; }
|
||||
| USAMPLER2D { $$ = ast_usampler2d; }
|
||||
| USAMPLER3D { $$ = ast_usampler3d; }
|
||||
| USAMPLERCUBE { $$ = ast_usamplercube; }
|
||||
| USAMPLER1DARRAY { $$ = ast_usampler1darray; }
|
||||
| USAMPLER2DARRAY { $$ = ast_usampler2darray; }
|
||||
VOID_TOK { $$ = "void"; }
|
||||
| FLOAT_TOK { $$ = "float"; }
|
||||
| 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"; }
|
||||
| MAT2X2 { $$ = "mat2"; }
|
||||
| MAT2X3 { $$ = "mat2x3"; }
|
||||
| MAT2X4 { $$ = "mat2x4"; }
|
||||
| MAT3X2 { $$ = "mat3x2"; }
|
||||
| MAT3X3 { $$ = "mat3"; }
|
||||
| MAT3X4 { $$ = "mat3x4"; }
|
||||
| MAT4X2 { $$ = "mat4x2"; }
|
||||
| MAT4X3 { $$ = "mat4x3"; }
|
||||
| MAT4X4 { $$ = "mat4"; }
|
||||
| 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"; }
|
||||
| ISAMPLER1D { $$ = "isampler1D"; }
|
||||
| ISAMPLER2D { $$ = "isampler2D"; }
|
||||
| ISAMPLER3D { $$ = "isampler3D"; }
|
||||
| ISAMPLERCUBE { $$ = "isamplerCube"; }
|
||||
| ISAMPLER1DARRAY { $$ = "isampler1DArray"; }
|
||||
| ISAMPLER2DARRAY { $$ = "isampler2DArray"; }
|
||||
| USAMPLER1D { $$ = "usampler1D"; }
|
||||
| USAMPLER2D { $$ = "usampler2D"; }
|
||||
| USAMPLER3D { $$ = "usampler3D"; }
|
||||
| USAMPLERCUBE { $$ = "usamplerCube"; }
|
||||
| USAMPLER1DARRAY { $$ = "usampler1DArray"; }
|
||||
| USAMPLER2DARRAY { $$ = "usampler2DArray"; }
|
||||
;
|
||||
|
||||
precision_qualifier:
|
||||
|
Reference in New Issue
Block a user