[Mesa-dev] [PATCH] spirv: Fix structure splitting with per-vertex interface arrays.
Jason Ekstrand
jason at jlekstrand.net
Tue Mar 15 00:23:44 UTC 2016
On Sun, Mar 13, 2016 at 6:08 PM, Kenneth Graunke <kenneth at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160314/99ca0674/attachment.html>
More information about the mesa-dev
mailing list