[Mesa-dev] [PATCH] radv/gfx9: allocate events from uncached VA space
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Thu Sep 7 07:58:46 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
And nominate for stable?
On Thu, Sep 7, 2017, at 05:44, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> 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
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/radv_device.c | 2 +-
> src/amd/vulkan/radv_radeon_winsys.h | 3 ++-
> src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 9 ++++++++-
> 3 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 0b25469..12f6fe6 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -2793,7 +2793,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 8e2ba74..a9c1f54 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 75444d5..0af5a39 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
> @@ -323,7 +323,14 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys
> *_ws,
> goto error_bo_alloc;
> }
>
> - r = amdgpu_bo_va_op(buf_handle, 0, size, va, 0,
> AMDGPU_VA_OP_MAP);
> + uint32_t raw_flags = AMDGPU_VM_PAGE_READABLE |
> AMDGPU_VM_PAGE_WRITEABLE |
> + AMDGPU_VM_PAGE_EXECUTABLE;
> + if (flags & RADEON_FLAG_VA_UNCACHED)
> + raw_flags |= AMDGPU_VM_MTYPE_UC;
> +
> + size = ALIGN(size, getpagesize());
> +
> + r = amdgpu_bo_va_op_raw(ws->dev, buf_handle, 0, size, va,
> raw_flags, AMDGPU_VA_OP_MAP);
> if (r)
> goto error_va_map;
>
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list