protonscr

Anyway to adjust backbuffer count?

vkd3dclosed
HansKristian-Work/vkd3d-proton#2473 · opened 2025-05-16 by n3thshan · updated 2025-08-07 · 6 comments · github
Nn3thshan 2025-05-16 github

Description

I want to play some games at 30fps in a 60hz monitor with minimal input latency. As per my understanding VK_PRESENT_MODE_FIFO_KHR uses 2 back buffers but this means that there will be significant input latency at 30fps, 60hz.

What i want

I want to adjust the backbuffer count to 1 so that double buffered vsync is used with a 30fps cap which means much less input. Is there a way to do this on vkd3d-proton? Thank you!

Additional Information

NVIDIA Driver v570.144

Mmbriar 2025-05-16 github

I'm pretty sure double buffered vsync to get a 30 fps cap on a 60hz screen is sadly straight up impossible on vulkan right now. I think both dxvk and vkd3d-proton use a cpu based frame limiter to "emulate" dxgi present interval = 2.

HHansKristian-Work maintainer 2025-05-16 github

When the monitor runs faster than the FPS limiter, there is no extra latency added by FIFO buffering in general.
You can use VKD3D_SWAPCHAIN_LATENCY_FRAMES=1 to try reduce things, and =0 as a super aggressive case that will probably cause performance issues.

Nn3thshan 2025-05-16 github

@HansKristian-Work thank you! now in the converse, what if i want to run things at 60fps, 60hz but want to mitigate vsync stutter (at the cost of input latency) when frames drop? i believe triple buffering solves this. However, vulkan only provides mailbox sync which drops unused frames that can cause animation inconsistencies. Is there a way to get FIFO with triple buffers?

Basically is there a way to get double buffered vsync when frames are not missing vblank but use triple buffering at the cost of input latency only when frames drop without any anomalies like in regular mailbox sync?

VKD3D_SWAPCHAIN_LATENCY_FRAMES=1

also i believe this is the same as max pre-rendered frames?

Nn3thshan 2025-05-17 github

I think both dxvk and vkd3d-proton use a cpu based frame limiter to "emulate" dxgi present interval = 2

@mbriar so in theory if i use VKD3D_FRAME_RATE or DXVK_FRAME_RATE, it "emulates" this? but in practice, despite emulation, it achieves the same end result right? or are there any drawbacks?

HHansKristian-Work maintainer 2025-05-20 github

Is there a way to get FIFO with triple buffers?

That is the default.

HHansKristian-Work maintainer 2025-08-07 github

No further action required.