Vulkan:转储当前分配的对象?

4
每当Vulkan中的一个对象被销毁,并且启用了VK_LAYER_LUNARG_object_tracker层并安装了调试报告,它将通过回调报告销毁调用并给出剩余对象的总数。例如:
INFO: [OBJTRACK]: OBJ_STAT Destroy VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT obj 0xcf43130 (217 total objs remain & 1 VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT objs).

有没有办法获取仍在分配的对象的信息?

编辑: 检查对象跟踪器层(https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/layers/object_tracker.h)的源代码,似乎有一个objTrackGetObjectsOfTypeCount的原型,但似乎它们没有在任何地方实现。这个函数是否可访问?


我想你可以创建自己的层,或者在你自己的应用程序中跟踪它们。 - tambre
当然可以,但我想知道是否有内置的功能(例如类似于DXGI::ReportLiveObjects - https://msdn.microsoft.com/en-us/library/windows/desktop/hh780352.aspx)。显然,object_tracker已经知道每种类型有多少个 - 我想知道是否有一种方法来提取它。 - MuertoExcobito
我猜你可以实现自己的VkAllocatorCallback(作为单例),并在那里放置一些计数器(可能将对象名称映射到计数器)。我使用malloc()/free()编写了一个简单的VkAllocationCallback实现这里,测试代码在这里 - Alex Byrth
1个回答

4

Vulkan是使用最少的驱动程序开销构建的,因此驱动程序只做最少的工作,并且没有内置的功能。获取现有对象的信息的唯一方法是自己跟踪这些对象或编写一个层来替您完成。

似乎没有任何现有的层提供此类功能。如果要编写验证层,可以查看现有的Vulkan验证层


它不必内置于“纯净”的Vulkan本身中(例如,它可以作为object_tracker层的一部分提供)。似乎至少有这样一个想法应该可用(请参见我的编辑),但是要么我不知道如何访问它,要么它尚不可用。 - MuertoExcobito
@MuertoExcobito 我已经编辑了我的答案,澄清了目前没有已知的这样的实现。我很抱歉,层内部函数只是用于内部使用。您可以联系或在他们的Github存储库上创建一个问题,并查看他们是否愿意以某种方式实现这样的功能。 - tambre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接