Add glsl_type::components to query total number of components in a type
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 26 Mar 2010 18:13:43 +0000 (11:13 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 26 Mar 2010 21:43:11 +0000 (14:43 -0700)
glsl_types.h
ir.cpp
ir_print_visitor.cpp

index beaaa78..720b05b 100644 (file)
@@ -158,6 +158,16 @@ struct glsl_type {
                                        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).
     */
    bool is_scalar() const
diff --git a/ir.cpp b/ir.cpp
index c4c7584..06eb196 100644 (file)
--- 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());
 }
 
 
index 1696be6..682a553 100644 (file)
@@ -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(", ");