Reviewed-by: Bas Nieuwenhuizen <[email protected]> And nominate for stable?
On Thu, Sep 7, 2017, at 05:44, Dave Airlie wrote: > From: Dave Airlie <[email protected]> > > 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 <[email protected]> > --- > 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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
