From e8d57802fea60d4b353761ba1bdb08545733c007 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 6 Sep 2017 20:40:57 -0700 Subject: [PATCH] radv/gfx9: allocate events from uncached VA space This copies what amdgpu-pro does, and allocates the memory for an event with an uncached mtype. This fixes hangs with: dEQP-VK.api.command_buffers.record_simul_use_primary Reviewed-by: Bas Nieuwenhuizen Cc: "17.2" Signed-off-by: Dave Airlie --- src/amd/vulkan/radv_device.c | 2 +- src/amd/vulkan/radv_radeon_winsys.h | 3 ++- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 6 +++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index b64a02380d6..ae0a76137e7 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -2789,7 +2789,7 @@ VkResult radv_CreateEvent( event->bo = device->ws->buffer_create(device->ws, 8, 8, RADEON_DOMAIN_GTT, - RADEON_FLAG_CPU_ACCESS); + RADEON_FLAG_VA_UNCACHED | RADEON_FLAG_CPU_ACCESS); if (!event->bo) { vk_free2(&device->alloc, pAllocator, event); return VK_ERROR_OUT_OF_DEVICE_MEMORY; diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h index 8e2ba7431a7..a9c1f54c238 100644 --- a/src/amd/vulkan/radv_radeon_winsys.h +++ b/src/amd/vulkan/radv_radeon_winsys.h @@ -51,7 +51,8 @@ enum radeon_bo_flag { /* bitfield */ RADEON_FLAG_GTT_WC = (1 << 0), RADEON_FLAG_CPU_ACCESS = (1 << 1), RADEON_FLAG_NO_CPU_ACCESS = (1 << 2), - RADEON_FLAG_VIRTUAL = (1 << 3) + RADEON_FLAG_VIRTUAL = (1 << 3), + RADEON_FLAG_VA_UNCACHED = (1 << 4), }; enum radeon_bo_usage { /* bitfield */ diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c index 95290a468e7..325f8752874 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c @@ -340,7 +340,11 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws, goto error_bo_alloc; } - r = radv_amdgpu_bo_va_op(ws->dev, buf_handle, 0, size, va, 0, AMDGPU_VA_OP_MAP); + + uint32_t va_flags = 0; + if (flags & RADEON_FLAG_VA_UNCACHED) + va_flags |= AMDGPU_VM_MTYPE_UC; + r = radv_amdgpu_bo_va_op(ws->dev, buf_handle, 0, size, va, flags, AMDGPU_VA_OP_MAP); if (r) goto error_va_map; -- 2.30.2