From f6ecd284e5dee852a87bdc77a1fab625d061b440 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Tue, 3 Nov 2020 17:41:53 +0100 Subject: [PATCH] spirv: Don't add 0.5 to array indicies for OpImageSampleExplicitLod This fixes CLs 1.2 1Darray and 2Darray images. Fixes: 589d918a4f9da83e3ae441aa674372a141d23349 ("spirv: Add 0.5 to integer coordinates for OpImageSampleExplicitLod") Reviewed-by: Jason Ekstrand Signed-off-by: Karol Herbst Part-of: --- src/compiler/spirv/spirv_to_nir.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 84944c5..f78205d 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2832,9 +2832,16 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode, "Unless the Kernel capability is being used, the coordinate parameter " "OpImageSampleExplicitLod must be floating point."); - p->src = nir_src_for_ssa( - nir_fadd(&b->nb, nir_i2f32(&b->nb, p->src.ssa), - nir_imm_float(&b->nb, 0.5))); + nir_ssa_def *coords[4]; + nir_ssa_def *f0_5 = nir_imm_float(&b->nb, 0.5); + for (unsigned i = 0; i < coord_components; i++) { + coords[i] = nir_i2f32(&b->nb, nir_channel(&b->nb, p->src.ssa, i)); + + if (!is_array || i != coord_components - 1) + coords[i] = nir_fadd(&b->nb, coords[i], f0_5); + } + + p->src = nir_src_for_ssa(nir_vec(&b->nb, coords, coord_components)); } p->src_type = nir_tex_src_coord; -- 2.7.4