From: Ian Romanick Date: Thu, 25 Mar 2010 20:19:13 +0000 (-0700) Subject: Fix matrix dimensioning X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1b4f04124ab1cf1c9df94277f9da69956991d9e8;p=mesa.git Fix matrix dimensioning Newb GL mistake: matrices in GL are column-major. This means that vector_elements is the number of rows. Making these changes causes matrix-08.glsl to pass. --- diff --git a/builtin_types.sh b/builtin_types.sh index 6dd0ea7403b..299a4cef415 100755 --- a/builtin_types.sh +++ b/builtin_types.sh @@ -275,7 +275,7 @@ gen_header "120" for c in 2 3 4; do for r in 2 3 4; do if [ $c -ne $r ]; then - gen_integral_type "mat${c}x${r}" "GLSL_TYPE_FLOAT" $c $r + gen_integral_type "mat${c}x${r}" "GLSL_TYPE_FLOAT" $r $c fi done done diff --git a/glsl_types.h b/glsl_types.h index e1768d520b3..96c9a1b2a48 100644 --- a/glsl_types.h +++ b/glsl_types.h @@ -75,7 +75,7 @@ struct glsl_type { */ unsigned vector_elements:3; /**< 0, 2, 3, or 4 vector elements. */ - unsigned matrix_rows:3; /**< 0, 2, 3, or 4 matrix rows. */ + unsigned matrix_columns:3; /**< 0, 2, 3, or 4 matrix columns. */ /** * Name of the data type @@ -108,11 +108,11 @@ struct glsl_type { glsl_type(unsigned base_type, unsigned vector_elements, - unsigned matrix_rows, const char *name) : + unsigned matrix_columns, 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), + vector_elements(vector_elements), matrix_columns(matrix_columns), name(name), length(0) { @@ -124,7 +124,7 @@ struct glsl_type { base_type(GLSL_TYPE_SAMPLER), sampler_dimensionality(dim), sampler_shadow(shadow), sampler_array(array), sampler_type(type), - vector_elements(0), matrix_rows(0), + vector_elements(0), matrix_columns(0), name(name), length(0) { @@ -136,7 +136,7 @@ struct glsl_type { base_type(GLSL_TYPE_STRUCT), sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), sampler_type(0), - vector_elements(0), matrix_rows(0), + vector_elements(0), matrix_columns(0), name(name), length(num_fields) { @@ -175,7 +175,7 @@ struct glsl_type { bool is_vector() const { return (vector_elements > 0) - && (matrix_rows == 0) + && (matrix_columns == 0) && (base_type >= GLSL_TYPE_UINT) && (base_type <= GLSL_TYPE_BOOL); } @@ -186,7 +186,7 @@ struct glsl_type { bool is_matrix() const { /* GLSL only has float matrices. */ - return (matrix_rows > 0) && (base_type == GLSL_TYPE_FLOAT); + return (matrix_columns > 0) && (base_type == GLSL_TYPE_FLOAT); } /** @@ -239,7 +239,7 @@ struct glsl_type { const glsl_type *row_type() const { return is_matrix() - ? get_instance(base_type, matrix_rows, 1) + ? get_instance(base_type, matrix_columns, 1) : glsl_error_type; } diff --git a/ir.cpp b/ir.cpp index 49df75425e6..ad75cdad73c 100644 --- a/ir.cpp +++ b/ir.cpp @@ -59,7 +59,7 @@ ir_constant::ir_constant(const struct glsl_type *type, const void *data) { const unsigned elements = ((type->vector_elements == 0) ? 1 : type->vector_elements) - * ((type->matrix_rows == 0) ? 1 : type->matrix_rows); + * ((type->matrix_columns == 0) ? 1 : type->matrix_columns); unsigned size = 0; this->type = type; diff --git a/ir_function.cpp b/ir_function.cpp index 1ff5b203ccf..b6139c4a9fe 100644 --- a/ir_function.cpp +++ b/ir_function.cpp @@ -38,7 +38,7 @@ type_compare(const glsl_type *a, const glsl_type *b) case GLSL_TYPE_FLOAT: case GLSL_TYPE_BOOL: if ((a->vector_elements != b->vector_elements) - || (a->matrix_rows != b->matrix_rows)) + || (a->matrix_columns != b->matrix_columns)) return -1; /* There is no implicit conversion to or from bool.