radv: Improve spilling on discrete GPUs.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 23 Sep 2020 01:04:27 +0000 (03:04 +0200)
committerMarge Bot <eric+marge@anholt.net>
Sat, 6 Feb 2021 21:52:10 +0000 (21:52 +0000)
The linked bug gets better performance and I personally verified
better spilling performance on HZD so let us make this step for now.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3183
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3698
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
CC: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6833>

src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c

index 9c60c01..1a85bf3 100644 (file)
@@ -445,9 +445,17 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
                 * GTT(RAM) usage, which is shared with the OS, allow VRAM
                 * placements too. The idea is not to use VRAM usefully, but
                 * to use it so that it's not unused and wasted.
+                *
+                * Furthermore, even on discrete GPUs this is beneficial. If
+                * both GTT and VRAM are set then AMDGPU still prefers VRAM
+                * for the initial placement, but it makes the buffers
+                * spillable. Otherwise AMDGPU tries to place the buffers in
+                * VRAM really hard to the extent that we are getting a lot
+                * of unnecessary movement. This helps significantly when
+                * e.g. Horizon Zero Dawn allocates more memory than we have
+                * VRAM.
                 */
-               if (!ws->info.has_dedicated_vram)
-                       request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT;
+               request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT;
        }
 
        if (initial_domain & RADEON_DOMAIN_GTT)