summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-11-09 20:48:49 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-11-09 20:48:49 +0000
commit4657c47c66b5556dd95388a7b13d1abb593e1314 (patch)
tree774b55b425847b63367c98bf616809d5da0bbcdc /Graphics/GraphicsEngineVulkan
parentUpdated method comments in OpenGL backend (diff)
downloadDiligentCore-4657c47c66b5556dd95388a7b13d1abb593e1314.tar.gz
DiligentCore-4657c47c66b5556dd95388a7b13d1abb593e1314.zip
Allowed swap chains without the depth buffer
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp5
-rw-r--r--Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp43
2 files changed, 28 insertions, 20 deletions
diff --git a/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp
index be917e0f..c4e1e6cd 100644
--- a/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/DeviceContextVkImpl.cpp
@@ -616,6 +616,11 @@ namespace Diligent
if (m_pSwapChain)
{
pVkDSV = ValidatedCast<ITextureViewVk>(m_pSwapChain->GetDepthBufferDSV());
+ if (pVkDSV == nullptr)
+ {
+ LOG_WARNING_MESSAGE("Depth buffer is not initialized in the swap chain. Clear operation will be ignored.");
+ return;
+ }
}
else
{
diff --git a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp
index b311c200..31edb0af 100644
--- a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp
@@ -104,7 +104,7 @@ SwapChainVkImpl::SwapChainVkImpl(IReferenceCounters* pRefCounters,
void SwapChainVkImpl::CreateVulkanSwapChain()
{
- auto *pRenderDeviceVk = m_pRenderDevice.RawPtr<RenderDeviceVkImpl>();
+ auto* pRenderDeviceVk = m_pRenderDevice.RawPtr<RenderDeviceVkImpl>();
const auto& PhysicalDevice = pRenderDeviceVk->GetPhysicalDevice();
auto vkDeviceHandle = PhysicalDevice.GetVkDeviceHandle();
// Get the list of VkFormats that are supported:
@@ -145,8 +145,8 @@ void SwapChainVkImpl::CreateVulkanSwapChain()
{
case VK_FORMAT_R8G8B8A8_UNORM: VkReplacementColorFormat = VK_FORMAT_B8G8R8A8_UNORM; break;
case VK_FORMAT_B8G8R8A8_UNORM: VkReplacementColorFormat = VK_FORMAT_R8G8B8A8_UNORM; break;
- case VK_FORMAT_B8G8R8A8_SRGB: VkReplacementColorFormat = VK_FORMAT_R8G8B8A8_SRGB; break;
- case VK_FORMAT_R8G8B8A8_SRGB: VkReplacementColorFormat = VK_FORMAT_B8G8R8A8_SRGB; break;
+ case VK_FORMAT_B8G8R8A8_SRGB: VkReplacementColorFormat = VK_FORMAT_R8G8B8A8_SRGB; break;
+ case VK_FORMAT_R8G8B8A8_SRGB: VkReplacementColorFormat = VK_FORMAT_B8G8R8A8_SRGB; break;
default: VkReplacementColorFormat = VK_FORMAT_UNDEFINED;
}
@@ -405,23 +405,26 @@ void SwapChainVkImpl::InitBuffersAndViews()
m_pBackBufferRTV[i] = RefCntAutoPtr<ITextureViewVk>(pRTV, IID_TextureViewVk);
}
- TextureDesc DepthBufferDesc;
- DepthBufferDesc.Type = RESOURCE_DIM_TEX_2D;
- DepthBufferDesc.Width = m_SwapChainDesc.Width;
- DepthBufferDesc.Height = m_SwapChainDesc.Height;
- DepthBufferDesc.Format = m_SwapChainDesc.DepthBufferFormat;
- DepthBufferDesc.SampleCount = m_SwapChainDesc.SamplesCount;
- DepthBufferDesc.Usage = USAGE_DEFAULT;
- DepthBufferDesc.BindFlags = BIND_DEPTH_STENCIL;
-
- DepthBufferDesc.ClearValue.Format = DepthBufferDesc.Format;
- DepthBufferDesc.ClearValue.DepthStencil.Depth = m_SwapChainDesc.DefaultDepthValue;
- DepthBufferDesc.ClearValue.DepthStencil.Stencil = m_SwapChainDesc.DefaultStencilValue;
- DepthBufferDesc.Name = "Main depth buffer";
- RefCntAutoPtr<ITexture> pDepthBufferTex;
- m_pRenderDevice->CreateTexture(DepthBufferDesc, nullptr, static_cast<ITexture**>(&pDepthBufferTex) );
- auto pDSV = pDepthBufferTex->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL);
- m_pDepthBufferDSV = RefCntAutoPtr<ITextureViewVk>(pDSV, IID_TextureViewVk);
+ if (m_SwapChainDesc.DepthBufferFormat != TEX_FORMAT_UNKNOWN)
+ {
+ TextureDesc DepthBufferDesc;
+ DepthBufferDesc.Type = RESOURCE_DIM_TEX_2D;
+ DepthBufferDesc.Width = m_SwapChainDesc.Width;
+ DepthBufferDesc.Height = m_SwapChainDesc.Height;
+ DepthBufferDesc.Format = m_SwapChainDesc.DepthBufferFormat;
+ DepthBufferDesc.SampleCount = m_SwapChainDesc.SamplesCount;
+ DepthBufferDesc.Usage = USAGE_DEFAULT;
+ DepthBufferDesc.BindFlags = BIND_DEPTH_STENCIL;
+
+ DepthBufferDesc.ClearValue.Format = DepthBufferDesc.Format;
+ DepthBufferDesc.ClearValue.DepthStencil.Depth = m_SwapChainDesc.DefaultDepthValue;
+ DepthBufferDesc.ClearValue.DepthStencil.Stencil = m_SwapChainDesc.DefaultStencilValue;
+ DepthBufferDesc.Name = "Main depth buffer";
+ RefCntAutoPtr<ITexture> pDepthBufferTex;
+ m_pRenderDevice->CreateTexture(DepthBufferDesc, nullptr, static_cast<ITexture**>(&pDepthBufferTex) );
+ auto pDSV = pDepthBufferTex->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL);
+ m_pDepthBufferDSV = RefCntAutoPtr<ITextureViewVk>(pDSV, IID_TextureViewVk);
+ }
}
VkResult SwapChainVkImpl::AcquireNextImage(DeviceContextVkImpl* pDeviceCtxVk)