From 1ff40cedf01dfab6e363f78a674d30cadf60766a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 23 Mar 2021 10:51:38 -0400 Subject: [PATCH] zink: create entrypoints for descriptor variables with spirv 1.5 Reviewed-by: Dave Airlie Part-of: --- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 ffe13dc4b5d..4479cf053c6 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 @@ -397,6 +397,10 @@ create_shared_block(struct ntv_context *ctx, unsigned shared_size) SpvStorageClassWorkgroup, array); ctx->shared_block_var = spirv_builder_emit_var(&ctx->builder, ptr_type, SpvStorageClassWorkgroup); + if (ctx->spirv_15) { + assert(ctx->num_entry_ifaces < ARRAY_SIZE(ctx->entry_ifaces)); + ctx->entry_ifaces[ctx->num_entry_ifaces++] = ctx->shared_block_var; + } } #define HANDLE_EMIT_BUILTIN(SLOT, BUILTIN) \ @@ -419,9 +423,14 @@ input_var_init(struct ntv_context *ctx, struct nir_variable *var) if (var->name) spirv_builder_emit_name(&ctx->builder, var_id, var->name); - if (var->data.mode == nir_var_mem_push_const) + if (var->data.mode == nir_var_mem_push_const) { ctx->push_const_var = var_id; + if (ctx->spirv_15) { + assert(ctx->num_entry_ifaces < ARRAY_SIZE(ctx->entry_ifaces)); + ctx->entry_ifaces[ctx->num_entry_ifaces++] = var_id; + } + } return var_id; } @@ -821,6 +830,10 @@ emit_image(struct ntv_context *ctx, struct nir_variable *var) _mesa_hash_table_insert(ctx->image_vars, key, var); emit_access_decorations(ctx, var, var_id); } + if (ctx->spirv_15) { + assert(ctx->num_entry_ifaces < ARRAY_SIZE(ctx->entry_ifaces)); + ctx->entry_ifaces[ctx->num_entry_ifaces++] = var_id; + } spirv_builder_emit_descriptor_set(&ctx->builder, var_id, var->data.descriptor_set); spirv_builder_emit_binding(&ctx->builder, var_id, var->data.binding); @@ -909,6 +922,10 @@ emit_bo(struct ntv_context *ctx, struct nir_variable *var) assert(!ctx->ubos[var->data.driver_location]); ctx->ubos[var->data.driver_location] = var_id; } + if (ctx->spirv_15) { + assert(ctx->num_entry_ifaces < ARRAY_SIZE(ctx->entry_ifaces)); + ctx->entry_ifaces[ctx->num_entry_ifaces++] = var_id; + } spirv_builder_emit_descriptor_set(&ctx->builder, var_id, var->data.descriptor_set); spirv_builder_emit_binding(&ctx->builder, var_id, var->data.binding);