From 7456331987e3209519915615ac310e574a796544 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: (cherry picked from commit f6ecd284e5dee852a87bdc77a1fab625d061b440) --- .pick_status.json | 2 +- src/compiler/spirv/spirv_to_nir.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index d569b0f182f..082335430e4 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -958,7 +958,7 @@ "description": "spirv: Don't add 0.5 to array indicies for OpImageSampleExplicitLod", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "589d918a4f9da83e3ae441aa674372a141d23349" }, diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 26e7582bed5..71cdc834e86 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2825,9 +2825,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;