From e200ce099623a1b0a076ed3def3865a968503dbc Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Mon, 7 Dec 2020 14:44:15 +0000 Subject: [PATCH] nir/lower_io: fix array_length lowering if buffer is smaller than offset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matches SPIR-V -> NIR implementation of OpArrayLength. Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/compiler/nir/nir_lower_io.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 2a0d98d8af4..22d319f74c3 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -1986,9 +1986,9 @@ lower_explicit_io_array_length(nir_builder *b, nir_intrinsic_instr *intrin, nir_ssa_def *index = addr_to_index(b, addr, addr_format); nir_ssa_def *offset = addr_to_offset(b, addr, addr_format); - nir_ssa_def *arr_size = - nir_idiv(b, nir_isub(b, nir_get_ssbo_size(b, index), offset), - nir_imm_int(b, stride)); + nir_ssa_def *arr_size = nir_get_ssbo_size(b, index); + arr_size = nir_imax(b, nir_isub(b, arr_size, offset), nir_imm_int(b, 0u)); + arr_size = nir_idiv(b, arr_size, nir_imm_int(b, stride)); nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_src_for_ssa(arr_size)); nir_instr_remove(&intrin->instr);