Experimental HOWTO For Advanded Users
DIY Quick Frame Transport is now possible on Windows PCs
--Mainly benefits VSYNC ON motion or refreshrate-synchronized framerates--
As of 2018, manufacturers have not yet automated this (e.g. embedding in EDID and DisplayID) so this is undocumented.
By default, Windows times frame presentation at the end of a refresh cycle. But to reduce lag, you want to inputdelay the next frame as long as possible (to make the input read closer to the next refresh cycle). So you want to modify Microsoft's default Present() behavior to beginning of the NEXT refresh cycle. Basically move the presentation timing from start of VBI to end of VBI. This wasn't possible before, but now it's made possible by RTSS Scanline Sync!
It works on any video cable for a monitor supporting large VTs, and reduces VSYNC ON input lag further.
You just have to use RTSS scanline sync to force Windows to do end-of-VBI Present() instead of start-of-VBI Present()
Read RTSS Scanline Sync HOWTO
- Remember, you only want QFT to reduce the lag of VSYNC ON even further.
- If you have VRR, try using that instead because it's much easier than doing this QFT hack.
- Some monitors will be able to QFT beyond max-Hz (e.g. LG 27GK750-B is capable of a slight QFT effect of 1/280sec refresh cycle delivery at 240Hz). Monitors supporting only "CVT-Reduced" or "Reduced Blanking" at max-Hz, will NOT
support Quick Frame Transport.
Until vendors build in user-friendly QFT into their displays, this will be an advanced-user tweak.
By using VSYNC OFF + RTSS Scanline Sync + Custom Resolution, it's possible for end-users to create a Do-It-Yourself Quick Frame Transport mode (which works on VGA, DVI, HDMI, DisplayPort) on certain monitors. Basically, this is custom beam raced tearlines that raster-synchronizes Present() to put tearlines right above the top edge of the screen on a large-blanking-interval signal.
Advanced-User Large blanking interval trick for DIY Quick Frame Transport (QFT) with RTSS Scanline Sync
1. Use a Custom Resolution Utility (CRU
) like NVIDIA Custom Resolution or ToastyX CRU. Increase the size of your blanking interval. Gradually increase and test until your monitor stops syncing. Sometimes you can go really huge (2:1 ratios).
2. Then use RTSS Scanline Sync to re-time the frame presentation to the end of the blanking interval, to obtain the reduced-lag benefits in real-world games.
- Do not bother with below trick doing this unless you're a CRU Wizard.
- Do not bother with below trick unless you know your monitor supports ultralarge blanking intervals larger than the vertical resolution, such as "Vertical Total 2200" for 1080p.
- Do not bother with below trick if you don't understand "Vertical Total" or "Front Porch" or "Back Porch" or "Horizontal Scan Rate".
- QFT behavior is already built into VRR, so use VRR instead. It's easier to use GSYNC or FreeSync as a much easier QFT method (e.g. 60fps cap at 240Hz) since the VRR provides a very easy natural QFT mechanism. That's why lag is very low on GSYNC/FreeSync since all refresh cycles (no matter the current Hz=fps) are always delivered at max-Hz velocity.
Very few monitors support large VBIs at their maximum non-VRR refresh rate. However, a few of them do -- e.g. delivering a 60Hz refresh cycle in 1/120sec on a monitor that doesn't support 120Hz. (This is rare, but occasionally happens). Alternatively, if you're using large blanking intervals to reduce strobe crosstalk (squeezing LCD GtG into VBI to reduce artifacts with a blur reduction backlight) -- then it may be more favourable to use VSYNC OFF and adjust scan line sync late into VBI. This creates a "Quick Frame Transport" effect. Normally, Microsoft and graphics drivers does frame presentation at end of refresh cycle (bottom edge of screen), rather than beginning of refresh cycle (top edge of screen). By delaying input reads-render-present late into a superlarge VBI, via RTSS scanline frame rate capping late into VBI (small negative offsets), one can reduce lag further thanks to the Quick Frame Transport effect of the use of an ultralarge blanking interval (Example: 60Hz refresh cycles transmitted over the cable in 1/120sec via the use of an ultralarge VBI the same size of the visible image). Quick Frame Transport (QFT) is part of the HDMI 2.1 specification but is possible to DIY on any cable with Custom Resolution + Large VBI + RTSS scanline sync. Displays that are intentionally designed to support QFT works best with this trick, but I've run into some displays that have undocumented QFT capability on one of its inputs, e.g. certain 60Hz HDTVs that supports 120Hz input but the panel can't support 120Hz. (Basically frameskips, as in only displays 60 frames out of 120 per second); those displays can often be tricked into a QFT 60Hz signal (via ultralarge VBI -- maintaining same exact 135KHz horizontal scanrate but halving the vertical refresh rate from 120Hz to 60Hz) -- that speeds up delivery of 60Hz refresh cycles to 1/120sec -- reducing frame delivery latency by 8ms. If you shift your inputread-render-deliver pipeline to align with the frame transmission (presenting framebuffer very late in VBI, right on time for visible frame transmission), that reduces the input lag of VSYNC ON / Fast Sync / Enhanced Sync by 8ms without raising refresh rate on displays that supports a 2x QFT acceleration factor (documented or undocumented). First, play with custom resolutions until you've got the biggest supernova-sized galactic-sized blanking interval your monitor will sync to -- a blanking interval big enough to drive a battlecruiser through. Next, start your game, make sure it's correctly using that hacked custom frankenstein signal timings & resolution you created, THEN finally calibrate RTSS until your tearline shows up near top edge of screen, THEN calibrate it until it barely disappears above top edge. Now you've created a fixed-Hz QFT sync mode!
IMPORTANT: This DIY Quick Frame Transport trick only works if your monitor supports large vertical totals at the refresh rate you want to run at. Vertical totals twice the active resolution may reduce VSYNC ON input lag by half a refresh cycle on certain displays. e.g. VT2250 instead of default VT1125 for a 1080p signal will reduce average VSYNC ON lag by ~8ms for 60Hz VSYNC ON -- soley by the Quick Frame Transport effect -- with no changes to framebuffer backpressures!
IMPORTANT #2: Quick Frame Transport mainly helps framerate-synchronized motion, e.g. if you want an even lower-lag VSYNC ON