mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 02:50:16 +01:00
glsl_type: Add method to get number of slots used by a type
This commit is contained in:
parent
13e10e43c3
commit
57bb893a46
2 changed files with 37 additions and 0 deletions
|
|
@ -732,3 +732,31 @@ glsl_type::field_index(const char *name) const
|
|||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
glsl_type::component_slots() const
|
||||
{
|
||||
switch (this->base_type) {
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_BOOL:
|
||||
return this->components();
|
||||
|
||||
case GLSL_TYPE_STRUCT: {
|
||||
unsigned size = 0;
|
||||
|
||||
for (unsigned i = 0; i < this->length; i++)
|
||||
size += this->fields.structure[i].type->component_slots();
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
case GLSL_TYPE_ARRAY:
|
||||
return this->length * this->fields.array->component_slots();
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,6 +214,15 @@ struct glsl_type {
|
|||
return vector_elements * matrix_columns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the number of components slots required to hold this type
|
||||
*
|
||||
* This is used to determine how many uniform or varying locations a type
|
||||
* might occupy.
|
||||
*/
|
||||
unsigned component_slots() const;
|
||||
|
||||
|
||||
/**
|
||||
* Query whether or not a type is a scalar (non-vector and non-matrix).
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue