glsl: add std140 layout support for AoA

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Timothy Arceri
2015-09-18 22:51:40 +10:00
parent 176e6930e6
commit 261a434996
+8 -7
View File
@@ -1330,8 +1330,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;
@@ -1364,12 +1364,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);
unsigned element_base_align =
this->without_array()->std140_base_alignment(row_major);
return this->arrays_of_arrays_size() * MAX2(element_base_align, 16);
}
}