[Mesa-dev] [PATCH 3/4] glsl: fix std430's array_stride calculation for AoA

Timothy Arceri t_arceri at yahoo.com.au
Tue Oct 6 04:17:56 PDT 2015


On Tue, 2015-10-06 at 10:26 +0200, Samuel Iglesias Gonsalvez wrote:
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> Cc: Timothy Arceri <t_arceri at yahoo.com.au>
> ---
>  src/glsl/link_uniforms.cpp       | 2 +-
>  src/glsl/lower_ubo_reference.cpp | 6 +++---
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index 93a7df6..ef4a303 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -815,7 +815,7 @@ private:
>           if (type->is_array()) {
>              if (packing == GLSL_INTERFACE_PACKING_STD430)
>                 this->uniforms[id].array_stride =
> -                  type->fields.array
> ->std430_array_stride(row_major);
> +                  type->without_array()
> ->std430_array_stride(row_major);
>              else
>                 this->uniforms[id].array_stride =
>                    glsl_align(type->without_array()
> ->std140_size(row_major), 16);
> diff --git a/src/glsl/lower_ubo_reference.cpp
> b/src/glsl/lower_ubo_reference.cpp
> index f4150df..ea28d21 100644
> --- a/src/glsl/lower_ubo_reference.cpp
> +++ b/src/glsl/lower_ubo_reference.cpp
> @@ -325,17 +325,17 @@
> lower_ubo_reference_visitor::setup_for_load_or_store(ir_variable
> *var,
>        case ir_type_dereference_array: {
>           ir_dereference_array *deref_array = (ir_dereference_array
> *) deref;
>           unsigned array_stride;
> -         if (deref_array->type->without_array()->is_matrix() &&
> *row_major) {
> +         if (deref_array->array->type->is_matrix() && *row_major) {
>              /* When loading a vector out of a row major matrix, the
>               * step between the columns (vectors) is the size of a
>               * float, while the step between the rows (elements of a
>               * vector) is handled below in emit_ubo_loads.
>               */
>              array_stride = 4;
> -            if (deref_array->type->without_array()->is_double())
> +            if (deref_array->array->type->is_double())
>                 array_stride *= 2;
>              *matrix_columns = deref_array->array->type
> ->matrix_columns;
> -         } else if (deref_array->type->without_array()
> ->is_interface()) {
> +         } else if (deref_array->type->is_interface()) {
>              /* We're processing an array dereference of an interface
> instance
>               * array. The thing being dereferenced *must* be a
> variable
>               * dereference because interfaces cannot be embedded in
> other

Your undoing changes from the previous patch in the second hunk. With
that hunk removed. 

This patch is: Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>


More information about the mesa-dev mailing list