Skip to content

Commit 8615c2c

Browse files
committed
layers: Fix false swapchain image leak error
1 parent d50ff54 commit 8615c2c

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

layers/object_tracker/object_tracker_utils.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,20 @@ bool Instance::ReportLeakedObjects(VulkanObjectType object_type, const std::stri
395395
const Location &loc) const {
396396
bool skip = false;
397397

398-
auto snapshot = tracker.object_map[object_type].snapshot();
398+
// The state tracker also tracks implicit images created for swapchains and reports them as leak.
399+
// This is entirely incorrect and unfortunately the machinery does not allow distinguishing between
400+
// implicitly and explicitly created swapchain images, so the best we can do is to ignore any leaked
401+
// images that have swapchain parents.
402+
auto snapshot =
403+
(object_type == kVulkanObjectTypeImage)
404+
? tracker.object_map[object_type].snapshot(
405+
[swapchain_snapshot =
406+
tracker.object_map[kVulkanObjectTypeSwapchainKHR].snapshot()](const std::shared_ptr<ObjTrackState> &pNode) {
407+
return std::find_if(swapchain_snapshot.begin(), swapchain_snapshot.end(), [&](const auto &swapchain_item) {
408+
return pNode->parent_object == swapchain_item.second->handle;
409+
}) == swapchain_snapshot.end();
410+
})
411+
: tracker.object_map[object_type].snapshot();
399412
for (const auto &item : snapshot) {
400413
const auto object_info = item.second;
401414
const LogObjectList objlist(instance, ObjTrackStateTypedHandle(*object_info));

0 commit comments

Comments
 (0)