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

问题描述 投票:0回答:1

在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(),我就会收到错误消息:

对象错误:对于设备0xeb0ac330,ShaderModule对象0xffffffffeb0c6240尚未销毁。规范有效用法文本声明“在设备上创建的所有子对象必须已被销毁在销毁设备之前'

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

错误是在android设备上,很遗憾,我无法在其他设备上测试该应用程序。应用程序中的其他所有内容都可以正常运行,我什至在运行时销毁并重新创建了一些对象,而不会出现错误,但应用程序退出时会崩溃。

validation destructor exit vulkan
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.