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

Author: Gert Wollny <[email protected]>
Date:   Sun Apr 24 14:25:45 2022 +0200

r600: tune nir options

* Don't lower fp64 to software when on Cayman but
* lower fpow only when on native NIR, the TGSI backend handles
  TGSI_OPCODE_POW

Fixes: a4840e15ab77b44a72cabd7d503172e8357477eb
  r600: Use nir-to-tgsi instead of TGSI when the NIR debug opt is disabled.

Signed-off-by: Gert Wollny <[email protected]>
Reviewed-by: Emma Anholt <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16130>

---

 src/gallium/drivers/r600/r600_pipe_common.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe_common.c 
b/src/gallium/drivers/r600/r600_pipe_common.c
index 4e3a384422b..acb5551c8d6 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.c
+++ b/src/gallium/drivers/r600/r600_pipe_common.c
@@ -1330,13 +1330,10 @@ bool r600_common_screen_init(struct r600_common_screen 
*rscreen,
                .fuse_ffma64 = true,
                .lower_flrp32 = true,
                .lower_flrp64 = true,
-               .lower_fpow = true,
                .lower_fdiv = true,
                .lower_isign = true,
                .lower_fsign = true,
                .lower_fmod = true,
-               .lower_doubles_options = nir_lower_fp64_full_software,
-               .lower_int64_options = ~0,
                .lower_extract_byte = true,
                .lower_extract_word = true,
                .lower_insert_byte = true,
@@ -1362,12 +1359,31 @@ bool r600_common_screen_init(struct r600_common_screen 
*rscreen,
 
        rscreen->nir_options = nir_options;
 
+        /* The TGSI code path handles OPCODE_POW, but has problems with the
+         * lowered version, the NIT code path does the rightthing with the
+         * lowered code */
+        rscreen->nir_options.lower_fpow = rscreen->debug_flags & 
DBG_NIR_PREFERRED;
+
        if (rscreen->info.chip_class < EVERGREEN) {
                /* Pre-EG doesn't have these ALU ops */
                rscreen->nir_options.lower_bit_count = true;
                rscreen->nir_options.lower_bitfield_reverse = true;
        }
 
+        if (rscreen->info.chip_class < CAYMAN) {
+           rscreen->nir_options.lower_doubles_options = 
nir_lower_fp64_full_software;
+           rscreen->nir_options.lower_int64_options = ~0;
+        } else {
+           rscreen->nir_options.lower_doubles_options =
+                 nir_lower_ddiv |
+                 nir_lower_dfloor |
+                 nir_lower_dceil |
+                 nir_lower_dmod |
+                 nir_lower_dsub |
+                 nir_lower_dtrunc;
+           rscreen->nir_options.lower_int64_options = ~0;
+        }
+
        if (!(rscreen->debug_flags & DBG_NIR_PREFERRED)) {
                /* TGSI is vector, and NIR-to-TGSI doesn't like it when the
                 * input vars have been scalarized.

Reply via email to