From: Charles Giessen Date: Fri, 8 Sep 2023 20:28:35 +0000 (-0600) Subject: Make test_layer delete destroyed devices X-Git-Tag: upstream/1.3.268~36 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7eb9da1e5e9f261c50eefa727ac010ff23f851f1;p=platform%2Fupstream%2FVulkan-Loader.git Make test_layer delete destroyed devices Destroyed devices need to be removed from the test_layer's created_devices vector, so that it doesn't accidentally mistake dead devices for alive ones when checking for whether a device extension is supported or not. This caused multiple days of debugging headache as it caused sporadic test failures due to the re-use of VkDevice handle values (which is caused by the memory manager reusing allocations). Since a second VkDevice could share the handle value of the first, and the first wasn't removed from the vector, test_layer would use the data assocated with the first device by mistake. --- diff --git a/tests/framework/layer/test_layer.cpp b/tests/framework/layer/test_layer.cpp index c2747c8b..2764f665 100644 --- a/tests/framework/layer/test_layer.cpp +++ b/tests/framework/layer/test_layer.cpp @@ -654,11 +654,11 @@ VKAPI_ATTR void VKAPI_CALL test_vkDestroyDevice(VkDevice device, const VkAllocat layer.second_device_created_during_create_device.dispatch_table.DestroyDevice); } - for (auto& created_device : layer.created_devices) { - if (created_device.device_handle == device) { - created_device.dispatch_table.DestroyDevice(device, pAllocator); - break; - } + auto it = std::find_if(std::begin(layer.created_devices), std::end(layer.created_devices), + [device](const TestLayer::Device& dev) { return device == dev.device_handle; }); + if (it != std::end(layer.created_devices)) { + it->dispatch_table.DestroyDevice(device, pAllocator); + layer.created_devices.erase(it); } } diff --git a/tests/loader_debug_ext_tests.cpp b/tests/loader_debug_ext_tests.cpp index e5472e49..aa6b7f0e 100644 --- a/tests/loader_debug_ext_tests.cpp +++ b/tests/loader_debug_ext_tests.cpp @@ -1074,11 +1074,11 @@ TEST(GetProcAddr, DebugFuncsWithTrampoline) { driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"}); // Hardware doesn't support the debug extensions - // // Use getDeviceProcAddr & vary enabling the debug extensions + // Use getDeviceProcAddr & vary enabling the debug extensions ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, false)); ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, false)); - // // Use getInstanceProcAddr & vary enabling the debug extensions + // Use getInstanceProcAddr & vary enabling the debug extensions ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, false)); ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, false)); @@ -1108,11 +1108,11 @@ TEST(GetProcAddr, DebugFuncsWithDebugExtsForceAdded) { driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"}); // Hardware doesn't support the debug extensions - // // Use getDeviceProcAddr & vary enabling the debug extensions + // Use getDeviceProcAddr & vary enabling the debug extensions ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, false)); ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, false)); - // // Use getInstanceProcAddr & vary enabling the debug extensions + // Use getInstanceProcAddr & vary enabling the debug extensions ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, false, false)); ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true, false)); @@ -1126,7 +1126,7 @@ TEST(GetProcAddr, DebugFuncsWithDebugExtsForceAdded) { .add_injected_instance_extensions({{VK_EXT_DEBUG_REPORT_EXTENSION_NAME}, {VK_EXT_DEBUG_UTILS_EXTENSION_NAME}}) .add_injected_device_extension({VK_EXT_DEBUG_MARKER_EXTENSION_NAME}); - // // Use getDeviceProcAddr & vary enabling the debug extensions + // Use getDeviceProcAddr & vary enabling the debug extensions ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false, true)); ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, true, true));