能否为VkDeviceMemory添加调试名称?Vulkan对应OpenGL命名方法是什么
为VkDeviceMemory对象添加调试名称的方法
完全可以给VkDeviceMemory对象添加人类可读的调试名称,Vulkan中对应OpenGL glObjectPtrLabel() 的等价方法是**vkSetDebugUtilsObjectNameEXT**,这是调试工具扩展提供的功能,完美适配你使用验证层排查问题的场景。
使用说明
- Vulkan 1.3中
VK_EXT_debug_utils已纳入核心规范,无需额外启用扩展,但函数名仍保留EXT后缀。 - 构造
VkDebugUtilsObjectNameInfoEXT结构体,指定对象类型为VK_OBJECT_TYPE_DEVICE_MEMORY,传入目标VkDeviceMemory的句柄,以及自定义的可读名称。 - 调用
vkSetDebugUtilsObjectNameEXT完成命名。
示例代码
VkDebugUtilsObjectNameInfoEXT nameInfo{}; nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; nameInfo.objectType = VK_OBJECT_TYPE_DEVICE_MEMORY; nameInfo.objectHandle = reinterpret_cast<uint64_t>(yourDeviceMemoryHandle); nameInfo.pObjectName = "MeshVertexDataMemory"; // 替换为你的自定义名称 vkSetDebugUtilsObjectNameEXT(yourVkDevice, &nameInfo);
调试效果
设置名称后,验证层抛出的错误信息会直接显示你设置的人类可读名称,而非仅展示0x160000000016这类难以识别的句柄。比如你之前的错误会变为:
VUID-VkMappedMemoryRange-size-01390(ERROR / SPEC): msgNum: -582062709 - Validation Error: [ VUID-VkMappedMemoryRange-size-01390 ] Object 0: handle = 0x160000000016, type = VK_OBJECT_TYPE_DEVICE_MEMORY, name = "MeshVertexDataMemory"; | MessageID = 0xdd4e6d8b | vkFlushMappedMemoryRanges: Size in pMemRanges[0] is 0x20...
这样你就能立刻定位到出问题的内存对象,大幅提升调试效率。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

