From d5ef2dbbd77c69dd93e92d5b7046a65c2361b59b Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Thu, 26 Mar 2026 20:06:26 +1100 Subject: Add missing VkSwapchainLatencyCreateInfoNV handling --- src/layer.cc | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/layer.cc b/src/layer.cc index 438f331..5460fca 100644 --- a/src/layer.cc +++ b/src/layer.cc @@ -750,7 +750,19 @@ static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR( return result; } - assert(context->swapchain_infos.try_emplace(*pSwapchain).second); + auto addition = DeviceContext::SwapchainInfo{ + .present_delay = std::chrono::milliseconds{0}, + .was_low_latency_requested = false, + }; + + if (const auto slci = find_next( + pCreateInfo, VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV); + slci) { + + addition.was_low_latency_requested = slci->latencyModeEnable; + } + + assert(context->swapchain_infos.try_emplace(*pSwapchain, addition).second); return VK_SUCCESS; } @@ -776,8 +788,11 @@ AntiLagUpdateAMD(VkDevice device, const VkAntiLagDataAMD* pData) { // NVIDIA's method and then have a working AL2 implementation follow using // that existing code path. - using namespace std::chrono; - const auto present_delay = duration_cast(1s / pData->maxFPS); + const auto present_delay = [&]() { // lambda abuse? + using namespace std::chrono; + return duration_cast(1s / pData->maxFPS); + }(); + context->update_swapchain_infos(std::nullopt, present_delay, (pData->mode == VK_ANTI_LAG_MODE_ON_AMD)); @@ -818,14 +833,15 @@ VkResult SetLatencySleepModeNV(VkDevice device, VkSwapchainKHR swapchain, const VkLatencySleepModeInfoNV* pSleepModeInfo) { const auto context = layer_context.get_context(device); - using namespace std::chrono; if (pSleepModeInfo) { context->update_swapchain_infos( - swapchain, milliseconds{pSleepModeInfo->minimumIntervalUs}, + swapchain, + std::chrono::milliseconds{pSleepModeInfo->minimumIntervalUs}, pSleepModeInfo->lowLatencyMode); } else { // If pSleepModeInfo is nullptr, it means no delay and no low latency. - context->update_swapchain_infos(swapchain, milliseconds{0}, false); + context->update_swapchain_infos(swapchain, std::chrono::milliseconds{0}, + false); } return VK_SUCCESS; } -- cgit v1.2.3