我使用带有验证层的Vulkan 1.3。
这一层可能会出现难以阅读的错误。
我想知道我是否可以用一个人类可读的名称标记对象,这样我就知道哪个缓冲区行为不正常。
例如,我得到这个验证错误:
VUID-VkMappedMemoryRange-size-01390(错误/规格):消息错误:-582062709 -验证错误:[ VUID-VkMappedMemoryRange-size-01390 ]对象0:句柄= 0x 16000000016,类型= VK_OBJECTIVE_TYPE_DEVICE_MEMORY;| MessageID = 0xdd4e6d8b| vkFlushMappedMemoryRanges:pMemRanges[0]中的Size为0x 20,它不是VkPhysicalDeviceLimits::nonCoherentAtomSize(0x 40)的倍数,并且offset + size(0x 0 + 0x 20 = 0x 20)不等于内存大小(0x 3000)。Vulkan规范规定:如果size不等于VK_WHOLE_SIZE,则size必须是VkPhysicalDeviceLimits::nonCoherentAtomSize的倍数,或者offset + size必须等于内存大小(https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkMappedMemoryRange-size-01390)
我在应用程序中使用了许多缓冲区和许多内存对象,我不知道0x160000000016
指的是什么。
在OpenGL中,有一种称为glObjectPtrLabel()的标记缓冲区的机制
Vulkan与OpenGL对象命名的等价物是什么?
1条答案
按热度按时间nbnkbykc1#
Vk_EXT_debug_utils扩展提供了此功能(通过the function
vkSetDebugUtilsObjectNameEXT
)。有一些旧的扩展可以工作,但这是最新的。它是由Vulkan SDK提供的(与给你那个错误的层相同),而不是由驱动程序本身提供的。