Reviewed-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com>
On 07/10/15 00:47, Timothy Arceri wrote: > This allows the correct offset to be calculated for use in indirect > indexing of samplers. > --- > src/glsl/glsl_types.cpp | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp > index 25927f6..a1ee505 100644 > --- a/src/glsl/glsl_types.cpp > +++ b/src/glsl/glsl_types.cpp > @@ -1071,7 +1071,22 @@ glsl_type::record_location_offset(unsigned length) > const > const glsl_type *wa = st->without_array(); > if (wa->is_record()) { > unsigned r_offset = wa->record_location_offset(wa->length); > - offset += st->is_array() ? st->length * r_offset : r_offset; > + offset += st->is_array() ? > + st->arrays_of_arrays_size() * r_offset : r_offset; > + } else if (st->is_array() && st->fields.array->is_array()) { > + unsigned outer_array_size = st->length; > + const glsl_type *base_type = st->fields.array; > + > + /* For arrays of arrays the outer arrays take up a uniform > + * slot for each element. The innermost array elements share a > + * single slot so we ignore the innermost array when calculating > + * the offset. > + */ > + while (base_type->fields.array->is_array()) { > + outer_array_size = outer_array_size * base_type->length; > + base_type = base_type->fields.array; > + } > + offset += outer_array_size; > } else { > /* We dont worry about arrays here because unless the array > * contains a structure or another array it only takes up a > single > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev