From 7f63fa34da9847a6891207cf309bdaf76878bfc6 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 7 Oct 2024 09:46:02 -0700 Subject: [PATCH] nir/lower_amul: Fix ASAN error We shouldn't assume the bindings are sparse when we allocate an array indexed on the binding. See, for example: dEQP-GLES31.functional.program_interface_query.buffer_variable.random.55 Fixes: 2e833b16bca6 ("nir/lower_amul: Use num_ubos/ssbos instead of recomputing it.") Signed-off-by: Rob Clark Part-of: --- src/compiler/nir/nir_lower_amul.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir_lower_amul.c b/src/compiler/nir/nir_lower_amul.c index f95adc45b30..b47ed88e5aa 100644 --- a/src/compiler/nir/nir_lower_amul.c +++ b/src/compiler/nir/nir_lower_amul.c @@ -220,15 +220,21 @@ nir_lower_amul(nir_shader *shader, if (is_large(&state, var)) { state.has_large_ubo = true; unsigned size = MAX2(1, glsl_array_size(var->type)); - for (unsigned i = 0; i < size; i++) - state.large_ubos[var->data.binding + i] = true; + for (unsigned i = 0; i < size; i++) { + unsigned idx = var->data.driver_location + i; + assert(idx < shader->info.num_ubos); + state.large_ubos[idx] = true; + } } } else if (var->data.mode == nir_var_mem_ssbo) { if (is_large(&state, var)) { state.has_large_ssbo = true; unsigned size = MAX2(1, glsl_array_size(var->type)); - for (unsigned i = 0; i < size; i++) - state.large_ssbos[var->data.binding + i] = true; + for (unsigned i = 0; i < size; i++) { + unsigned idx = var->data.location + i; + assert(idx < shader->info.num_ssbos); + state.large_ssbos[idx] = true; + } } } }