[Mesa-dev] [PATCH 05/24] glsl: add helper for calculating size of AoA

Timothy Arceri t_arceri at yahoo.com.au
Thu Sep 17 00:02:49 PDT 2015


V2: return 0 if not array rather than -1

Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/glsl/glsl_types.h | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index 860276a..b29c57b 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -558,6 +558,25 @@ struct glsl_type {
    }
 
    /**
+    * Return the total number of elements in an array including the elements
+    * in arrays of arrays.
+    */
+   unsigned arrays_of_arrays_size() const
+   {
+      if (!is_array())
+         return 0;
+
+      unsigned size = length;
+      const glsl_type *base_type = fields.array;
+
+      while (base_type->is_array()) {
+         size = size * base_type->length;
+         base_type = base_type->fields.array;
+      }
+      return size;
+   }
+
+   /**
     * Return the amount of atomic counter storage required for a type.
     */
    unsigned atomic_size() const
-- 
2.4.3



More information about the mesa-dev mailing list