From: Samuel Pitoiset Date: Thu, 30 Apr 2020 18:47:46 +0000 (+0200) Subject: radv/winsys: always allow GTT placements on APUs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=28c227c7ca33669d8857f810c23a21a67d53d571;p=mesa.git radv/winsys: always allow GTT placements on APUs When the VRAM size is small and the preferred heap only VRAM, the kernel tries to always honor the requested heap and it does a ton of evictions which is a disaster for performance. On APUs, VRAM and GTT have similar performance, so allow the kernel to choose the best placement (GTT or VRAM) itself. This gives a huge performance boost with Doom Eternal on RAVEN. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c index 5afb274f1e6..2d153873bfd 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c @@ -379,8 +379,19 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws, request.alloc_size = size; request.phys_alignment = alignment; - if (initial_domain & RADEON_DOMAIN_VRAM) + if (initial_domain & RADEON_DOMAIN_VRAM) { request.preferred_heap |= AMDGPU_GEM_DOMAIN_VRAM; + + /* Since VRAM and GTT have almost the same performance on + * APUs, we could just set GTT. However, in order to decrease + * 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. + */ + if (!ws->info.has_dedicated_vram) + request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT; + } + if (initial_domain & RADEON_DOMAIN_GTT) request.preferred_heap |= AMDGPU_GEM_DOMAIN_GTT; if (initial_domain & RADEON_DOMAIN_GDS)