From 6d7ea0f0202b47f1c2ab545bfa2c4a33e65997a4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 17 Dec 2020 11:12:49 -0500 Subject: [PATCH] zink: add struct type support for ntv also interface types since they're the same Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 11 +++++++++++ 1 file changed, 11 insertions(+) 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,