From: Ian Romanick Date: Wed, 24 Mar 2010 00:31:39 +0000 (-0700) Subject: Add glsl_type::get_base_type query X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bb7e00a1cd63f3012226253bb0121922419a5f23;p=mesa.git Add glsl_type::get_base_type query Retreives the glsl_type that corresponds to the base type of a numeric scalar / vector / matrix type. So vec4 returns float, etc. --- diff --git a/glsl_types.cpp b/glsl_types.cpp index af6a40800b0..2b06a335538 100644 --- a/glsl_types.cpp +++ b/glsl_types.cpp @@ -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; + } +} diff --git a/glsl_types.h b/glsl_types.h index 7c48e792eb5..97d8390e600 100644 --- a/glsl_types.h +++ b/glsl_types.h @@ -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). */