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: 52863f2e60 ("pan/bi: Enable all nir_opt_move/sink optimizations")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10089>
This commit is contained in:
Icecream95
2021-04-07 23:43:05 +12:00
committed by Marge Bot
parent abcefaffb1
commit ab3a72cc20
+8 -5
View File
@@ -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);