Mesa (master): zink: break out sized uint array construction into util function
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Mar 17 01:33:53 UTC 2021
Module: Mesa
Branch: master
Commit: eeb23b15eb04c2179fccebb1b912ba5f92a9a1f4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eeb23b15eb04c2179fccebb1b912ba5f92a9a1f4
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri Dec 4 12:17:13 2020 -0500
zink: break out sized uint array construction into util function
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9624>
---
.../drivers/zink/nir_to_spirv/nir_to_spirv.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
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 16200a12cfc..3552bda2b6f 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
@@ -868,20 +868,28 @@ emit_image(struct ntv_context *ctx, struct nir_variable *var)
spirv_builder_emit_binding(&ctx->builder, var_id, binding);
}
+static SpvId
+get_sized_uint_array_type(struct ntv_context *ctx, unsigned array_size)
+{
+ SpvId array_length = emit_uint_const(ctx, 32, array_size);
+ SpvId array_type = spirv_builder_type_array(&ctx->builder, get_uvec_type(ctx, 32, 1),
+ array_length);
+ spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
+ return array_type;
+}
+
static SpvId
get_bo_array_type(struct ntv_context *ctx, struct nir_variable *var)
{
SpvId array_type;
SpvId uint_type = spirv_builder_type_uint(&ctx->builder, 32);
- uint32_t array_size = glsl_count_attribute_slots(var->interface_type, false);
- if (glsl_type_is_unsized_array(var->type))
+ if (glsl_type_is_unsized_array(var->type)) {
array_type = spirv_builder_type_runtime_array(&ctx->builder, uint_type);
- else {
- SpvId array_length = emit_uint_const(ctx, 32, array_size * 4);
- array_type = spirv_builder_type_array(&ctx->builder, uint_type,
- array_length);
+ spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
+ } else {
+ uint32_t array_size = glsl_count_attribute_slots(var->interface_type, false);
+ array_type = get_sized_uint_array_type(ctx, array_size * 4);
}
- spirv_builder_emit_array_stride(&ctx->builder, array_type, 4);
return array_type;
}
More information about the mesa-commit
mailing list