On Sat, 2015-03-21 at 19:51 -0400, Ilia Mirkin wrote: > On Sat, Mar 21, 2015 at 5:49 AM, Timothy Arceri <t_arc...@yahoo.com.au> wrote: > > Adds support for linking AoA interface blocks > > which countain unsized arrays > > --- > > 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 54656f8..2e1442f 100644 > > --- a/src/glsl/ir.cpp > > +++ b/src/glsl/ir.cpp > > @@ -1663,8 +1663,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 0c44677..eb25163 100644 > > --- a/src/glsl/linker.cpp > > +++ b/src/glsl/linker.cpp > > @@ -1201,7 +1201,9 @@ public: > > > > virtual ir_visitor_status visit(ir_variable *var) > > { > > + const glsl_type *type_without_array; > > fixup_type(&var->type, var->data.max_array_access); > > + type_without_array = var->type->without_array(); > > if (var->type->is_interface()) { > > if (interface_contains_unsized_arrays(var->type)) { > > const glsl_type *new_type = > > @@ -1210,11 +1212,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()); > > Will this work? I assume this max_ifc_array_access will only take one > dimension into account, whereas you want several...
max_ifc_array_access is just used to give the unsized dimension (which can only be outermost dimension) a size. So we only need to worry about that one dimension. > > > var->change_interface_type(new_type); > > var->type = > > -- > > 2.1.0 > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev