Mesa (master): pan/bi: Skip nir_opt_move/sink for blend shaders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 22 23:27:34 UTC 2021


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

Author: Icecream95 <ixn at disroot.org>
Date:   Wed Apr  7 23:43:05 2021 +1200

pan/bi: Skip nir_opt_move/sink for blend shaders

Otherwise the dual-source input load is moved further down in the
shader, so the registers can get clobbered before then.

Fixes text not being visible in Alacritty.

Fixes: 52863f2e60f ("pan/bi: Enable all nir_opt_move/sink optimizations")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10089>

---

 src/panfrost/bifrost/bifrost_compile.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c
index c99b6da4566..a0c21ceef57 100644
--- a/src/panfrost/bifrost/bifrost_compile.c
+++ b/src/panfrost/bifrost/bifrost_compile.c
@@ -2814,7 +2814,7 @@ should_split_wrmask(const nir_instr *instr, UNUSED const void *data)
 }
 
 static void
-bi_optimize_nir(nir_shader *nir)
+bi_optimize_nir(nir_shader *nir, bool is_blend)
 {
         bool progress;
         unsigned lower_flrp = 16 | 32 | 64;
@@ -2908,13 +2908,16 @@ bi_optimize_nir(nir_shader *nir)
         NIR_PASS(progress, nir, nir_lower_alu_to_scalar, NULL, NULL);
 
         /* Backend scheduler is purely local, so do some global optimizations
-         * to reduce register pressure */
+         * to reduce register pressure.  Skip the passes for blend shaders to
+         * workaround the lack of precolouring. */
         nir_move_options move_all =
                 nir_move_const_undef | nir_move_load_ubo | nir_move_load_input |
                 nir_move_comparisons | nir_move_copies | nir_move_load_ssbo;
 
-        NIR_PASS_V(nir, nir_opt_sink, move_all);
-        NIR_PASS_V(nir, nir_opt_move, move_all);
+        if (!is_blend) {
+                NIR_PASS_V(nir, nir_opt_sink, move_all);
+                NIR_PASS_V(nir, nir_opt_move, move_all);
+        }
 
         NIR_PASS(progress, nir, nir_lower_load_const_to_scalar);
 
@@ -3046,7 +3049,7 @@ bifrost_compile_shader_nir(nir_shader *nir,
         // TODO: re-enable when fp16 is flipped on
         // NIR_PASS_V(nir, nir_lower_mediump_outputs);
 
-        bi_optimize_nir(nir);
+        bi_optimize_nir(nir, ctx->inputs->is_blend);
 
         NIR_PASS_V(nir, pan_nir_reorder_writeout);
 



More information about the mesa-commit mailing list