From: Dave Airlie <airl...@redhat.com> We have some features that seem to slow things down or cause other possible undesireable side effects, but it would be nice to test games etc with them easily.
I forsee multisample DCC and maybe some shader opt changes using this. For now use it for batch chaining. Signed-off-by: Dave Airlie <airl...@redhat.com> --- src/amd/vulkan/radv_debug.h | 3 +++ src/amd/vulkan/radv_device.c | 11 ++++++++++- src/amd/vulkan/radv_private.h | 1 + src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 2 +- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 3 ++- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h | 1 + src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h | 3 ++- 7 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index 4d1398e..c986c7b 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -37,4 +37,7 @@ enum { RADV_DEBUG_NO_IBS = 0x200, }; +enum { + RADV_PERFTEST_BATCHCHAIN = 0x1, +}; #endif diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 3b32bf5..63135db 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -274,7 +274,8 @@ radv_physical_device_init(struct radv_physical_device *device, assert(strlen(path) < ARRAY_SIZE(device->path)); strncpy(device->path, path, ARRAY_SIZE(device->path)); - device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags); + device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags, + instance->perftest_flags); if (!device->ws) { result = VK_ERROR_INCOMPATIBLE_DRIVER; goto fail; @@ -371,6 +372,11 @@ static const struct debug_control radv_debug_options[] = { {NULL, 0} }; +static const struct debug_control radv_perftest_options[] = { + {"batchchain", RADV_PERFTEST_BATCHCHAIN}, + {NULL, 0} +}; + VkResult radv_CreateInstance( const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, @@ -428,6 +434,9 @@ VkResult radv_CreateInstance( instance->debug_flags = parse_debug_string(getenv("RADV_DEBUG"), radv_debug_options); + instance->perftest_flags = parse_debug_string(getenv("RADV_PERFTEST"), + radv_perftest_options); + *pInstance = radv_instance_to_handle(instance); return VK_SUCCESS; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index c21b17e..87cb0a6 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -288,6 +288,7 @@ struct radv_instance { struct radv_physical_device physicalDevices[RADV_MAX_DRM_DEVICES]; uint64_t debug_flags; + uint64_t perftest_flags; }; VkResult radv_init_wsi(struct radv_physical_device *physical_device); diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index 5ea1218..7b74970 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -931,7 +931,7 @@ static int radv_amdgpu_winsys_cs_submit(struct radeon_winsys_ctx *_ctx, if (!cs->ws->use_ib_bos) { ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, cs_array, cs_count, initial_preamble_cs, continue_preamble_cs, _fence); - } else if (can_patch && cs_count > AMDGPU_CS_MAX_IBS_PER_SUBMIT && false) { + } else if (can_patch && cs_count > AMDGPU_CS_MAX_IBS_PER_SUBMIT && cs->ws->batchchain) { ret = radv_amdgpu_winsys_cs_submit_chained(_ctx, queue_idx, cs_array, cs_count, initial_preamble_cs, continue_preamble_cs, _fence); } else { diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index bce8dd2..c7688cf 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -82,7 +82,7 @@ static void radv_amdgpu_winsys_destroy(struct radeon_winsys *rws) } struct radeon_winsys * -radv_amdgpu_winsys_create(int fd, uint32_t debug_flags) +radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags) { uint32_t drm_major, drm_minor, r; amdgpu_device_handle dev; @@ -106,6 +106,7 @@ radv_amdgpu_winsys_create(int fd, uint32_t debug_flags) if (debug_flags & RADV_DEBUG_NO_IBS) ws->use_ib_bos = false; + ws->batchchain = !!(perftest_flags & RADV_PERFTEST_BATCHCHAIN); LIST_INITHEAD(&ws->global_bo_list); pthread_mutex_init(&ws->global_bo_list_lock, NULL); ws->base.query_info = radv_amdgpu_winsys_query_info; diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h index 59e2730..426cf69 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h @@ -43,6 +43,7 @@ struct radv_amdgpu_winsys { ADDR_HANDLE addrlib; bool debug_all_bos; + bool batchchain; pthread_mutex_t global_bo_list_lock; struct list_head global_bo_list; unsigned num_buffers; diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h index d5d0ff5..854e216 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h @@ -29,6 +29,7 @@ #ifndef RADV_AMDGPU_WINSYS_PUBLIC_H #define RADV_AMDGPU_WINSYS_PUBLIC_H -struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint32_t debug_flags); +struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, + uint64_t perftest_flags); #endif /* RADV_AMDGPU_WINSYS_PUBLIC_H */ -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev