summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineD3D11
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-08-13 05:00:42 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-08-13 05:00:42 +0000
commit97b32f52cc123544a1352527c2509c804fd3d190 (patch)
tree6fe5dc267b8a9087df2afe9bca871f9607438391 /Graphics/GraphicsEngineD3D11
parentD3D11 backend: enabled multiple swap chain support (diff)
downloadDiligentCore-97b32f52cc123544a1352527c2509c804fd3d190.tar.gz
DiligentCore-97b32f52cc123544a1352527c2509c804fd3d190.zip
D3D12 backend: enabled multiple swap chain support
Diffstat (limited to 'Graphics/GraphicsEngineD3D11')
-rw-r--r--Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp2
-rw-r--r--Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp52
2 files changed, 8 insertions, 46 deletions
diff --git a/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp b/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp
index 40a3eb16..87ffbdc5 100644
--- a/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp
@@ -315,7 +315,7 @@ void EngineFactoryD3D11Impl::CreateSwapChainD3D11(IRenderDevice* pDev
if (pDeviceContextD3D11->GetSwapChain() != nullptr && SCDesc.IsPrimary)
{
LOG_ERROR_AND_THROW("Another swap chain labeled as primary has already been created. "
- "There must be only one primary swap chain.");
+ "There must only be one primary swap chain.");
}
auto* pSwapChainD3D11 = NEW_RC_OBJ(RawMemAllocator, "SwapChainD3D11Impl instance", SwapChainD3D11Impl)
diff --git a/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp
index 225e3a98..0ffc8070 100644
--- a/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp
@@ -21,7 +21,6 @@
* of the possibility of such damages.
*/
-#include <array>
#include "pch.h"
#include "SwapChainD3D11Impl.h"
#include "RenderDeviceD3D11Impl.h"
@@ -144,38 +143,9 @@ void SwapChainD3D11Impl::UpdateSwapChain(bool CreateNew)
VERIFY(pDeviceContext, "Immediate context has been released");
if (pDeviceContext)
{
- auto *pImmediateCtxD3D11 = pDeviceContext.RawPtr<DeviceContextD3D11Impl>();
- bool RebindRenderTargets = false;
- bool UnbindRenderTargets = false;
- if (m_SwapChainDesc.IsPrimary)
- {
- RebindRenderTargets = UnbindRenderTargets = pImmediateCtxD3D11->IsDefaultFBBound();
- }
- else
- {
- std::array<ITextureView*, MaxRenderTargets> pOrigRTVs = {};
- RefCntAutoPtr<ITextureView> pOrigDSV;
- Uint32 NumRenderTargets = 0;
- pImmediateCtxD3D11->GetRenderTargets(NumRenderTargets, pOrigRTVs.data(), &pOrigDSV);
- for (Uint32 i=0; i < NumRenderTargets; ++i)
- {
- if (pOrigRTVs[i] == m_pRenderTargetView)
- UnbindRenderTargets = true;
- }
- if (pOrigDSV == m_pDepthStencilView)
- UnbindRenderTargets = true;
-
- RebindRenderTargets = NumRenderTargets == 1 && pOrigRTVs[0] == m_pRenderTargetView && pOrigDSV == m_pDepthStencilView;
-
- for(auto pRTV : pOrigRTVs)
- {
- if (pRTV != nullptr)
- pRTV->Release();
- }
- }
-
- if (UnbindRenderTargets)
- pImmediateCtxD3D11->ResetRenderTargets();
+ auto* pImmediateCtxD3D11 = pDeviceContext.RawPtr<DeviceContextD3D11Impl>();
+ ITextureView* pBackBufferRTVs[] = {m_pRenderTargetView};
+ bool RebindRenderTargets = UnbindRenderTargets(pImmediateCtxD3D11, pBackBufferRTVs, 1, m_pDepthStencilView);
// Swap chain cannot be resized until all references are released
m_pRenderTargetView.Release();
@@ -214,19 +184,11 @@ void SwapChainD3D11Impl::UpdateSwapChain(bool CreateNew)
CreateRTVandDSV();
- if (RebindRenderTargets)
+ if (m_SwapChainDesc.IsPrimary && RebindRenderTargets)
{
- if (m_SwapChainDesc.IsPrimary)
- {
- // Set default render target and viewport
- pImmediateCtxD3D11->SetRenderTargets(0, nullptr, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
- pImmediateCtxD3D11->SetViewports(1, nullptr, 0, 0);
- }
- else
- {
- ITextureView* pRTVs[] = {GetCurrentBackBufferRTV()};
- pImmediateCtxD3D11->SetRenderTargets(1, pRTVs, GetDepthBufferDSV(), RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
- }
+ // Set default render target and viewport
+ pImmediateCtxD3D11->SetRenderTargets(0, nullptr, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
+ pImmediateCtxD3D11->SetViewports(1, nullptr, 0, 0);
}
}
catch (const std::runtime_error &)