On Sun, Mar 13, 2016 at 6:08 PM, Kenneth Graunke <kenn...@whitecape.org> wrote:
> We want to use interface_type, not vtn_var->type. They're normally > equivalent, but for geometry/tessellation per-vertex interface arrays, > we need to unwrap a level. > > Otherwise, we tried to iterate a structure members but instead used > an array length. If the array length was longer than the number of > fields in the structure, we'd crash. > --- > src/compiler/nir/spirv/vtn_variables.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/compiler/nir/spirv/vtn_variables.c > b/src/compiler/nir/spirv/vtn_variables.c > index 31bf416..1628042 100644 > --- a/src/compiler/nir/spirv/vtn_variables.c > +++ b/src/compiler/nir/spirv/vtn_variables.c > @@ -923,7 +923,7 @@ var_decoration_cb(struct vtn_builder *b, struct > vtn_value *val, int member, > vtn_var->var->data.explicit_location = true; > } else { > assert(vtn_var->members); > - unsigned length = glsl_get_length(vtn_var->type->type); > + unsigned length = glsl_get_length(val->type->type); > Good catch. What I think we really want here though is a "without_array" helper. I'm not a huge fan of grabbing the type from the value because that comes in from the client and I don't really trust it. > for (unsigned i = 0; i < length; i++) { > vtn_var->members[i]->data.location = location; > vtn_var->members[i]->data.explicit_location = true; > -- > 2.7.2 > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev