diff options
author | Kenneth Graunke <[email protected]> | 2013-06-18 04:22:30 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-06-26 11:25:12 -0700 |
commit | d367a1cbdb816bcc50fb1fd10121de6eba53f7ab (patch) | |
tree | e9a4330fdef141f992612ed3345af8902b87d5b1 | |
parent | 9a14e412d6de93349a490a9c4534b52c3b524ee9 (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.cpp | 52 | ||||
-rw-r--r-- | src/glsl/glsl_types.h | 9 |
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 |