From ca9c01ddc5ffd66cb264ea33d5d939e16b5e1ad6 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Wed, 10 Jun 2026 08:16:12 +0200 Subject: [PATCH] nir/lower_ssbo: take offset_shift into account Signed-off-by: Job Noorman Reviewed-by: Emma Anholt Part-of: --- src/compiler/nir/nir_lower_ssbo.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_lower_ssbo.c b/src/compiler/nir/nir_lower_ssbo.c index 161ab7fe16a..95cedd5db9a 100644 --- a/src/compiler/nir/nir_lower_ssbo.c +++ b/src/compiler/nir/nir_lower_ssbo.c @@ -12,13 +12,20 @@ * load_ssbo_address. Run nir_lower_robust_access first for bounds checks. */ +static nir_def * +get_offset(nir_builder *b, nir_intrinsic_instr *intr) +{ + return nir_ishl_imm(b, nir_get_io_offset_src(intr)->ssa, + nir_intrinsic_offset_shift(intr)); +} + static nir_def * calc_address(nir_builder *b, nir_intrinsic_instr *intr, const nir_lower_ssbo_options *opts) { unsigned index_src = intr->intrinsic == nir_intrinsic_store_ssbo ? 1 : 0; bool lower_offset = !opts || !opts->native_offset; - nir_def *offset = nir_get_io_offset_src(intr)->ssa; + nir_def *offset = get_offset(b, intr); nir_def *addr = nir_load_ssbo_address(b, 1, 64, intr->src[index_src].ssa, lower_offset ? nir_imm_int(b, 0) : offset);