Mesa (staging/21.3): spirv: Don't add 0.5 to array indicies for OpImageSampleExplicitLod
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 20:57:13 UTC 2021
Module: Mesa
Branch: staging/21.3
Commit: 0343faea2a510c791a6391b5cda6b89b91e623c2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0343faea2a510c791a6391b5cda6b89b91e623c2
Author: Karol Herbst <kherbst at redhat.com>
Date: Tue Nov 3 17:41:53 2020 +0100
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 <jason at jlekstrand.net>
Signed-off-by: Karol Herbst <kherbst at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13401>
(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 add427b9333..166ea34f9ed 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -355,7 +355,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;
More information about the mesa-commit
mailing list