title: What is the behavior of the DXGI_PRESENT_ALLOW_TEARING flag?
body: <p>The documentation for the DXGI 1.5 flag <code>DXGI_PRESENT_ALLOW_TEARING</code> is somewhat sparse. <a href="https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/variable-refresh-rate-displays" rel="nofollow noreferrer">The MSDN article on variable refresh rate displays</a> has the following to say about <em>when</em> to use the flag:</p>
  <p><em>&quot;Support for variable refresh rate displays is achieved by setting certain flags when creating and presenting the swap chain.&quot;</em></p>
  <p><em>&quot;It is recommended to always pass this tearing flag when using sync interval 0 if CheckFeatureSupport reports that tearing is supported and the app is in a windowed mode - including border-less fullscreen mode.&quot;</em></p>
  <p>These descriptions make it clear that apps should use this flag if they want to support variable refresh rate in windowed mode, but don't go into very much detail on how exactly a program will behave differently if the flag is enabled or disabled. I have several relevant questions:</p>
  <ol>
  <li>Is this flag always required to get variable refresh for windowed swap chains, or can the system ever inject support automatically like it does for fullscreen applications (e.g., when &quot;enabled for windowed and fullscreen mode&quot; is enabled in the Nvidia control panel)?</li>
  <li>Can the system use this flag to allow multiple swap chains running at different refresh rates to co-exist without tearing or stuttering on the same display? E.g., a 120hz monitor playing back a 30hz video and a 24hz video at the same time without tearing or stuttering.</li>
  <li>Can this flag be used to produce actual tearing on monitors that don't support variable refresh rate?</li>
  <li>If this flag is <em>always</em> useful when running on compatible hardware in windowed mode with <code>presentInterval = 0</code>, then why can't the system enable it automatically under those circumstances?</li>
  </ol>