diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c index c738886a6d2..08397cee954 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c @@ -507,7 +507,13 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws, request.flags |= AMDGPU_GEM_CREATE_EXPLICIT_SYNC; if (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING && ws->info.has_local_buffers && - (ws->use_local_bos || (flags & RADEON_FLAG_PREFER_LOCAL_BO))) { + (ws->use_local_bos || + /* VM_ALWAYS_VALID means that all BOs must fit in memory (VRAM+GTT) + * for each submission. This is causing a lot of troubles when the + * total allocated memory is greater than the available memory, + * especially on APUs. + */ + (ws->info.has_dedicated_vram && (flags & RADEON_FLAG_PREFER_LOCAL_BO)))) { bo->base.is_local = true; request.flags |= AMDGPU_GEM_CREATE_VM_ALWAYS_VALID; }