diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-11-09 20:48:49 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-11-09 20:48:49 +0000 |
| commit | 4657c47c66b5556dd95388a7b13d1abb593e1314 (patch) | |
| tree | 774b55b425847b63367c98bf616809d5da0bbcdc /Graphics/GraphicsEngineVulkan | |
| parent | Updated method comments in OpenGL backend (diff) | |
| download | DiligentCore-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.cpp | 5 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp | 43 |
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) |
