glsl: add helper for counting varyings
This will be used to get a count of the number of varying name strings we are required to generate for use with the query api. Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -1350,6 +1350,38 @@ glsl_type::uniform_locations() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
glsl_type::varying_count() const
|
||||||
|
{
|
||||||
|
unsigned size = 0;
|
||||||
|
|
||||||
|
switch (this->base_type) {
|
||||||
|
case GLSL_TYPE_UINT:
|
||||||
|
case GLSL_TYPE_INT:
|
||||||
|
case GLSL_TYPE_FLOAT:
|
||||||
|
case GLSL_TYPE_DOUBLE:
|
||||||
|
case GLSL_TYPE_BOOL:
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case GLSL_TYPE_STRUCT:
|
||||||
|
case GLSL_TYPE_INTERFACE:
|
||||||
|
for (unsigned i = 0; i < this->length; i++)
|
||||||
|
size += this->fields.structure[i].type->varying_count();
|
||||||
|
return size;
|
||||||
|
case GLSL_TYPE_ARRAY:
|
||||||
|
/* Don't count innermost array elements */
|
||||||
|
if (this->without_array()->is_record() ||
|
||||||
|
this->without_array()->is_interface() ||
|
||||||
|
this->fields.array->is_array())
|
||||||
|
return this->length * this->fields.array->varying_count();
|
||||||
|
else
|
||||||
|
return this->fields.array->varying_count();
|
||||||
|
default:
|
||||||
|
assert(!"unsupported varying type");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
glsl_type::can_implicitly_convert_to(const glsl_type *desired,
|
glsl_type::can_implicitly_convert_to(const glsl_type *desired,
|
||||||
_mesa_glsl_parse_state *state) const
|
_mesa_glsl_parse_state *state) const
|
||||||
|
@@ -326,6 +326,12 @@ struct glsl_type {
|
|||||||
*/
|
*/
|
||||||
unsigned uniform_locations() const;
|
unsigned uniform_locations() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to count the number of varyings contained in the type ignoring
|
||||||
|
* innermost array elements.
|
||||||
|
*/
|
||||||
|
unsigned varying_count() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the number of attribute slots required to hold this type
|
* Calculate the number of attribute slots required to hold this type
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user