diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rwxr-xr-x | builtin_types.sh | 13 | ||||
-rw-r--r-- | glsl_types.cpp (renamed from glsl_types.c) | 15 | ||||
-rw-r--r-- | glsl_types.h | 53 |
4 files changed, 54 insertions, 29 deletions
diff --git a/Makefile.am b/Makefile.am index 1fc8aa97a2..77b401357a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,7 +23,7 @@ AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = glsl -glsl_SOURCES = symbol_table.c hash_table.c glsl_types.c \ +glsl_SOURCES = symbol_table.c hash_table.c glsl_types.cpp \ glsl_parser.ypp glsl_lexer.lpp glsl_parser_extras.cpp \ ast_expr.cpp ast_to_hir.cpp ir.cpp hir_field_selection.cpp diff --git a/builtin_types.sh b/builtin_types.sh index 19dcbaf124..3c8fd879e3 100755 --- a/builtin_types.sh +++ b/builtin_types.sh @@ -24,7 +24,7 @@ # gen_integral_type <name> <base_type> <vector elements> <matrix rows> function gen_integral_type { - printf ' { %17s, 0, 0, 0, 0, %u, %u, "%s", 0, {NULL} },\n' $2 $3 $4 $1 + printf ' glsl_type( %17s, %u, %u, "%s"),\n' $2 $3 $4 $1 index=$((index + 1)) } @@ -32,8 +32,8 @@ function gen_integral_type function gen_struct_type { elements=$(printf "%s_fields" $1) - printf ' {\n GLSL_TYPE_STRUCT, 0, 0, 0, 0, 0, 0, "%s",\n Elements(%s),\n {(void *) %s}\n },\n' \ - $1 $elements $elements + printf ' glsl_type(%s,\n Elements(%s),\n "%s"),\n' \ + $elements $elements $1 } # gen_sampler_type <name> <dimensions> <shadow> <array> <type> @@ -55,7 +55,7 @@ function gen_sampler_type name=$(printf "u%s" $name) fi - printf ' { GLSL_TYPE_SAMPLER, %21s, %u, %u, %15s, 0, 0,\n "%s", 0, {NULL} },\n' \ + printf ' glsl_type(%21s, %u, %u, %15s, "%s"),\n' \ $2 $3 $4 $5 $name } @@ -119,9 +119,8 @@ cat <<EOF #define Elements(x) (sizeof(x)/sizeof(*(x))) #endif -static const struct glsl_type error_type = { - GLSL_TYPE_ERROR, 0, 0, 0, 0, 0, 0, "", 0, {NULL} -}; +static const struct glsl_type error_type = + glsl_type(GLSL_TYPE_ERROR, 0, 0, ""); const struct glsl_type *const glsl_error_type = & error_type; diff --git a/glsl_types.c b/glsl_types.cpp index 8973218017..cd473625f2 100644 --- a/glsl_types.c +++ b/glsl_types.cpp @@ -28,21 +28,6 @@ #include "builtin_types.h" -struct glsl_type * -_mesa_glsl_array_type_ctor(struct glsl_type *base, unsigned length, - const char *name) -{ - struct glsl_type *type = calloc(1, sizeof(*type)); - - type->base_type = GLSL_TYPE_ARRAY; - type->name = name; - type->length = length; - type->fields.array = base; - - return type; -} - - static void add_types_to_symbol_table(struct _mesa_symbol_table *symtab, const struct glsl_type *types, diff --git a/glsl_types.h b/glsl_types.h index c69da95622..9a70b8bfd4 100644 --- a/glsl_types.h +++ b/glsl_types.h @@ -25,6 +25,8 @@ #ifndef GLSL_TYPES_H #define GLSL_TYPES_H +#include <cstring> + #define GLSL_TYPE_UINT 0 #define GLSL_TYPE_INT 1 #define GLSL_TYPE_FLOAT 2 @@ -44,12 +46,14 @@ #define is_error_type(t) ((t)->base_type == GLSL_TYPE_ERROR) -#define GLSL_SAMPLER_DIM_1D 0 -#define GLSL_SAMPLER_DIM_2D 1 -#define GLSL_SAMPLER_DIM_3D 2 -#define GLSL_SAMPLER_DIM_CUBE 3 -#define GLSL_SAMPLER_DIM_RECT 4 -#define GLSL_SAMPLER_DIM_BUF 5 +enum glsl_sampler_dim { + GLSL_SAMPLER_DIM_1D = 0, + GLSL_SAMPLER_DIM_2D, + GLSL_SAMPLER_DIM_3D, + GLSL_SAMPLER_DIM_CUBE, + GLSL_SAMPLER_DIM_RECT, + GLSL_SAMPLER_DIM_BUF +}; struct glsl_type { @@ -94,6 +98,43 @@ struct glsl_type { const struct glsl_type *parameters; /**< Parameters to function. */ const struct glsl_struct_field *structure;/**< List of struct fields. */ } fields; + + + glsl_type(unsigned base_type, unsigned vector_elements, + unsigned matrix_rows, const char *name) : + base_type(base_type), + sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), + sampler_type(0), + vector_elements(vector_elements), matrix_rows(matrix_rows), + name(name), + length(0) + { + memset(& fields, 0, sizeof(fields)); + } + + glsl_type(enum glsl_sampler_dim dim, bool shadow, bool array, + unsigned type, const char *name) : + base_type(GLSL_TYPE_SAMPLER), + sampler_dimensionality(dim), sampler_shadow(shadow), + sampler_array(array), sampler_type(type), + vector_elements(0), matrix_rows(0), + name(name), + length(0) + { + memset(& fields, 0, sizeof(fields)); + } + + glsl_type(const glsl_struct_field *fields, unsigned num_fields, + const char *name) : + base_type(GLSL_TYPE_STRUCT), + sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), + sampler_type(0), + vector_elements(0), matrix_rows(0), + name(name), + length(num_fields) + { + this->fields.structure = fields; + } }; #define is_glsl_type_scalar(t) \ |