[Mesa-dev] [PATCH V6 19/27] glsl: add AoA support for linking interface blocks with unsized members

Ian Romanick idr at freedesktop.org
Tue Oct 6 13:16:36 PDT 2015


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 09/28/2015 07:42 PM, Timothy Arceri wrote:
> ---
>  src/glsl/ir.cpp     | 4 ++--
>  src/glsl/linker.cpp | 9 +++++----
>  2 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
> index 2c45b9e..ee80abb 100644
> --- a/src/glsl/ir.cpp
> +++ b/src/glsl/ir.cpp
> @@ -1673,8 +1673,8 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
>  
>        if (type->is_interface())
>           this->init_interface_type(type);
> -      else if (type->is_array() && type->fields.array->is_interface())
> -         this->init_interface_type(type->fields.array);
> +      else if (type->without_array()->is_interface())
> +         this->init_interface_type(type->without_array());
>     }
>  }
>  
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index 75396fb..f4f7526 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -1386,8 +1386,10 @@ public:
>  
>     virtual ir_visitor_status visit(ir_variable *var)
>     {
> +      const glsl_type *type_without_array;
>        fixup_type(&var->type, var->data.max_array_access,
>                   var->data.from_ssbo_unsized_array);
> +      type_without_array = var->type->without_array();
>        if (var->type->is_interface()) {
>           if (interface_contains_unsized_arrays(var->type)) {
>              const glsl_type *new_type =
> @@ -1397,11 +1399,10 @@ public:
>              var->type = new_type;
>              var->change_interface_type(new_type);
>           }
> -      } else if (var->type->is_array() &&
> -                 var->type->fields.array->is_interface()) {
> -         if (interface_contains_unsized_arrays(var->type->fields.array)) {
> +      } else if (type_without_array->is_interface()) {
> +         if (interface_contains_unsized_arrays(type_without_array)) {
>              const glsl_type *new_type =
> -               resize_interface_members(var->type->fields.array,
> +               resize_interface_members(type_without_array,
>                                          var->get_max_ifc_array_access(),
>                                          var->is_in_shader_storage_block());
>              var->change_interface_type(new_type);
> 



More information about the mesa-dev mailing list