From 4c359eae016a5ca92308d40f75887f8d331ac6c8 Mon Sep 17 00:00:00 2001 From: Zan Dobersek Date: Mon, 2 Sep 2024 13:30:07 +0200 Subject: [PATCH] tu: use instance indices in RD dump filenames Until now the RD dumps were stored in files on a per-device basis, using the device index but assuming only one Vulkan instance is active. With multiple active instances, different devices separated across those instances could end up storing RD dumps into files with the same name. tu_instance struct now has an index member variable that's assigned upon creation with an incrementally-increasing global counter value. RD dump output name now also contains this instance index, avoiding the described naming collisions. Signed-off-by: Zan Dobersek Fixes: f9c4e25483f ("freedreno: add fd_rd_output facilities for gzip-compressed RD dumps") Reviewed-by: Karmjit Mahil Part-of: --- src/freedreno/vulkan/tu_device.cc | 8 ++++++-- src/freedreno/vulkan/tu_device.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index a0500021863..e2c0a64c1c6 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -1394,6 +1394,8 @@ tu_init_dri_options(struct tu_instance *instance) driQueryOptionb(&instance->dri_options, "tu_disable_d24s8_border_color_workaround"); } +static uint32_t instance_count = 0; + VKAPI_ATTR VkResult VKAPI_CALL tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, @@ -1435,6 +1437,7 @@ tu_CreateInstance(const VkInstanceCreateInfo *pCreateInfo, instance->vk.physical_devices.enumerate = tu_enumerate_devices; instance->vk.physical_devices.destroy = tu_destroy_physical_device; + instance->instance_idx = p_atomic_fetch_add(&instance_count, 1); if (TU_DEBUG(STARTUP)) mesa_logi("Created an instance"); @@ -2583,8 +2586,9 @@ tu_CreateDevice(VkPhysicalDevice physicalDevice, snprintf(engine_name, sizeof(engine_name), "%s", engine_name_str); char output_name[128]; - snprintf(output_name, sizeof(output_name), "tu_%s.%s_device%u", - app_name, engine_name, device->device_idx); + snprintf(output_name, sizeof(output_name), "tu_%s.%s_instance%u_device%u", + app_name, engine_name, device->instance->instance_idx, + device->device_idx); fd_rd_output_init(&device->rd_output, output_name); } diff --git a/src/freedreno/vulkan/tu_device.h b/src/freedreno/vulkan/tu_device.h index d5044adce67..e4c31bc18d1 100644 --- a/src/freedreno/vulkan/tu_device.h +++ b/src/freedreno/vulkan/tu_device.h @@ -157,6 +157,7 @@ struct tu_instance const struct tu_knl *knl; + uint32_t instance_idx; uint32_t api_version; struct driOptionCache dri_options;