diff options
author | Konstantin Kharlamov <[email protected]> | 2018-01-01 10:38:37 +0300 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-07-17 14:47:37 -0400 |
commit | 9b379591c9d2ddc4082df367606642fedbc40fd2 (patch) | |
tree | 2d2f2c435ea2ae6778cdaa571b11ff3ce5d4da6c | |
parent | 4cf8f329edb3ad3482819de8dc091061ae19c5af (diff) |
r600g: do not use "fast-clear" for small textures (v3)
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 <[email protected]>
Reviewed-by: Gert Wollny <[email protected]>
Signed-off-by: Marek Olšák <[email protected]>
-rw-r--r-- | src/gallium/drivers/r600/r600_texture.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index f86a12c4688..f3b9eb11159 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -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) { |