Add glsl_type::get_base_type query
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 24 Mar 2010 00:31:39 +0000 (17:31 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 24 Mar 2010 00:31:39 +0000 (17:31 -0700)
Retreives the glsl_type that corresponds to the base type of a numeric scalar /
vector / matrix type.  So vec4 returns float, etc.

glsl_types.cpp
glsl_types.h

index af6a40800b00b751d00836455ffec381cd872014..2b06a3355380300e4d1581a17617120ffb22c7a9 100644 (file)
@@ -142,3 +142,20 @@ _mesa_glsl_get_vector_type(unsigned base_type, unsigned vector_length)
       return glsl_error_type;
    }
 }
+
+
+const glsl_type *glsl_type::get_base_type() const
+{
+   switch (base_type) {
+   case GLSL_TYPE_UINT:
+      return glsl_uint_type;
+   case GLSL_TYPE_INT:
+      return glsl_int_type;
+   case GLSL_TYPE_FLOAT:
+      return glsl_float_type;
+   case GLSL_TYPE_BOOL:
+      return glsl_bool_type;
+   default:
+      return glsl_error_type;
+   }
+}
index 7c48e792eb5a53587a4de589205891c7026ffffb..97d8390e600eeda402ffe87086fa4355116b033f 100644 (file)
@@ -137,6 +137,16 @@ struct glsl_type {
       this->fields.structure = fields;
    }
 
+   /**
+    * For numeric and boolean derrived types returns the basic scalar type
+    *
+    * If the type is a numeric or boolean scalar, vector, or matrix type,
+    * this function gets the scalar type of the individual components.  For
+    * all other types, including arrays of numeric or boolean types, the
+    * error type is returned.
+    */
+   const glsl_type *get_base_type() const;
+
    /**
     * Query whether or not a type is a scalar (non-vector and non-matrix).
     */