Mesa (main): zink: use the calculated last struct member idx for ssbo size in ntv
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 13 11:01:58 UTC 2022
Module: Mesa
Branch: main
Commit: ff4dcb76d91daa8dcd5389ca9552695e81687e95
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff4dcb76d91daa8dcd5389ca9552695e81687e95
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue Apr 12 09:46:32 2022 -0400
zink: use the calculated last struct member idx for ssbo size in ntv
this may or may not be 1
cc: mesa-stable
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15894>
---
src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 4 ++--
1 file changed, 2 insertions(+), 2 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 1fb67aa2c71..badb02b795f 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
@@ -2553,15 +2553,15 @@ emit_get_ssbo_size(struct ntv_context *ctx, nir_intrinsic_instr *intr)
nir_const_value *const_block_index = nir_src_as_const_value(intr->src[0]);
assert(const_block_index); // no dynamic indexing for now
nir_variable *var = ctx->ssbo_vars[const_block_index->u32];
+ unsigned last_member_idx = glsl_get_length(var->interface_type) - 1;
SpvId result = spirv_builder_emit_binop(&ctx->builder, SpvOpArrayLength, uint_type,
- ctx->ssbos[const_block_index->u32][2], 1);
+ ctx->ssbos[const_block_index->u32][2], last_member_idx);
/* this is going to be converted by nir to:
length = (buffer_size - offset) / stride
* so we need to un-convert it to avoid having the calculation performed twice
*/
- unsigned last_member_idx = glsl_get_length(var->interface_type) - 1;
const struct glsl_type *last_member = glsl_get_struct_field(var->interface_type, last_member_idx);
/* multiply by stride */
result = emit_binop(ctx, SpvOpIMul, uint_type, result, emit_uint_const(ctx, 32, glsl_get_explicit_stride(last_member)));
More information about the mesa-commit
mailing list