From a8d6acd496404dc5b01df997ad9d07504d6ccf1b Mon Sep 17 00:00:00 2001 From: azhirnov Date: Wed, 18 Nov 2020 05:01:18 +0300 Subject: Removed SWAP_CHAIN_USAGE_UNORDERED_ACCESS, fixed shader group checks --- .../src/PipelineStateVkImpl.cpp | 18 ++++++++++----- .../GraphicsEngineVulkan/src/SwapChainVkImpl.cpp | 27 ++++++---------------- 2 files changed, 19 insertions(+), 26 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp index fe7aa4c6..2949c928 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp @@ -428,8 +428,10 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& #ifdef DILIGENT_DEVELOPMENT auto Iter = NameToGroupIndex.find(GeneralShader.Name); - LOG_PSO_ERROR_AND_THROW(Iter != NameToGroupIndex.end(), "Can't find general shader '", GeneralShader.Name, "'"); - LOG_PSO_ERROR_AND_THROW(Iter->second == ShaderGroups.size(), "General shader group '", GeneralShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); + if (Iter == NameToGroupIndex.end()) + LOG_PSO_ERROR_AND_THROW("Can't find general shader '", GeneralShader.Name, "'"); + if (Iter->second != ShaderGroups.size()) + LOG_PSO_ERROR_AND_THROW("General shader group '", GeneralShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); #endif ShaderGroups.push_back(Group); @@ -450,8 +452,10 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& #ifdef DILIGENT_DEVELOPMENT auto Iter = NameToGroupIndex.find(TriHitShader.Name); - LOG_PSO_ERROR_AND_THROW(Iter != NameToGroupIndex.end(), "Can't find triangle hit group '", TriHitShader.Name, "'"); - LOG_PSO_ERROR_AND_THROW(Iter->second == ShaderGroups.size(), "Triangle hit group '", TriHitShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); + if (Iter == NameToGroupIndex.end()) + LOG_PSO_ERROR_AND_THROW("Can't find triangle hit group '", TriHitShader.Name, "'"); + if (Iter->second != ShaderGroups.size()) + LOG_PSO_ERROR_AND_THROW("Triangle hit group '", TriHitShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); #endif ShaderGroups.push_back(Group); @@ -472,8 +476,10 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& #ifdef DILIGENT_DEVELOPMENT auto Iter = NameToGroupIndex.find(ProcHitShader.Name); - LOG_PSO_ERROR_AND_THROW(Iter != NameToGroupIndex.end(), "Can't find procedural hit group '", ProcHitShader.Name, "'"); - LOG_PSO_ERROR_AND_THROW(Iter->second == ShaderGroups.size(), "Procedural hit group '", ProcHitShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); + if (Iter == NameToGroupIndex.end()) + LOG_PSO_ERROR_AND_THROW("Can't find procedural hit group '", ProcHitShader.Name, "'"); + if (Iter->second != ShaderGroups.size()) + LOG_PSO_ERROR_AND_THROW("Procedural hit group '", ProcHitShader.Name, "' index mismatch: (", Iter->second, ") != (", ShaderGroups.size(), ")"); #endif ShaderGroups.push_back(Group); diff --git a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp index d32f9788..7fbe6265 100644 --- a/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/SwapChainVkImpl.cpp @@ -423,26 +423,13 @@ void SwapChainVkImpl::CreateVulkanSwapChain() swapchain_ci.imageColorSpace = ColorSpace; DEV_CHECK_ERR(m_SwapChainDesc.Usage != 0, "No swap chain usage flags defined"); - static_assert(SWAP_CHAIN_USAGE_LAST == SWAP_CHAIN_USAGE_UNORDERED_ACCESS, "Please update this function to handle the new swapchain usage"); - - { - auto SCUsage = m_SwapChainDesc.Usage; - while (SCUsage != SWAP_CHAIN_USAGE_NONE) - { - auto UsageBit = static_cast(1 << PlatformMisc::GetLSB(Uint32{SCUsage})); - switch (UsageBit) - { - // clang-format off - case SWAP_CHAIN_USAGE_RENDER_TARGET: swapchain_ci.imageUsage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; break; - case SWAP_CHAIN_USAGE_SHADER_INPUT: swapchain_ci.imageUsage |= VK_IMAGE_USAGE_SAMPLED_BIT; break; - case SWAP_CHAIN_USAGE_COPY_SOURCE: swapchain_ci.imageUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; break; - case SWAP_CHAIN_USAGE_UNORDERED_ACCESS: swapchain_ci.imageUsage |= VK_IMAGE_USAGE_STORAGE_BIT; break; - // clang-format on - default: UNEXPECTED("unknown swapchain usage flag"); - } - SCUsage &= ~UsageBit; - } - } + static_assert(SWAP_CHAIN_USAGE_LAST == SWAP_CHAIN_USAGE_COPY_SOURCE, "Please update this function to handle the new swapchain usage"); + if (m_SwapChainDesc.Usage & SWAP_CHAIN_USAGE_RENDER_TARGET) + swapchain_ci.imageUsage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + if (m_SwapChainDesc.Usage & SWAP_CHAIN_USAGE_SHADER_INPUT) + swapchain_ci.imageUsage |= VK_IMAGE_USAGE_SAMPLED_BIT; + if (m_SwapChainDesc.Usage & SWAP_CHAIN_USAGE_COPY_SOURCE) + swapchain_ci.imageUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; // vkCmdClearColorImage() command requires the image to use VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL layout // that requires VK_IMAGE_USAGE_TRANSFER_DST_BIT to be set -- cgit v1.2.3