Mesa (master): prog_to_nir, tgsi_to_nir: make sure kill doesn't discard NaNs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 11 14:59:51 UTC 2019


Module: Mesa
Branch: master
Commit: b97c5edd7aa31fb531a330742a9e20064591fec2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b97c5edd7aa31fb531a330742a9e20064591fec2

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Fri Sep  6 14:01:51 2019 -0400

prog_to_nir, tgsi_to_nir: make sure kill doesn't discard NaNs

Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>

---

 src/gallium/auxiliary/nir/tgsi_to_nir.c | 4 ++++
 src/mesa/program/prog_to_nir.c          | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index b70e608ddf7..a8c798f9015 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -1109,7 +1109,11 @@ ttn_kill(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
 static void
 ttn_kill_if(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
 {
+   /* flt must be exact, because NaN shouldn't discard. (apps rely on this) */
+   b->exact = true;
    nir_ssa_def *cmp = nir_bany(b, nir_flt(b, src[0], nir_imm_float(b, 0.0)));
+   b->exact = false;
+
    nir_intrinsic_instr *discard =
       nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if);
    discard->src[0] = nir_src_for_ssa(cmp);
diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c
index a5ac37af908..84ba708d0be 100644
--- a/src/mesa/program/prog_to_nir.c
+++ b/src/mesa/program/prog_to_nir.c
@@ -456,7 +456,10 @@ ptn_lrp(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src)
 static void
 ptn_kil(nir_builder *b, nir_ssa_def **src)
 {
+   /* flt must be exact, because NaN shouldn't discard. (apps rely on this) */
+   b->exact = true;
    nir_ssa_def *cmp = nir_bany(b, nir_flt(b, src[0], nir_imm_float(b, 0.0)));
+   b->exact = false;
 
    nir_intrinsic_instr *discard =
       nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if);




More information about the mesa-commit mailing list