r600g: do not use "fast-clear" for small textures (v3)
authorKonstantin Kharlamov <Hi-Angel@yandex.ru>
Mon, 1 Jan 2018 07:38:37 +0000 (10:38 +0300)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 17 Jul 2018 18:47:37 +0000 (14:47 -0400)
Ported from radeonsi. Improves windowed glxgears ran as

vblank_mode=0 glxgears -info -geometry 0+0+512+512

from ≈2270 FPS to ≈2360 FPS. Tested with AMD TURKS.

v2: turned out glxgears ignores the option above, the correct way would
be "512x512+0+0". Now it can be seen 512x512 actually loses 30 FPS.
300×300 however wins around a hundred FPS, and to leave some room in
case results may differ for other cards I want not to nitpick in search
of an optimum but to simply leave 300×300 in the code.
v3: remove redundant braces, and try harder for the mail to stick to
the rest of the series.

Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
Reviewed-by: Gert Wollny <gw.fossdev@gmail.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/r600/r600_texture.c

index f86a12c4688b288acbf64b1924b42c6b8cc814b8..f3b9eb1115967da4de8737314c32bf70ac4a21da 100644 (file)
@@ -1794,6 +1794,16 @@ void evergreen_do_fast_color_clear(struct r600_common_context *rctx,
                    !(tex->resource.external_usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH))
                        continue;
 
+               /* Use a slow clear for small surfaces where the cost of
+                * the eliminate pass can be higher than the benefit of fast
+                * clear. AMDGPU-pro does this, but the numbers may differ.
+                *
+                * This helps on both dGPUs and APUs, even small ones.
+                */
+               if (tex->resource.b.b.nr_samples <= 1 &&
+                   tex->resource.b.b.width0 * tex->resource.b.b.height0 <= 300 * 300)
+                       continue;
+
                {
                        /* 128-bit formats are unusupported */
                        if (tex->surface.bpe > 8) {