销毁设备时每个对象的 Vulkan 验证错误,尽管它们已被销毁

Vulkan validation error for each objects when destroying device, despite their destruction

在 android 本机应用程序中,当我调用时:

vkDestroyDevice( vk.device, VK_ALLOCATOR )

我遇到错误错误:[验证]代码 614466292 X 对象 0xffffffffd3bcb900 尚未被销毁 (...)。

但是我已经为每个对象调用了 vkDestroy(Object)。 (图像、图像视图、管道等)

这是一个对象的创建/销毁:

static void create_shader_module(const unsigned char* pBytes, const int count, VkShaderModule* pVkShaderMod) {
    VkShaderModuleCreateInfo desc;
    desc.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
    desc.pNext = NULL;
    desc.flags = 0;
    desc.codeSize = count;
    desc.pCode = (const uint32_t*)pBytes;          
    VK(vkCreateShaderModule(vk.device, &desc, NULL, pVkShaderMod));
}
extern unsigned char multiview_single_texture_vert_spv[];
extern int multiview_single_texture_vert_spv_size;
create_shader_module(multiview_single_texture_vert_spv, multiview_single_texture_vert_spv_size, &s_gShaderModules.single_texture_vs);

而对于破坏部分:

vkDestroyShaderModule(vk.device, s_gShaderModules.single_texture_vs, NULL);

当我调用 vkDestroyShaderModule 时,vk.device 仍然处于活动状态,而且我没有遇到任何错误。 但是当我调用 vkDestroyDevice() 时,我得到了错误:

OBJ ERROR : For device 0xeb0ac330, ShaderModule object 0xffffffffeb0c6240 has not been destroyed. The spec valid usage text states 'All child objects created on device must have been destroyed prior to destroying device'

使用 memset(&s_gShaderModules, 0, sizeof(s_gShaderModules)) 释放结构内存;没有解决问题。

错误出在 android 设备上,不幸的是我无法在另一台设备上测试该应用程序。 应用程序中的其他一切都正常,我什至在运行时破坏并重新创建了一些对象而没有错误,除了应用程序在退出时崩溃。

我刚刚删除了验证层,令人惊讶的是应用程序不再崩溃,关闭序列成功结束。为什么我不早点尝试? 该问题仅出现在层上,可能是由于它们在扩展数组中的顺序。