Mesa (master): st/mesa: call nir_lower_flrp only once per shader

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 4 21:51:06 UTC 2019


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Fri Oct 25 00:15:37 2019 -0400

st/mesa: call nir_lower_flrp only once per shader

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

---

 src/compiler/shader_info.h                |  3 +++
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 35 +++++++++++++++++--------------
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index cc33899ad3e..339aee551eb 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -162,6 +162,9 @@ typedef struct shader_info {
    /** Was this shader linked with any transform feedback varyings? */
    bool has_transform_feedback_varyings;
 
+   /* Whether flrp has been lowered. */
+   bool flrp_lowered;
+
    /* SPV_KHR_float_controls: execution mode for floating point ops */
    unsigned float_controls_execution_mode;
 
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index e7b5060cfa9..5aa47a42b2a 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -244,10 +244,6 @@ void
 st_nir_opts(nir_shader *nir)
 {
    bool progress;
-   unsigned lower_flrp =
-      (nir->options->lower_flrp16 ? 16 : 0) |
-      (nir->options->lower_flrp32 ? 32 : 0) |
-      (nir->options->lower_flrp64 ? 64 : 0);
 
    do {
       progress = false;
@@ -290,23 +286,30 @@ st_nir_opts(nir_shader *nir)
       NIR_PASS(progress, nir, nir_opt_algebraic);
       NIR_PASS(progress, nir, nir_opt_constant_folding);
 
-      if (lower_flrp != 0) {
-         bool lower_flrp_progress = false;
-
-         NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp,
-                  lower_flrp,
-                  false /* always_precise */,
-                  nir->options->lower_ffma);
-         if (lower_flrp_progress) {
-            NIR_PASS(progress, nir,
-                     nir_opt_constant_folding);
-            progress = true;
+      if (!nir->info.flrp_lowered) {
+         unsigned lower_flrp =
+            (nir->options->lower_flrp16 ? 16 : 0) |
+            (nir->options->lower_flrp32 ? 32 : 0) |
+            (nir->options->lower_flrp64 ? 64 : 0);
+
+         if (lower_flrp) {
+            bool lower_flrp_progress = false;
+
+            NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp,
+                     lower_flrp,
+                     false /* always_precise */,
+                     nir->options->lower_ffma);
+            if (lower_flrp_progress) {
+               NIR_PASS(progress, nir,
+                        nir_opt_constant_folding);
+               progress = true;
+            }
          }
 
          /* Nothing should rematerialize any flrps, so we only need to do this
           * lowering once.
           */
-         lower_flrp = 0;
+         nir->info.flrp_lowered = true;
       }
 
       NIR_PASS(progress, nir, nir_opt_undef);




More information about the mesa-commit mailing list