summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2011-10-25 16:24:03 -0700
committerPaul Berry <[email protected]>2011-10-31 11:29:14 -0700
commitfa0066ae2b2d304065ee8d93d9b5ecc8b457425a (patch)
tree378dcd82d6904b01ed0f7171b919e7585335c692 /src/glsl
parentf40c6b2a992f3ca796826a47743c0c80232d7ab2 (diff)
mesa: Add glsl_type::get_scalar_type() function.
This function is similar to get_base_type(), but when called on arrays, it returns the scalar type composing the array. For example, glsl_type(vec4[]) => float_type. Acked-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/glsl_types.cpp23
-rw-r--r--src/glsl/glsl_types.h11
2 files changed, 34 insertions, 0 deletions
diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index c94aec0d2da..03e99879e8e 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -258,6 +258,29 @@ const glsl_type *glsl_type::get_base_type() const
}
+const glsl_type *glsl_type::get_scalar_type() const
+{
+ const glsl_type *type = this;
+
+ /* Handle arrays */
+ while (type->base_type == GLSL_TYPE_ARRAY)
+ type = type->fields.array;
+
+ /* Handle vectors and matrices */
+ switch (type->base_type) {
+ case GLSL_TYPE_UINT:
+ return uint_type;
+ case GLSL_TYPE_INT:
+ return int_type;
+ case GLSL_TYPE_FLOAT:
+ return float_type;
+ default:
+ /* Handle everything else */
+ return type;
+ }
+}
+
+
void
_mesa_glsl_release_types(void)
{
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index 048696693be..2f849afba70 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -178,6 +178,17 @@ struct glsl_type {
const glsl_type *get_base_type() const;
/**
+ * Get the basic scalar type which this type aggregates.
+ *
+ * If the type is a numeric or boolean scalar, vector, or matrix, or an
+ * array of any of those, this function gets the scalar type of the
+ * individual components. For structs and arrays of structs, this function
+ * returns the struct type. For samplers and arrays of samplers, this
+ * function returns the sampler type.
+ */
+ const glsl_type *get_scalar_type() const;
+
+ /**
* Query the type of elements in an array
*
* \return