zink: create entrypoints for descriptor variables with spirv 1.5

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10512>
This commit is contained in:
Mike Blumenkrantz 2021-03-23 10:51:38 -04:00 committed by Marge Bot
parent 3bf52471cc
commit 1ff40cedf0
1 changed files with 18 additions and 1 deletions

View File

@ -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);