Skip to content

Commit f1a3a11

Browse files
hzqstTheMostDiligent
authored andcommitted
D3D11/D3D12: close DXGI frame-latency waitable object handles
1 parent c15d088 commit f1a3a11

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

‎Graphics/GraphicsEngineD3DBase/include/SwapChainD3DBase.hpp‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class SwapChainD3DBase : public SwapChainBase<BaseInterface>
7373

7474
~SwapChainD3DBase()
7575
{
76+
ReleaseFrameLatencyWaitableObject();
7677
if (m_pSwapChain)
7778
{
7879
// Swap chain must be in windowed mode when it is destroyed
@@ -85,6 +86,15 @@ class SwapChainD3DBase : public SwapChainBase<BaseInterface>
8586
}
8687

8788
protected:
89+
void ReleaseFrameLatencyWaitableObject()
90+
{
91+
if (m_FrameLatencyWaitableObject != NULL)
92+
{
93+
CloseHandle(m_FrameLatencyWaitableObject);
94+
m_FrameLatencyWaitableObject = NULL;
95+
}
96+
}
97+
8898
virtual void UpdateSwapChain(bool CreateNew) = 0;
8999

90100
bool Resize(Uint32 NewWidth, Uint32 NewHeight, SURFACE_TRANSFORM NewPreTransform, Int32 Dummy = 0 /*To be different from virtual function*/)
@@ -103,6 +113,9 @@ class SwapChainD3DBase : public SwapChainBase<BaseInterface>
103113

104114
void CreateDXGISwapChain(IUnknown* pD3D11DeviceOrD3D12CmdQueue)
105115
{
116+
// The previous swap chain, if any, has already been released. Close its waitable object.
117+
ReleaseFrameLatencyWaitableObject();
118+
106119
#if PLATFORM_WIN32
107120
HWND hWnd = reinterpret_cast<HWND>(m_Window.hWnd);
108121
if (m_SwapChainDesc.Width == 0 || m_SwapChainDesc.Height == 0)
@@ -282,7 +295,6 @@ class SwapChainD3DBase : public SwapChainBase<BaseInterface>
282295
}
283296
else
284297
{
285-
m_FrameLatencyWaitableObject = NULL;
286298
SetDXGIDeviceMaximumFrameLatency();
287299
}
288300
}

0 commit comments

Comments
 (0)