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 <kenneth@whitecape.org>
This commit is contained in:
Paul Berry 2011-10-25 16:24:03 -07:00
parent f40c6b2a99
commit fa0066ae2b
2 changed files with 34 additions and 0 deletions

View File

@ -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)
{

View File

@ -177,6 +177,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
*