From 39f4ef57d69dd6dad74565db82c519e900998153 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Thu, 17 Jan 2019 13:20:54 +0100 Subject: [PATCH] nir_types: add glsl_type_is_leaf helper MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Antia Puentes 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 --- src/compiler/nir_types.cpp | 13 +++++++++++++ src/compiler/nir_types.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp index 69f89a7..3b6362e 100644 --- a/src/compiler/nir_types.cpp +++ b/src/compiler/nir_types.cpp @@ -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; + } +} diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h index 806ba82..9efe4b4 100644 --- a/src/compiler/nir_types.h +++ b/src/compiler/nir_types.h @@ -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 -- 2.7.4