From 574c5c70de3a2ca02ab244fc097860dbab48ce15 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 12 Jun 2024 10:56:01 -0400 Subject: [PATCH] nir/lower_robust_access: handle MSAA images We need to check the sample too. fixes on Honeykrisp with MSAA storage images: dEQP-VK.robustness.robustness2.bind.notemplate.r32i.dontunroll.nonvolatile.storage_image.fmt_qual.img.samples_4.2d_array.comp Signed-off-by: Alyssa Rosenzweig Reviewed-by: Iago Toral Quiroga Part-of: --- src/compiler/nir/nir_lower_robust_access.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_lower_robust_access.c b/src/compiler/nir/nir_lower_robust_access.c index ffd3c980c98..4aefaf3652a 100644 --- a/src/compiler/nir/nir_lower_robust_access.c +++ b/src/compiler/nir/nir_lower_robust_access.c @@ -149,8 +149,22 @@ lower_image(nir_builder *b, size = nir_vec3(b, nir_channel(b, size, 0), nir_channel(b, size, 1), z); } + nir_def *in_bounds = nir_ball(b, nir_ult(b, coord, size)); + + if (dim == GLSL_SAMPLER_DIM_MS) { + nir_def *sample = instr->src[2].ssa; + nir_def *samples = nir_image_samples(b, 32, instr->src[0].ssa, + .image_array = is_array, .image_dim = dim); + if (deref) { + nir_instr_as_intrinsic(samples->parent_instr)->intrinsic = + nir_intrinsic_image_deref_samples; + } + + in_bounds = nir_iand(b, in_bounds, nir_ult(b, sample, samples)); + } + /* Only execute if coordinates are in-bounds. Otherwise, return zero. */ - wrap_in_if(b, instr, nir_ball(b, nir_ult(b, coord, size))); + wrap_in_if(b, instr, in_bounds); return true; }