diff options
| author | Nicolas James <nj3ahxac@gmail.com> | 2026-03-26 20:06:26 +1100 |
|---|---|---|
| committer | Nicolas James <nj3ahxac@gmail.com> | 2026-03-26 20:06:26 +1100 |
| commit | d5ef2dbbd77c69dd93e92d5b7046a65c2361b59b (patch) | |
| tree | ba7712ab0c6a4a9ca2110e63c25daced5663974f /src | |
| parent | 4ab8c7b97ea513e209705907afce9852934a7d86 (diff) | |
Add missing VkSwapchainLatencyCreateInfoNV handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/layer.cc | 28 |
1 files 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<VkSwapchainLatencyCreateInfoNV>( + 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<milliseconds>(1s / pData->maxFPS); + const auto present_delay = [&]() { // lambda abuse? + using namespace std::chrono; + return duration_cast<milliseconds>(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; } |
