


Depending on window and buffer configuration, it is possible to bypass desktop composition entirely, and directly send application frames to the screen, in the same way that exclusive fullscreen does. These are optimizations that are enabled for applications using flip model swapchains. If you’ve watched the YouTube video linked above, you’ll see talk about “Direct Flip “ and “Independent Flip “. This feature is nearly ubiquitous on recent versions of Windows 10 and on modern hardware. For an application which desires using sync interval 0, we do not recommend switching to flip model unless the IDXGIFactory5::CheckFeatureSupport API is available, and reports support for DXGI_FEATURE_PRESENT_ALLOW_TEARING. There is a second piece of functionality that was not provided in the original flip model design, but is available now, which is the ability to present at an unthrottled framerate. If you don’t require HWND-level interop between graphics components, then you don’t need blt model. An example of this would be using D3D to draw a window background, and then GDI to draw something on top, or using two different graphics APIs, or two swapchains from the same API, to produce alternating frames.

There is one piece of functionality that flip model does not provide: the ability to have multiple different APIs producing contents, which all layer together into the same HWND, on a present-by-present basis. This optimization is possible thanks to the DWM: the Desktop Window Manager, which is the compositor that drives the Windows desktop. See the original MSDN article for a high level overview of the technology. Beginning with D3D9’s FLIPEX swapeffect, and coming to DXGI through the FLIP_SEQUENTIAL swap effect in Windows 8, we’ve developed a more efficient way to put contents on screen, by sharing it directly with the desktop compositor, with minimal copies. Prior to Windows 7, the only way to present contents from D3D was to “blt” or copy it into a surface which was owned by the window or screen. What is flip model? What is the alternative?

Additionally, consider reducing the resolution of your swapchain, especially if it isn’t the primary point of user interaction (as is often the case with VR preview windows). To maintain best performance on these systems, switch from blt to flip present model. If you are doing blt presents at high framerates across hybrid GPUs, especially at high resolutions such as 4k, this additional work may affect overall performance. In the Spring Creators Update, this tearing has been fixed, at the cost of some additional work. Why now? Prior to the upcoming Spring Creators Update, blt model presents could result in visible tearing when used on hybrid GPU configurations, often found in high end laptops (see KB 3158621). In fact, we think it’s high time to reconsider whether your app actually needs a fullscreen exclusive mode, since the benefits of a flip model borderless window include faster Alt-Tab switching and better integration with modern display features. Switching to DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL or DXGI_SWAP_EFFECT_FLIP_DISCARD (aka flip model) will give better performance, lower power usage, and provide a richer set of features.įlip model presents go as far as making windowed mode effectively equivalent or better when compared to the classic “fullscreen exclusive” mode. If you are still using DXGI_SWAP_EFFECT_DISCARD or DXGI_SWAP_EFFECT_SEQUENTIAL (aka “blt” present model), it’s time to stop! It provides developer guidance on how to maximize performance and efficiency in the presentation stack on modern versions of Windows. This document picks up where the MSDN “DXGI flip model” article and YouTube DirectX 12: Presentation Modes In Windows 10 and Presentation Enhancements in Windows 10: An Early Look videos left off.
