From d811d47609323f99f3718a2c5fb75ce47032f380 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 26 Mar 2010 11:13:43 -0700 Subject: Add glsl_type::components to query total number of components in a type --- glsl_types.h | 10 ++++++++++ ir.cpp | 5 +---- ir_print_visitor.cpp | 8 ++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/glsl_types.h b/glsl_types.h index beaaa78f55..720b05bcda 100644 --- a/glsl_types.h +++ b/glsl_types.h @@ -157,6 +157,16 @@ struct glsl_type { static const glsl_type *get_instance(unsigned base_type, unsigned rows, unsigned columns); + /** + * Query the total number of scalars that make up a scalar, vector or matrix + */ + unsigned components() const + { + return ((vector_elements == 0) ? 1 : vector_elements) + * ((matrix_columns == 0) ? 1 : matrix_columns); + + } + /** * Query whether or not a type is a scalar (non-vector and non-matrix). */ diff --git a/ir.cpp b/ir.cpp index c4c7584bcf..06eb19691e 100644 --- a/ir.cpp +++ b/ir.cpp @@ -57,9 +57,6 @@ ir_label::ir_label(const char *label) ir_constant::ir_constant(const struct glsl_type *type, const void *data) : ir_rvalue() { - const unsigned elements = - ((type->vector_elements == 0) ? 1 : type->vector_elements) - * ((type->matrix_columns == 0) ? 1 : type->matrix_columns); unsigned size = 0; this->type = type; @@ -74,7 +71,7 @@ ir_constant::ir_constant(const struct glsl_type *type, const void *data) break; } - memcpy(& this->value, data, size * elements); + memcpy(& this->value, data, size * type->components()); } diff --git a/ir_print_visitor.cpp b/ir_print_visitor.cpp index 1696be69b5..682a553249 100644 --- a/ir_print_visitor.cpp +++ b/ir_print_visitor.cpp @@ -177,12 +177,8 @@ void ir_print_visitor::visit(ir_constant *ir) print_type(base_type); printf(") "); - const unsigned num_values = 1 - * ((ir->type->vector_elements > 0) ? ir->type->vector_elements : 1) - * ((ir->type->matrix_columns > 0) ? ir->type->matrix_columns : 1); - - printf("(%d) (", num_values); - for (unsigned i = 0; i < num_values; i++) { + printf("(%d) (", ir->type->components()); + for (unsigned i = 0; i < ir->type->components(); i++) { if (i != 0) printf(", "); -- cgit v1.2.3