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:
Alejandro Piñeiro 2019-01-17 13:20:54 +01:00 committed by Arcady Goldmints-Orlov
parent 0019d61527
commit 39f4ef57d6
2 changed files with 15 additions and 0 deletions

View file

@ -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;
}
}

View file

@ -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