Bläddra i källkod

Make glsl_type a class

Among other benefits, this cleans up a the hackery invovled in
initializing the union field in builtin_types.h.
tags/mesa-7.9-rc1
Ian Romanick 15 år sedan
förälder
incheckning
eccf0bf5f2
4 ändrade filer med 54 tillägg och 29 borttagningar
  1. 1
    1
      Makefile.am
  2. 6
    7
      builtin_types.sh
  3. 0
    15
      glsl_types.cpp
  4. 47
    6
      glsl_types.h

+ 1
- 1
Makefile.am Visa fil

@@ -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


+ 6
- 7
builtin_types.sh Visa fil

@@ -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;


glsl_types.c → glsl_types.cpp Visa fil

@@ -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,

+ 47
- 6
glsl_types.h Visa fil

@@ -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) \

Laddar…
Avbryt
Spara