Цепочка обмена Vulkan и разрушение поверхности вышли из строяC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Цепочка обмена Vulkan и разрушение поверхности вышли из строя

Сообщение Anonymous »

Я использую SDL-3 и vulkan 1.3.280.0.
При изменении размера окна мне нужно воссоздать свою цепочку обмена и уничтожить старую:

Код: Выделить всё

void Application::RecreateSwapchain()
{
...
std::unique_ptr newSwapchain = std::make_unique(context.get(), window, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, swapchain.get());
swapchain.swap(newSwapchain);
...
}
После завершения работы RecreateSwapchain() старая цепочка обмена (теперь на которую ссылается newSwapchain) выходит из области видимости, и вызывается деструктор:

Код: Выделить всё

VulkanSwapchain::~VulkanSwapchain()
{
LOG_INFO("Destroying Swapchain.");
VKA(vkDeviceWaitIdle(context->device));
for (uint32_t i = 0; i < imageViews.size(); i++)
vkDestroyImageView(context->device, imageViews[i], nullptr);
vkDestroySwapchainKHR(context->device, swapchain, nullptr);
vkDestroySurfaceKHR(context->instance, surface, nullptr);
LOG_INFO("Swapchain Destroyed.");
}
Обратите внимание, как я вызываю vkDestroySwapchainKHR(...) BEFORE vkDestroySurfaceKHR(...).
Так почему же я получаю следующее сообщение от уровень проверки?

Код: Выделить всё

[22:06:49] VulkanTutorial: Destroying Swapchain.

VUID-vkDestroySurfaceKHR-surface-01266(ERROR / SPEC): msgNum: -1093400348 - Validation Error: [ VUID-vkDestroySurfaceKHR-surface-01266 ] Object 0: handle = 0x162793cff20, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xbed408e4 | vkDestroySurfaceKHR():  called before its associated VkSwapchainKHR was destroyed. The Vulkan spec states: All VkSwapchainKHR objects created for surface must have been destroyed prior to destroying surface (https://vulkan.lunarg.com/doc/view/1.3.280.0/windows/1.3-extensions/vkspec.html#VUID-vkDestroySurfaceKHR-surface-01266)
Objects: 1
[0] 0x162793cff20, type: 1, name: NULL

[22:06:49] VulkanTutorial: Swapchain Destroyed.
Важная часть:
vkDestroySurfaceKHR(): вызывается до того, как связанный с ним VkSwapchainKHR был уничтожен

Подробнее здесь: https://stackoverflow.com/questions/787 ... t-of-order
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»