d3d12: fixed window resize handling

Fixes https://github.com/libsdl-org/SDL/issues/6355
This commit is contained in:
Sam Lantinga 2022-10-09 11:42:39 -07:00
parent 490c20f93f
commit f99fc3268e

View file

@ -173,6 +173,7 @@ typedef struct
ID3D12CommandQueue *commandQueue; ID3D12CommandQueue *commandQueue;
ID3D12GraphicsCommandList2 *commandList; ID3D12GraphicsCommandList2 *commandList;
DXGI_SWAP_EFFECT swapEffect; DXGI_SWAP_EFFECT swapEffect;
UINT swapFlags;
/* Descriptor heaps */ /* Descriptor heaps */
ID3D12DescriptorHeap* rtvDescriptorHeap; ID3D12DescriptorHeap* rtvDescriptorHeap;
@ -356,6 +357,7 @@ D3D12_ReleaseAll(SDL_Renderer * renderer)
} }
data->swapEffect = (DXGI_SWAP_EFFECT) 0; data->swapEffect = (DXGI_SWAP_EFFECT) 0;
data->swapFlags = 0;
data->currentRenderTargetView.ptr = 0; data->currentRenderTargetView.ptr = 0;
data->currentSampler.ptr = 0; data->currentSampler.ptr = 0;
@ -1231,6 +1233,7 @@ D3D12_CreateSwapChain(SDL_Renderer * renderer, int w, int h)
} }
data->swapEffect = swapChainDesc.SwapEffect; data->swapEffect = swapChainDesc.SwapEffect;
data->swapFlags = swapChainDesc.Flags;
done: done:
SAFE_RELEASE(swapChain); SAFE_RELEASE(swapChain);
@ -1281,10 +1284,16 @@ D3D12_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
D3D12_RENDER_TARGET_VIEW_DESC rtvDesc; D3D12_RENDER_TARGET_VIEW_DESC rtvDesc;
D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor; D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor;
/* Release resources in the current command list */
D3D_CALL(data->commandList, Close);
D3D12_ResetCommandList(data);
D3D_CALL(data->commandList, OMSetRenderTargets, 0, NULL, FALSE, NULL);
/* Release render targets */ /* Release render targets */
for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) { for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) {
SAFE_RELEASE(data->renderTargets[i]); SAFE_RELEASE(data->renderTargets[i]);
} }
/* The width and height of the swap chain must be based on the display's /* The width and height of the swap chain must be based on the display's
* non-rotated size. * non-rotated size.
*/ */
@ -1303,7 +1312,7 @@ D3D12_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
0, 0,
w, h, w, h,
DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN,
0 data->swapFlags
); );
if (result == DXGI_ERROR_DEVICE_REMOVED) { if (result == DXGI_ERROR_DEVICE_REMOVED) {
/* If the device was removed for any reason, a new device and swap chain will need to be created. */ /* If the device was removed for any reason, a new device and swap chain will need to be created. */