nir_types: add glsl_type_is_leaf helper
Helper used to know when a glsl_type is a leaf when iteraring through a complex type. Note that GLSL IR linking also uses the concept of leaf while doing the same iteration, although in that case it uses a visitor. See link_uniform_blocks, process_array_leaf and others as reference. Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com> Signed-off-by: Antia Puentes <apuentes@igalia.com> v2: * Moved from gl_nir_linker to nir_types, so it could be used on nir xfb gathering (Timothy Arceri) * Minor update after Timothy's series about record to struct renaming landed master. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
committed by
Arcady Goldmints-Orlov
parent
0019d61527
commit
39f4ef57d6
@@ -727,3 +727,16 @@ glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride)
|
||||
{
|
||||
return type->explicit_size(align_to_stride);
|
||||
}
|
||||
|
||||
bool
|
||||
glsl_type_is_leaf(const struct glsl_type *type)
|
||||
{
|
||||
if (glsl_type_is_struct_or_ifc(type) ||
|
||||
(glsl_type_is_array(type) &&
|
||||
(glsl_type_is_array(glsl_get_array_element(type)) ||
|
||||
glsl_type_is_struct_or_ifc(glsl_get_array_element(type))))) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,6 +202,8 @@ const struct glsl_type *glsl_atomic_uint_type(void);
|
||||
unsigned glsl_type_get_sampler_count(const struct glsl_type *type);
|
||||
unsigned glsl_type_get_image_count(const struct glsl_type *type);
|
||||
|
||||
bool glsl_type_is_leaf(const struct glsl_type *type);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user