VRR in conjunction V-sync
Posted: 19 Aug 2024, 08:18
Can someone clarify how they interact when both are enabled? To my understanding, V-sync waits for the VBLANK signal to swap buffers. VBLANK signals are straightforward with a fixed refresh rate, as they occur at set intervals (33.3ms, 16.6ms respective to 30hz 60hz,...) However, I'm curious about how variable refresh rate communicates the VBLANK signal from the GPU.
I've learned from Chief's post over here:
It just make more sense with VSYNC OFF, in which case the API can just present whenever a frame is finished drawing and control the scan out. Of course that will lead to tearing if outputed frame rate exceeds max refresh rate; a frame limiter would ensure that doesn't happend to prevent tearing.
I've learned from Chief's post over here:
So the API's present or swap buffers calls are controlling the starting of a new scanout in VRR, not a fixed interval I'm I correct ? Well in the case of VSYNC ON those present calls actually wait for the VBLANK signal to execute, which doesn't exist since vrr is just extending the VBI and wait for a present call to start a new scan out.Chief Blur Buster wrote: ↑10 Dec 2018, 13:27
TL;DR for software developers, Direct3D Present() and OpenGL glutSwapBuffers() begins delivering the refresh cycle practically immediately, as long as your API-call interval is within VRR range, e.g. An interval 1/30sec thru 1/144sec for a "30Hz-144Hz" VRR display -- means the display refresh cycle, is indeed software-triggered by your API timing! Yep, you, my dear software developer, are the master of the refresh cycle on a FreeSync/GSYNC display!
It just make more sense with VSYNC OFF, in which case the API can just present whenever a frame is finished drawing and control the scan out. Of course that will lead to tearing if outputed frame rate exceeds max refresh rate; a frame limiter would ensure that doesn't happend to prevent tearing.

