[Originally posted on 07/26/17.]
A key focus in PC gaming in recent years has been providing smooth, responsive gaming experiences. The goal has been to produce consistent and fluid animation in combination with minimal input lag—the shortest possible delay between pressing a key and seeing a response on-screen.
Since the beginning of PC graphics, one of the biggest problems on this front has been synchronization between the game’s animation and the display’s update rate. Most displays update themselves at a fixed rate, typically at 60Hz or 60 times per second, in fixed steps. Meanwhile, games and other 3D graphics applications can produce new frames of animation at different rates, and those frame rates tend to vary over time. Often, much of what we perceive as slowdowns or sluggishness when gaming involves poor interactions between these two timing loops.
In fact, on a 60Hz display, animation can look more uneven when a game is running at 40 FPS than at 30 FPS, because at 40 FPS, the display is updated in an elliptical pattern:
*Game images from Quake Champions1
Versus a more even pattern at 30 FPS:
*Game images from Quake Champions
You’re seeing a less pleasing pattern of animation, even though the GPU is cranking out frames at a higher rate, thanks to a timing sync issue between the game and the display.
We’ve come up with some outstanding technology to address this problem, most notably Radeon™ FreeSync technology for compatible monitors with variable refresh rates. I could talk about the theory all day, but you have to see FreeSync in action in order to appreciate it properly. Once you’ve experienced it, you won’t ever want to go back to gaming on a fixed-refresh display.
FreeSync as it stands now is excellent, but we can do even more to help owners of fixed- and variable-refresh displays alike. We’ve been working on this problem ahead of the Radeon™ Vega RX graphics launch, and the result is a new feature known as Enhanced Sync. Enhanced Sync is included in Radeon™ Software Crimson ReLive Edition 17.7.2, and it’s supported on the upcoming Radeon RX Vega cards and on “Polaris”-based cards in the Radeon™ RX 400 and Radeon™ RX 500 series.
Enhanced Sync looks to tackle two different aspects of the GPU-display synchronization task, with the goal of providing a better combination of responsiveness and image quality.
The first problem it tackles is what happens when the game wants to run faster than the display’s refresh rate. It’s nice when your PC is able to produce frames faster than your monitor can display them, but dealing with that situation still involves compromises.
One way to handle this scenario is with traditional vsync, where the display is updated with a new, completed frame at each refresh interval. Doing so looks nice and generally produces smooth animation, but it also effectively caps the game’s frame rate at the speed of the display refresh. For instance, on a 60Hz display, you’d be limited to 60 FPS. For many games, that also means that user inputs are only sampled 60 times per second, because the speed of the game loop is tied to the frame rate. As a result, traditional vsync can increase input lag and reduce responsiveness, which is why many gamers elect to disable vsync.
Trouble is, going without vsync has its own problems. Without vsync, the driver will flip to a new display buffer as soon as the GPU completes a frame—even if the display is in the middle of drawing that frame on the screen. This approach cuts input lag, but it also leads to a nasty artifact called tearing, where portions of two or more frames are shown on-screen at once, often with visible seams running horizontally across the display. At high frame rates, one may see portions of many different frames on the screen at once, seriously compromising image integrity.
*Game images from Quake Champions
Enhanced Sync is a third approach to this problem. It lets the game run as fast as it wants without capping frame rates. With Enhanced Sync enabled, a game could in theory run at 240 FPS on a 60Hz display without issue. But Enhanced Sync doesn’t tear in this case. Instead, when it comes time for the monitor to draw a new frame, the most recently completed frame is displayed on the screen. Some older frames may be dropped if they are not needed. This approach maintains smooth animation, reduces tearing, and improves responsiveness by reducing input lag.
To get a sense of how well it works, we measured input lag for the two traditional vertical refresh sync modes (on and off) against Enhanced Sync in Overwatch using a high-speed camera. In this case, the GPU was able to run Overwatch at about 120 FPS unconstrained. These results show the amount of time that passes between a click and a response for each mode. As you can see, Enhanced Sync produces click-to-response times similar to vsync off—without compromising visual integrity by tearing2.
So that’s the first problem Enhanced Sync addresses, and I think it’s a better solution than the traditional approaches to vsync.
The second problem Enhanced Sync addresses is at the other end of the performance spectrum: what happens when the game runs much slower than the display’s refresh rate? Low frame rates present a different sort of challenge.
With traditional vsync, if the system can’t produce a new frame in time for the monitor’s next refresh interval, then the old frame is repeated again, and we wait another entire interval before updating the screen. Those waits can add up. On a 60Hz display, if the system can’t get a frame out every interval, then it’s immediately limited to 30 FPS or even 20 FPS after that. Frame rates will move up and down in stair-step fashion, and we tend to perceive this effect as stutter or slowdowns (the technical term for this stair-step effect is quantization). Worse still, stepping down to such low frame rates increases input lag and compromises responsiveness.
Enhanced Sync deals with this problem by taking a dynamic approach. Generally, Enhanced Sync will stay synchronized to the display in order to avoid tearing. If the frame rate drops far enough below the display’s refresh rate, though, it will dynamically choose to allow tearing in order to get new information on screen as soon as possible and to avoid that stair-step effect. Enabling tearing is a compromise, but it’s arguably the best way of dealing with this difficult circumstance3.
When Enhanced Sync does allow tearing, users should typically only see a single tearing “seam” on the screen at once, since the frame rate is low. And Enhanced Sync will automatically choose to stop allowing tearing once the game’s frame rate returns to a more comfortable level.
So Enhanced Sync improves on traditional vsync by combining two techniques. At high frame rates, it aims to provide a better mix of visual integrity and responsiveness. At lower frame rates, it uses a dynamic algorithm minimize both stuttering and input lag when the going gets tough.
At this point, you may be wondering how Enhanced Sync interacts with our FreeSync variable-refresh display technology. I’m happy to report that Enhanced Sync works alongside FreeSync to provide even better experiences.
Within the display’s FreeSync range, say 30Hz to 90Hz on some displays, FreeSync operates as usual. Frames are displayed when ready, at low latency, and with no tearing.
When the game’s frame rate exceeds the display’s peak refresh rate, Enhanced Sync works like it would with a fixed-refresh monitor in the same situation. The game is free to run as fast as it wants, uncapped, and the latest complete frame is displayed. If your monitor’s peak refresh rate is 90Hz, the game could still run at 120 FPS—without tearing, and with improved responsiveness versus traditional vsync at 90Hz.
At the other end of the spectrum, when the frame rate drops well below the FreeSync display’s minimum refresh rate, one of two things will happen.
On displays that support low frame-rate compensation (LFC), the FreeSync LFC algorithm kicks in to mitigate stutter without tearing. If LFC isn’t available, then Enhanced Sync will either sync or tear, depending on the application’s vsync settings.
I’m especially excited about the combination of Enhanced Sync and FreeSync with LFC. I think of it as a “best of all worlds” sync scenario, providing smooth animation at low latency with no tearing across the broadest possible range. FreeSync is already quite solid, but Enhanced Sync makes it even better.
Happily, Enhanced Sync is supported on all recent flavors of DirectX®, from 9 through 12, and it can be enabled in Radeon™ Settings under the vertical refresh sync drop-down menu. If you have a supported Radeon™ GPU, you can download the latest release of Radeon Software Crimson Edition and try it out for yourself. I think you’ll like it.
Scott Wasson, Sr. Manager, Technical Marketing for the Radeon Technologies Group at AMD. His postings are his own opinions and may not represent AMD’s positions, strategies, or opinions. Links to third party sites and references to third party trademarks are provided for convenience and illustrative purposes only. Unless explicitly stated, AMD is not responsible for the contents of such links, and no third party endorsement of AMD or any of its products is implied.