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



在android原生应用程序中,当我调用:时

vkDestroyDevice( vk.device, VK_ALLOCATOR )

我有错误错误:[验证]代码614466292 X对象0xffffffd3bcb900尚未销毁(…(。

但我已经为每个对象调用了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错误:对于设备0xeb0ac330,ShaderModule对象0xffffffffb0c6240尚未销毁。规范的有效用法文本states'在设备上创建的所有子对象都必须已销毁销毁设备之前

使用memset(&s_gShaderModules,0,sizeof(s_gShader Modules((释放结构内存;并不能解决问题。

错误发生在安卓设备上,不幸的是我无法在另一台设备上测试该应用程序。应用程序中的其他一切都正常工作,我甚至在运行时销毁并重新创建了一些对象,没有出错,除了退出时应用程序崩溃。

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

相关内容

  • 没有找到相关文章

最新更新