glsl: Add unsized array support to glsl_type::std140_size()
authorSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Mon, 21 Sep 2015 07:09:11 +0000 (09:09 +0200)
committerSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Fri, 25 Sep 2015 06:39:21 +0000 (08:39 +0200)
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
src/glsl/glsl_types.cpp

index b4525eb9cf2695615b6894ff5850d6f825b850b6..07d72489057ed92ded7c6fe13da8f922f131a552 100644 (file)
@@ -1351,7 +1351,7 @@ glsl_type::std140_size(bool row_major) const
     *     rounded up to the next multiple of the base alignment of the
     *     structure.
     */
-   if (this->is_record()) {
+   if (this->is_record() || this->is_interface()) {
       unsigned size = 0;
       unsigned max_align = 0;
 
@@ -1367,6 +1367,11 @@ glsl_type::std140_size(bool row_major) const
 
          const struct glsl_type *field_type = this->fields.structure[i].type;
          unsigned align = field_type->std140_base_alignment(field_row_major);
+
+         /* Ignore unsized arrays when calculating size */
+         if (field_type->is_unsized_array())
+            continue;
+
          size = glsl_align(size, align);
          size += field_type->std140_size(field_row_major);