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: 2e833b16bc ("nir/lower_amul: Use num_ubos/ssbos instead of recomputing it.")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31611>
This commit is contained in:
Rob Clark 2024-10-07 09:46:02 -07:00 committed by Marge Bot
parent e548f90edb
commit 7f63fa34da

View file

@ -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;
}
}
}
}