I think dxgi sync interval with dxvk is just another cpu based fps limiter. As far as i can tell, fractional rate vsync with proper frame pacing is pretty much impossible to achieve at the moment. Vulkan doesn't support it directly and it would need to be implemented manually using VK_EXT_present_timing, which seems all kinds of fragile and complicated (and also wouldn't even work on kwin at the moment due missing commit_timing support). Gamescope doesn't really change anything here (unless you run it without a desktop environment underneath and let it actually modeset the screen to e.g. 40hz).
@mbriar well in that case, do you think lowering the refresh rate in plasma and using mangohud to cap frames is the second best solution? For example, on my linux machine, the plasma settings allow me to go down to 48hz. So if i set that up and a frame cap of 48 fps, im gucci? any other recommendations you have for me?
Setting the screen to 48hz and using vsync should result in proper frame pacing at 48 fps, yes. I don't think an additional fps cap will do you any good though. 48hz + 48 fps cap + no vsync will tear or judder.
thanks! @mbriar
FWIW, vkd3d-proton already implements present timing for D3D12 games, but as was mentioned it won't work on KDE for the time being. Not sure if it'll even make it into Plasma 6.8 at this point.
Tried to implement this in DXVK at some point, but I wasn't able to get Weston (which is one of the few compositors that even support commit_timig right now) to do proper frame pacing in VRR mode, nor was I able to make the Nvidia driver not segfault in a trivial feature query. And even if it did work on one environment, we'd need to
Because every single one of these things behave differently and would hit different code paths.
@doitsujin thats too bad. i thought older games would have better support but its good to know that future games will at least do so.
Btw, would y'all recommend vsync behaviour in-game or forced through mangohud? those are the only two methods i know. I cant come to a definitive solution but i experienced weird stutters when using mangohud's (FIFO) and not in-game vsync but didnt have enough time to test so take it with a grain of salt. When these "stutters" happened, the frametime graph was flat so no indication of stutter there. I also tried wayland and xwayland proton as well, though not sure if that's the cause. Since you guys are experts, i hope you can help me out! Also, like i mentioned, i was playing on 48hz.
I think Mangohud fps_limit_method=early is similar to RTSS front-edge-sync and with the default Mailbox presentation mode provides almost the same resault as on windows with tearfree low latency experence (make sure that your display refresh rate is a whole number). As far as I know nvidia's fractinal sync doesn't work with all games and should not be used with external fps limiters as it should itself limit fps.
I've tested
dx11 Overwatch
dx12 Clair Obscure
vulkan Doom The Dark Ages
They work great. The only issues i've had are with Capcom games (RE9 Pragmata). But I think it's because these games doesn't calculate proper delta times on linux
I think Mangohud fps_limit_method=early is similar to RTSS front-edge-sync and with the default Mailbox presentation mode provides almost the same resault as on windows with tearfree low latency experence (make sure that your display refresh rate is a whole number). As far as I know nvidia's fractinal sync doesn't work with all games and shouldn't not be used with external fps limiters as it should itself limit fps.
Is this true? @doitsujin @mbriar
As far as I know nvidia's fractinal sync doesn't work with all games and shouldn't not be used with external fps limiters as it should itself limit fps.
It does work with all games provided in-game vsync is turned off and an external fps cap is almost always needed for if not, the input latency is unbearable even on a controller
Regarding FIFO_LATEST_READY
Mangohud supports setting it with the vulkan_present_mode=fifo_latest_ready parameter and since VKD3D respects dxgi.syncInterval = 2 set in the dxvk.conf, I get stable half refresh rate sync in Clair Obscure without any fps limit but further testing is needed whether frame pacing is right
Although almost all of my games use VKD3D I've tested FIFO_LATEST_READY some more and that's exacly what you're looking for. I only have Overwatch that uses DXVK but it still works and doesn't stutter. I genuinely can't tell the difference between my PC and my nintendo switch 1 (OW is capped at 30 fps there) in terms of fluidity and latency. I'm using the latest GNOME 51.beta and an AMD card
Here's the video
https://youtu.be/mH4oYs_W7SA
Nothing extracted yet.
This is the only thing stopping me from gaming on linux. My goal is to run games at 1/3 the refresh rate of my screen (i.e. 40fps at 120hz) but achieving perfect frame pacing is impossible with a normal frame cap. I've heard of dxgi's sync interval option that mimics this but is it still relevant? To be particular, im using kwin/wayland and i've heard that on wayland, the compositor may override dxvk's sync behaviour for its own. Are these claims even true? And what if I run the game using xwayland? Is perfect framepacing at a fractional fps limit (like 40fps on 120hz) a myth on linux?
Also, my current setup on my windows machine is to use nvidia's 1/2 refresh sync (30fps on 60hz) with rtss cap at 30fps using the front-edge-sync cap method. This gives decent input latency with godly smoothness. Is it possible to achieve this on my linux machine at 40fps, 120hz?
Or must I resort to Gamescope, if that works at all? TIA!