diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index bfa055268a4..100fca04696 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -246,6 +246,17 @@ get_glsl_type(struct ntv_context *ctx, const struct glsl_type *type) spirv_builder_emit_array_stride(&ctx->builder, ret, stride); return ret; } + if (glsl_type_is_struct_or_ifc(type)) { + SpvId types[glsl_get_length(type)]; + for (unsigned i = 0; i < glsl_get_length(type); i++) + types[i] = get_glsl_type(ctx, glsl_get_struct_field(type, i)); + SpvId ret = spirv_builder_type_struct(&ctx->builder, + types, + glsl_get_length(type)); + for (unsigned i = 0; i < glsl_get_length(type); i++) + spirv_builder_emit_member_offset(&ctx->builder, ret, i, glsl_get_struct_field_offset(type, i)); + return ret; + } if (glsl_type_is_matrix(type)) return spirv_builder_type_matrix(&ctx->builder,