Ошибка проверки Vulkan для каждого объекта при уничтожении устройства, несмотря на их уничтожение - PullRequest
0 голосов
/ 17 апреля 2020

В собственном приложении android, когда я вызываю:

vkDestroyDevice( vk.device, VK_ALLOCATOR )

У меня ошибка Ошибка: [Проверка] Код 614466292 X объект 0xffffffffd3bcb900 не был уничтожен (... ).

Но я вызвал vkDestroy (Object) для каждого из объектов. (изображение, изображение, конвейер и т. д. c)

Вот один объект создания / уничтожения:

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 0xffffffffeb0c6240 не был уничтожен. Текст spe c допустимого использования гласит: «Все дочерние объекты, созданные на устройстве, должны быть уничтожены до уничтожения устройства»

Освобождение памяти структуры с помощью memset (& s_gShaderModules, 0, sizeof (s_gShaderModules)) ; не решает проблему.

Ошибка на устройстве android, к сожалению, я не могу протестировать приложение на другом устройстве. Все остальное в приложении работает, я даже уничтожаю и воссоздаю некоторые объекты во время выполнения без ошибок, кроме приложения cra sh при выходе.

1 Ответ

0 голосов
/ 23 апреля 2020

Я только что удалил слои проверки, и, что удивительно, приложение больше не падает, последовательность закрытия завершается успешно. Почему я не попробовал это раньше? Проблема возникает только со слоями, это может быть связано с их порядком в массиве расширений.

...