---
 I noticed this problem after adding AoA support [1] to Ian's random UBO test
 script [2].

 [1] http://patchwork.freedesktop.org/patch/59956/
 [2] http://cgit.freedesktop.org/~idr/piglit/log/?h=ubo-lolz

 src/glsl/glsl_types.cpp | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 86f0ea5..952bd0a 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -1310,8 +1310,8 @@ glsl_type::std140_size(bool row_major) const
       unsigned int array_len;
 
       if (this->is_array()) {
-        element_type = this->fields.array;
-        array_len = this->length;
+        element_type = this->without_array();
+        array_len = this->arrays_of_arrays_size();
       } else {
         element_type = this;
         array_len = 1;
@@ -1344,12 +1344,13 @@ glsl_type::std140_size(bool row_major) const
     *      the array are laid out in order, according to rule (9).
     */
    if (this->is_array()) {
-      if (this->fields.array->is_record()) {
-        return this->length * this->fields.array->std140_size(row_major);
+      if (this->without_array()->is_record()) {
+        return this->arrays_of_arrays_size() *
+            this->without_array()->std140_size(row_major);
       } else {
         unsigned element_base_align =
-           this->fields.array->std140_base_alignment(row_major);
-        return this->length * MAX2(element_base_align, 16);
+           this->without_array()->std140_base_alignment(row_major);
+        return this->arrays_of_arrays_size() * MAX2(element_base_align, 16);
       }
    }
 
-- 
2.4.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to