Fix a crash with D3D11 SWAP_EFFECT_FLIP_DISCARD swapchains. Closes #2055

* DXGI is entangled with the API unfortunately, such that for D3D11
  DXGI_SWAP_EFFECT_FLIP_DISCARD can only access buffer 0 (like
  DXGI_SWAP_EFFECT_DISCARD) but for D3D12 it can access any buffer. This is
  naturally undocumented.
This commit is contained in:
baldurk
2020-09-20 11:23:06 +01:00
parent aaae5d4a38
commit 92040f4636
+6 -1
View File
@@ -365,8 +365,13 @@ void WrappedIDXGISwapChain4::WrapBuffersAfterResize()
int bufCount = desc.BufferCount;
if(desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD)
// discard swap effects only allow querying buffer 0, but only on D3D11 - on D3D12 they can (and
// must) still query the full set of buffers.
if(m_pDevice->GetFrameCapturer()->GetFrameCaptureDriver() == RDCDriver::D3D11 &&
(desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD || desc.SwapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD))
{
bufCount = 1;
}
RDCASSERT(bufCount < MAX_NUM_BACKBUFFERS);