radv: disable implicit sync for radv allocated bos v3
Implicit sync kicks in when a buffer is used by two different amdgpu contexts simultaneously. Jobs that use explicit synchronization mechanisms end up needlessly waiting to be scheduled for long periods of time in order to achieve serialized execution. This patch disables implicit synchronization for all radv allocations except for wsi bos. The only systems that require implicit synchronization are DRI2/3 and PRIME. v2: mark wsi bos as RADV_MEM_IMPLICIT_SYNC v3: Add drm version check (Bas) Signed-off-by: Andres Rodriguez <andresx7@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
committed by
Bas Nieuwenhuizen
parent
eff2bdbd82
commit
a2c6fbb3ee
@@ -2115,6 +2115,9 @@ VkResult radv_alloc_memory(VkDevice _device,
|
||||
if (pAllocateInfo->memoryTypeIndex == RADV_MEM_TYPE_GTT_WRITE_COMBINE)
|
||||
flags |= RADEON_FLAG_GTT_WC;
|
||||
|
||||
if (mem_flags & RADV_MEM_IMPLICIT_SYNC)
|
||||
flags |= RADEON_FLAG_IMPLICIT_SYNC;
|
||||
|
||||
mem->bo = device->ws->buffer_create(device->ws, alloc_size, device->physical_device->rad_info.max_alignment,
|
||||
domain, flags);
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ enum radeon_bo_flag { /* bitfield */
|
||||
RADEON_FLAG_NO_CPU_ACCESS = (1 << 2),
|
||||
RADEON_FLAG_VIRTUAL = (1 << 3),
|
||||
RADEON_FLAG_VA_UNCACHED = (1 << 4),
|
||||
RADEON_FLAG_IMPLICIT_SYNC = (1 << 5),
|
||||
};
|
||||
|
||||
enum radeon_bo_usage { /* bitfield */
|
||||
|
||||
@@ -194,7 +194,7 @@ radv_wsi_image_create(VkDevice device_h,
|
||||
.image = image_h
|
||||
};
|
||||
|
||||
result = radv_AllocateMemory(device_h,
|
||||
result = radv_alloc_memory(device_h,
|
||||
&(VkMemoryAllocateInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
|
||||
.pNext = &ded_alloc,
|
||||
@@ -202,6 +202,7 @@ radv_wsi_image_create(VkDevice device_h,
|
||||
.memoryTypeIndex = linear ? 1 : 0,
|
||||
},
|
||||
NULL /* XXX: pAllocator */,
|
||||
RADV_MEM_IMPLICIT_SYNC,
|
||||
&memory_h);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_create_image;
|
||||
|
||||
@@ -330,6 +330,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
|
||||
request.flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
|
||||
if (flags & RADEON_FLAG_GTT_WC)
|
||||
request.flags |= AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
||||
if (!(flags & RADEON_FLAG_IMPLICIT_SYNC) && ws->info.drm_minor >= 22)
|
||||
request.flags |= AMDGPU_GEM_CREATE_EXPLICIT_SYNC;
|
||||
|
||||
/* this won't do anything on pre 4.9 kernels */
|
||||
if (ws->zero_all_vram_allocs && (initial_domain & RADEON_DOMAIN_VRAM))
|
||||
|
||||
Reference in New Issue
Block a user