Sticky Vsync Problem / Full G-Sync Support

UPDATE: Enabling triple buffering (leaving vsync enabled) in Nvidia control panel resolves the ‘sticky vsync’ behaviour described below. Thanks again to @Steve_Clogg_PACK_LEA for providing the solution!

Part bug report, part feature request. I’m 100% sure this won’t be acted upon in any way but there’s no point me complaining about it if I’m not going to at least log it, so here we go.

TL;DR: Please add the ability to completely turn off vsync inside Zwift, because it seems to be causing an issue with G-Sync.

As everyone who uses Zwift on a PC will know, the frame rate is extremely variable. Obviously specs matter, but even on high end components the frame rate can be very high or very low depending on something as fundamental as the camera angle being used, but mainly it appears to be down to the number of other riders on screen (seemingly to do with drafting/positional calculations rather than polygon count). To combat this and avoid both the tearing and/or stutter associated with vsync on/off, I use adaptive sync. Or more accurately Nvidia’s implementation of G-Sync on a Freesync monitor. On my particular monitor this does a fantastic job of smoothing out the frame rate fluctuations most of the time.

The optimal for G-Sync as investigated by Blur Busters involves turning vsync ON in the Nvidia settings but OFF in-game:

I cannot turn vsync off in Zwift, which I believe is the reason I frequently get see an issue where the frame rate drops and gets stuck at 50% of my monitor’s refresh rate, which is traditional vsync behaviour. It does not ‘release’ back to a variable frame rate unless I cycle through the cameras in game (to helicam and back normally does the trick). I can often force this ‘sticky vsync’ behaviour by bringing up the menu or taking a screenshot, both of which cause a frame rate drop that is sometimes significant enough to go below 50% refresh rate.

I’ve tried every conceivable setting in the Nvidia Control Panel and aside from turning off both G-Sync and vsync - therefore totally disabling adaptive sync and defeating the point - this problem always occurs because Zwift seems to use vsync by default, and reacts to G-Sync as though vsync is still enabled. I’m on a Windows 10 PC with the latest Nvidia drivers on a GTX 1660 connected to a Pixio PX275h over DisplayPort. In Zwift I use the 2160p option. I know someone seeing the same behaviour on a genuine Gsync monitor, so I don’t believe this issue is limited to my setup.

For reference I’ve checked all this with the chaps at Blur Busters who have provided this link with some developer advice:

Thanks for the detailed write up. And pointed to the developer advice.

I am sure the Zwift developers like @Jon_Mayfield will find this interesting and helpful.

1 Like

Always best to use the new nvidia framerate limiter and set it a few frames below the monitor max refresh if using a gsync / freesync monitor. As zwift uses openGL when you see a 50% frame drop is because triple buffering is not enabled and maybe the monitor has freesync disabled in its settings (or the nvidia control panel).

1 Like

I’ve tried capping at 3fps below max as per the Blur Busters recommendations so that I’m always in adaptive sync range but it didn’t make any difference, my frame rate can still get ‘stuck’ at 50% of max refresh rate for a prolonged period of time. It does ‘release’ most of the time, or I can sort it by switching camera. Freesync is enabled on the monitor and G-Sync is enabled in Nvidia control panel, no problems there. To be clear, adaptive sync does work beautifully for me in Zwift, with the exception of the issue described. I will try enabling triple buffering in NVCP again to see if that helps, though again the recommendation is for that to be turned off in-game.

Now that Nvidia allows leveraging of Freesync (with the right GPU/cable/monitor!), Zwifters on PC have affordable access to a completely smooth experience irrespective of frame rate, and it’s really great. There’s just this one bug that’s preventing it being perfect.

You bloody legend, I need to do a bit more testing but I think this is it. I’ve not messed with this option for yonks (and like I said, it’s specifically advised against in the recommended G-Sync setup) but my theory is this:

  • Zwift appears to use vsync with triple buffering by default.
  • Enabling G-Sync seems to override Zwift’s own designed behaviour.
  • You end up with a sort of hybrid; even with vsync left at the default of ‘Use the 3D application setting’ (ie let Zwift decide), adaptive sync does work but with some legacy vsync characteristics, like a refresh rate cap but also my 50% frame rate issue.
  • G-Sync on with vsync off introduces tearing, so it does need to be turned on one way or another.
  • Forcing triple buffering on manually in NVCP appears to reset those vsync characteristics, meaning the cap is still there, no tearing, and no more sticky vsync. Best of all worlds!

Happy days. Gonna try it out a few more times before I mark this solved and update the OP. Thanks Steve!


Annoyingly this behaviour comes back when you use other Nvidia features, like image sharpening. :cry: