Vulkan. VkInstance и VkDevice не уничтожены правильно - PullRequest
0 голосов
/ 15 марта 2020

Привет всем.

У меня здесь проблема.

В Vulkan 1.2 при вызове vkDestroyInstance либо VK_LAYER_KHRONOS_validation или VK_LAYER_LUNARG_standard_validation слои дают мне следующие [раздражающие] выходные данные:

UNASSIGNED-ObjectTracker-ObjectLeak(ERROR / SPEC): msgNum: 0 - OBJ ERROR :
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT object VkDevice 0x215e63ab750[] has not been destroyed. 

и

VUID-vkDestroyInstance-instance-00629(ERROR / SPEC): msgNum: 0 - OBJ ERROR :
For VkInstance 0x215e5fd6dd0[], VkSurfaceKHR 0x2aefa40000000001[] has not been destroyed. 

и так далее и так далее.

Дело в том: Я уничтожаю VkSurfaceKHR до уничтожения экземпляра , а также уничтожаю устройство .

XISCALL Win32VkContext::~Win32VkContext() 
{
    ...
    vkDestroyInstance(mVkInstance, nullptr);
    ... // some non-vulkan code
}
XResult XISCALL Win32VkContext::Terminate() noexcept
{
    ...
    vkDestroySurfaceKHR(mVkInstance, mVkSurface, nullptr);
    ...
    if (mVkDevice != VK_NULL_HANDLE) {
        vkDeviceWaitIdle(mVkDevice);
        vkDestroyDevice(mVkDevice, nullptr);
    }
    ...
}

Функция Terminate вызывается ( отладчик не может лгать =) ) из внешнего слоя намного раньше деструктора ...

Если это не ошибка Vulkan, так что это может быть? Я много гуглил, но не смог найти ничего, что могло бы решить эту проблему ...

Помещение vkDestroyInstance в конец функции Terminate дает те же результаты. Помещение нити в сон также не помогло.

UPD : я думал, что это также может быть ошибка драйвера.

1 Ответ

0 голосов
/ 15 марта 2020

Я нашел ответ на этот вопрос. Дело в том, что макрос XVK_ASSERT действительно создал 2 экземпляра экземпляра и устройства ...

...