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).
*/
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;
break;
}
- memcpy(& this->value, data, size * elements);
+ memcpy(& this->value, data, size * type->components());
}
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(", ");