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:
parent
f40c6b2a99
commit
fa0066ae2b
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue