From: Ian Romanick Date: Fri, 26 Mar 2010 18:13:43 +0000 (-0700) Subject: Add glsl_type::components to query total number of components in a type X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d811d47609323f99f3718a2c5fb75ce47032f380;p=mesa.git Add glsl_type::components to query total number of components in a type --- diff --git a/glsl_types.h b/glsl_types.h index beaaa78f553..720b05bcda3 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 c4c7584bcfa..06eb19691e7 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 1696be69b55..682a553249c 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(", ");