Skip to content

Commit

Permalink
Make test_layer delete destroyed devices
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
charles-lunarg committed Sep 8, 2023
1 parent 64055f0 commit bb30aec
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 10 deletions.
10 changes: 5 additions & 5 deletions tests/framework/layer/test_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down
10 changes: 5 additions & 5 deletions tests/loader_debug_ext_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down Expand Up @@ -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));

Expand All @@ -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));

Expand Down

0 comments on commit bb30aec

Please sign in to comment.