Commit 742bc53d authored by Kenneth Graunke's avatar Kenneth Graunke

spirv: Fix structure splitting with per-vertex interface arrays.

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.

Fixes the CreatePipelineGeometryInputBlockPositive layer validation

v2: Just use glsl_without_array() on the vtn_var type
    (requested by Jason Ekstrand).
Signed-off-by: Kenneth Graunke's avatarKenneth Graunke <>
Reviewed-by: default avatarChris Forbes <>
parent 1896682d
......@@ -929,7 +929,8 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
vtn_var->var->data.explicit_location = true;
} else {
unsigned length = glsl_get_length(vtn_var->type->type);
unsigned length =
for (unsigned i = 0; i < length; i++) {
vtn_var->members[i]->data.location = location;
vtn_var->members[i]->data.explicit_location = true;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment