summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2013-06-18 04:22:30 -0700
committerKenneth Graunke <[email protected]>2013-06-26 11:25:12 -0700
commitd367a1cbdb816bcc50fb1fd10121de6eba53f7ab (patch)
treee9a4330fdef141f992612ed3345af8902b87d5b1
parent9a14e412d6de93349a490a9c4534b52c3b524ee9 (diff)
glsl: Add simple vector type accessor helpers.
This patch introduces new functions to quickly grab a pointer to a vector type. For example: glsl_type::bvec(4) returns glsl_type::bvec4_type glsl_type::ivec(3) returns glsl_type::ivec3_type glsl_type::uvec(2) returns glsl_type::uvec2_type glsl_type::vec(1) returns glsl_type::float_type This is less wordy than glsl_type::get_instance(GLSL_TYPE_BOOL, 4, 1), which can help avoid extra word wrapping. Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r--src/glsl/glsl_types.cpp52
-rw-r--r--src/glsl/glsl_types.h9
2 files changed, 61 insertions, 0 deletions
diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index df9c5d36f0b..a5491c58a47 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -534,6 +534,58 @@ glsl_type::glsl_type(const glsl_type *array, unsigned length) :
}
+const glsl_type *const
+glsl_type::vec(unsigned components)
+{
+ if (components == 0 || components > 4)
+ return error_type;
+
+ static const glsl_type *const ts[] = {
+ float_type, vec2_type, vec3_type, vec4_type
+ };
+ return ts[components - 1];
+}
+
+
+const glsl_type *const
+glsl_type::ivec(unsigned components)
+{
+ if (components == 0 || components > 4)
+ return error_type;
+
+ static const glsl_type *const ts[] = {
+ int_type, ivec2_type, ivec3_type, ivec4_type
+ };
+ return ts[components - 1];
+}
+
+
+const glsl_type *const
+glsl_type::uvec(unsigned components)
+{
+ if (components == 0 || components > 4)
+ return error_type;
+
+ static const glsl_type *const ts[] = {
+ uint_type, uvec2_type, uvec3_type, uvec4_type
+ };
+ return ts[components - 1];
+}
+
+
+const glsl_type *const
+glsl_type::bvec(unsigned components)
+{
+ if (components == 0 || components > 4)
+ return error_type;
+
+ static const glsl_type *const ts[] = {
+ bool_type, bvec2_type, bvec3_type, bvec4_type
+ };
+ return ts[components - 1];
+}
+
+
const glsl_type *
glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns)
{
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index 31e3dd253f0..665af8bf29d 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -187,6 +187,15 @@ struct glsl_type {
static const glsl_type *const mat4_type;
/*@}*/
+ /**
+ * Convenience accessors for vector types (shorter than get_instance()).
+ * @{
+ */
+ static const glsl_type *const vec(unsigned components);
+ static const glsl_type *const ivec(unsigned components);
+ static const glsl_type *const uvec(unsigned components);
+ static const glsl_type *const bvec(unsigned components);
+ /**@}*/
/**
* For numeric and boolean derrived types returns the basic scalar type