From 4657c47c66b5556dd95388a7b13d1abb593e1314 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Sat, 9 Nov 2019 12:48:49 -0800 Subject: Allowed swap chains without the depth buffer --- .../src/DeviceContextVkImpl.cpp | 5 +++ .../GraphicsEngineVulkan/src/SwapChainVkImpl.cpp | 43 ++++++++++++---------- 2 files changed, 28 insertions(+), 20 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') 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(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(); + auto* pRenderDeviceVk = m_pRenderDevice.RawPtr(); 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(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 pDepthBufferTex; - m_pRenderDevice->CreateTexture(DepthBufferDesc, nullptr, static_cast(&pDepthBufferTex) ); - auto pDSV = pDepthBufferTex->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL); - m_pDepthBufferDSV = RefCntAutoPtr(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 pDepthBufferTex; + m_pRenderDevice->CreateTexture(DepthBufferDesc, nullptr, static_cast(&pDepthBufferTex) ); + auto pDSV = pDepthBufferTex->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL); + m_pDepthBufferDSV = RefCntAutoPtr(pDSV, IID_TextureViewVk); + } } VkResult SwapChainVkImpl::AcquireNextImage(DeviceContextVkImpl* pDeviceCtxVk) -- cgit v1.2.3