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>
(cherry picked from commit ab3a72cc20)
This commit is contained in:
Icecream95 2021-04-07 23:43:05 +12:00 committed by Eric Engestrom
parent 7a8e3ca3be
commit a24924bb60
2 changed files with 9 additions and 6 deletions

View file

@ -463,7 +463,7 @@
"description": "pan/bi: Skip nir_opt_move/sink for blend shaders",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "52863f2e60fae865ef6a2a2e5a385b252c73364c"
},

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);