[idd] driver: improve reInit logic on failure

This commit is contained in:
Geoffrey McRae 2025-03-29 00:56:16 +00:00
parent f26fa17bc1
commit 75f07cb28c

View File

@ -39,6 +39,7 @@ CIndirectMonitorContext::~CIndirectMonitorContext()
void CIndirectMonitorContext::AssignSwapChain(IDDCX_SWAPCHAIN swapChain, LUID renderAdapter, HANDLE newFrameEvent) void CIndirectMonitorContext::AssignSwapChain(IDDCX_SWAPCHAIN swapChain, LUID renderAdapter, HANDLE newFrameEvent)
{ {
reInit:
m_swapChain.reset(); m_swapChain.reset();
m_dx11Device = std::make_shared<CD3D11Device>(renderAdapter); m_dx11Device = std::make_shared<CD3D11Device>(renderAdapter);
if (FAILED(m_dx11Device->Init())) if (FAILED(m_dx11Device->Init()))
@ -59,9 +60,9 @@ void CIndirectMonitorContext::AssignSwapChain(IDDCX_SWAPCHAIN swapChain, LUID re
return; return;
case CD3D12Device::RETRY: case CD3D12Device::RETRY:
WdfObjectDelete(swapChain); m_dx12Device.reset();
m_devContext->ReplugMonitor(); m_dx11Device.reset();
return; goto reInit;
} }
if (!m_devContext->SetupLGMP(alignSize)) if (!m_devContext->SetupLGMP(alignSize))