Маленькая напоминалка Vulkan программистам
(Я надеюсь я здесь не последний динозавр, который программирует Vulkan напрямую)
Напоминаю, что в 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 семафор.