From 69dd05b2698028c86f2b4b83b82105dbc7550819 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 18 Mar 2018 20:39:14 +0100 Subject: [PATCH] [dxgi] Fix back buffer destruction The back buffer needs to be deleted explicitly because on the way it is created. Fixes reference counting issues in applications which resize the back buffer at least once. --- src/dxgi/dxgi_swapchain.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp index 4a04b81b..30f97663 100644 --- a/src/dxgi/dxgi_swapchain.cpp +++ b/src/dxgi/dxgi_swapchain.cpp @@ -269,6 +269,7 @@ namespace dxvk { HRESULT DxgiSwapChain::CreateBackBuffer() { + // Figure out sample count based on swap chain description VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_1_BIT; if (FAILED(GetSampleCount(m_desc.SampleDesc.Count, &sampleCount))) { @@ -276,6 +277,9 @@ namespace dxvk { return E_INVALIDARG; } + // Destroy previous back buffer before creating a new one + m_backBuffer = nullptr; + if (FAILED(m_presentDevice->CreateSwapChainBackBuffer(&m_desc, &m_backBuffer))) { Logger::err("DxgiSwapChain: Failed to create back buffer"); return E_FAIL;