glsl: add glsl_type::uniform_locations() helper function

This function calculates the number of unique values from
glGetUniformLocation for the elements of the type.

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Tapani Pälli 2014-06-05 07:37:16 +03:00
parent bfe42ddd99
commit dadc3d04f0
2 changed files with 32 additions and 0 deletions

View file

@ -675,6 +675,32 @@ glsl_type::component_slots() const
return 0;
}
unsigned
glsl_type::uniform_locations() const
{
if (this->is_matrix())
return 1;
unsigned size = 0;
switch (this->base_type) {
case GLSL_TYPE_STRUCT:
case GLSL_TYPE_INTERFACE:
for (unsigned i = 0; i < this->length; i++)
size += this->fields.structure[i].type->uniform_locations();
return size;
case GLSL_TYPE_ARRAY:
return this->length * this->fields.array->uniform_locations();
default:
break;
}
/* The location count for many types match with component_slots() result,
* all expections should be handled above.
*/
return component_slots();
}
bool
glsl_type::can_implicitly_convert_to(const glsl_type *desired,
_mesa_glsl_parse_state *state) const

View file

@ -255,6 +255,12 @@ struct glsl_type {
*/
unsigned component_slots() const;
/**
* Calculate the number of unique values from glGetUniformLocation for the
* elements of the type.
*/
unsigned uniform_locations() const;
/**
* Calculate the number of attribute slots required to hold this type
*