An application demonstrating Intel® Adaptive Sync along with a library that allows the developer to query and set Adaptive Sync settings is available on GitHub*GameTechDev
Intel support of Adaptive Sync reduces stuttering and tearing for more elegant gameplay for those with monitors capable of supporting it. With the Microsoft DirectX Graphics Infrastructure 1.5, coupled with 11th-generation Intel® Processor Graphics, enabling Adaptive Sync is possible for every game.
Without Adaptive Sync there are two options. One is to send a frame to the display hardware as soon as it is ready. This can result in an image that appears torn because we actually replaced the image being scanned out to the display in the middle of scanning out the previous image. To eliminate tearing, we can instead require that the frame be updated at vertical synchronization (Vsync) intervals. The downside with this is that it can introduce latency in the displayed frame because we have to have the completed image ready for display by the time the Vsync occurs or wait until the next one. Adaptive Sync can minimize both of these problems by allowing the image to be displayed any time within an interval when the rendered image is permitted to be updated. As soon as the previous frame is completed the new frame will be displayed, and the previous frame will remain the displayed frame until the new frame is ready for display.
To take advantage of Adaptive Sync in your game there are a few requirements:
When implementing Adaptive Sync in DirectX 12, the DXGI Present() call will take care of the majority of work, but it is essential that the sync interval is set to 0 so the frame is sent immediately when finished:
When in windowed mode, tearing flags should be provided to the swap chain description, present call, and buffer resize:
swapChainDesc.Flags = m_tearingSupport ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0; UINT presentFlags = (m_tearingSupport && m_windowedMode) ? DXGI_PRESENT_ALLOW_TEARING : 0;
Along with being supported within the game, Adaptive Sync support will need to be enabled in the Intel Graphics Control Panel (Intel GCP):
Figure 2. Intel® Graphics Control Panel (Intel® GCP) 3D global settings, which contains the flag for enabling Adaptive Sync.
Relevant reading from Microsoft* on Adaptive Sync:
I would like to thank Errin Miller, Adam Lake, and Dave Bookout for their contributions to this article.
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804