mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
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:
parent
bfe42ddd99
commit
dadc3d04f0
2 changed files with 32 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue