D3D11/12/WGPU: Retried refused swap chain resize. D3D12/MTL/VK/WGPU: Fatal on failed pipeline creation. (#3985)

This commit is contained in:
Branimir Karadžić
2026-09-17 14:14:56 +00:00
committed by GitHub
parent b380f0ee73
commit 5777fe1f66
8 changed files with 111 additions and 20 deletions
+28 -10
View File
@@ -3784,6 +3784,8 @@ namespace bgfx { namespace d3d12
) );
}
BGFX_FATAL(NULL != pso, Fatal::InvalidShader, "Failed to create compute PSO!");
m_pipelineStateCache.add(hash, pso);
ID3DBlob* blob;
@@ -7734,6 +7736,8 @@ namespace bgfx { namespace d3d12
return;
}
const SwapChain prev = m_desc;
m_desc = _desc;
m_nwh = _desc.nwh;
@@ -7760,20 +7764,22 @@ namespace bgfx { namespace d3d12
{
BX_TRACE("Failed to resize swap chain, hr 0x%08x.", hr);
#if !BX_PLATFORM_LINUX
if (NULL != m_frameLatencyWaitableObject)
{
CloseHandle( (HANDLE)m_frameLatencyWaitableObject);
m_frameLatencyWaitableObject = NULL;
}
#endif // !BX_PLATFORM_LINUX
m_descPending = _desc;
m_needToRecreateSwapChain = true;
m_desc = prev;
m_desc.depth = _desc.depth;
m_state = D3D12_RESOURCE_STATE_PRESENT;
m_swapChainFormat = getSwapChainDesc().format;
createSwapChainViews();
DX_RELEASE(m_swapChain, 0);
m_swapChainFormat = DXGI_FORMAT_UNKNOWN;
m_num = 0;
return;
}
m_needToRecreateSwapChain = false;
m_state = D3D12_RESOURCE_STATE_PRESENT;
m_swapChainFormat = scd.format;
@@ -9276,6 +9282,18 @@ namespace bgfx { namespace d3d12
renderDocTriggerCapture();
}
#if BX_PLATFORM_WINDOWS
for (uint32_t ii = 1, num = m_numWindows; ii < num; ++ii)
{
FrameBufferD3D12& frameBuffer = m_frameBuffers[m_windows[ii].idx];
if (frameBuffer.m_needToRecreateSwapChain)
{
frameBuffer.update(frameBuffer.m_descPending);
}
}
#endif // BX_PLATFORM_WINDOWS
BGFX_D3D12_PROFILER_BEGIN_LITERAL("rendererSubmit", kColorFrame);
int64_t timeBegin = bx::getHPCounter();