Маленькая напоминалка Vulkan программистам

(Я надеюсь я здесь не последний динозавр, который программирует Vulkan напрямую)

F: ожидаемый индекс, f: вернувшийся из vkAcquireNextImageKHR::pImageIndex.
F: ожидаемый индекс, f: вернувшийся из vkAcquireNextImageKHR::pImageIndex.

Напоминаю, что в 2025-ом году, с включённым VSync'ом, с 2 swapchain изображениями, для NVIDIA видеокарт на Windows 10 и 11, Vulkan спокойно может выдать непоследовательные индексы презентации возвращаемые из параметра vkAcquireNextImageKHR::pImageIndex. Надеяться на подобный код в конце while цикла кадра не стоит:

frameIndex += 1;
frameIndex %= maxSwapchainImagesCount;

Как ленивый workaround, я создаю temp семафор, подаю его в параметр vkAcquireNextImageKHR::semaphore, жду завершения fence объекта (который трекал queue submit зависящий от старого семафора) по вернувшемуся индексу из ::pImageIndex параметра, удаляю старый семафор и свапаю его на ранее созданный temp семафор.

1
7 комментариев