From 0e8beb1eed994cc951bf53d90dd4664d2a5b5a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 16 May 2022 09:45:15 -0400 Subject: [PATCH] radeonsi/gfx11: compile monolithic PS if it writes memory Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_state_shaders.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index d2901c61939..1e8e72cd5bf 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -2325,11 +2325,16 @@ void si_ps_key_update_framebuffer_blend(struct si_context *sctx) * Check if any output is eliminated. * * Dual source blending never has color buffer 1 enabled, so ignore it. + * + * On gfx11, pixel shaders that write memory should be compiled with an inlined epilog, + * so that the compiler can see s_endpgm and deallocates VGPRs before memory stores return. */ if (sel->info.colors_written_4bit & (blend->dual_src_blend ? 0xffffff0f : 0xffffffff) & ~(sctx->framebuffer.colorbuf_enabled_4bit & blend->cb_target_enabled_4bit)) key->ps.opt.prefer_mono = 1; + else if (sctx->gfx_level >= GFX11 && sel->info.base.writes_memory) + key->ps.opt.prefer_mono = 1; else key->ps.opt.prefer_mono = 0; }