summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rwxr-xr-xbuiltin_types.sh13
-rw-r--r--glsl_types.cpp (renamed from glsl_types.c)15
-rw-r--r--glsl_types.h53
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) \