From 175ee084ff5e05398467ad66ea99ed812711f1a1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 25 Nov 2017 20:16:02 +0100 Subject: [PATCH] radeonsi: don't use fast color clear for small surfaces MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This removes 35+ clear eliminate passes from DOTA 2. Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_clear.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_clear.c b/src/gallium/drivers/radeonsi/si_clear.c index 00589caf5be..4663fc29cc6 100644 --- a/src/gallium/drivers/radeonsi/si_clear.c +++ b/src/gallium/drivers/radeonsi/si_clear.c @@ -421,6 +421,17 @@ static void si_do_fast_color_clear(struct si_context *sctx, bool need_decompress_pass = false; + /* Use a slow clear for small surfaces where the cost of + * the eliminate pass can be higher than the benefit of fast + * clear. The closed driver does this, but the numbers may differ. + * + * Always use fast clear on APUs. + */ + bool too_small = sctx->screen->b.info.has_dedicated_vram && + tex->resource.b.b.nr_samples <= 1 && + tex->resource.b.b.width0 <= 256 && + tex->resource.b.b.height0 <= 256; + /* Try to clear DCC first, otherwise try CMASK. */ if (vi_dcc_enabled(tex, 0)) { uint32_t reset_value; @@ -439,6 +450,9 @@ static void si_do_fast_color_clear(struct si_context *sctx, &clear_words_needed)) continue; + if (clear_words_needed && too_small) + continue; + /* DCC fast clear with MSAA should clear CMASK to 0xC. */ if (tex->resource.b.b.nr_samples >= 2 && tex->cmask.size) { /* TODO: This doesn't work with MSAA. */ @@ -458,6 +472,9 @@ static void si_do_fast_color_clear(struct si_context *sctx, tex->separate_dcc_dirty = true; } else { + if (too_small) + continue; + /* 128-bit formats are unusupported */ if (tex->surface.bpe > 8) { continue; -- 2.30.2