diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-08-08 22:40:24 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-08-08 22:40:24 +0000 |
| commit | d04e840486b08bc8356d6e7275a8e7f4d54f68e3 (patch) | |
| tree | 5e54db7bb6c3ea2b0d1fcd14198d8dd96737357c /Graphics/GraphicsEngineVulkan | |
| parent | Initial implementation of render passes in D3D12 (diff) | |
| download | DiligentCore-d04e840486b08bc8356d6e7275a8e7f4d54f68e3.tar.gz DiligentCore-d04e840486b08bc8356d6e7275a8e7f4d54f68e3.zip | |
D3D12 backend: implemented render pass attachment state transitons
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
3 files changed, 8 insertions, 5 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.hpp index 741ced4f..dbba5b7e 100644 --- a/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.hpp +++ b/Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.hpp @@ -65,7 +65,7 @@ VkSamplerAddressMode AddressModeToVkAddressMode(TEXTURE_ADDRESS_MODE AddressMode VkBorderColor BorderColorToVkBorderColor(const Float32 BorderColor[]); VkAccessFlags ResourceStateFlagsToVkAccessFlags(RESOURCE_STATE StateFlags); -VkImageLayout ResourceStateToVkImageLayout(RESOURCE_STATE StateFlag); +VkImageLayout ResourceStateToVkImageLayout(RESOURCE_STATE StateFlag, bool IsInsideRenderPass = false); RESOURCE_STATE VkAccessFlagsToResourceStates(VkAccessFlags AccessFlags); RESOURCE_STATE VkImageLayoutToResourceState(VkImageLayout Layout); diff --git a/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp index a0a25f89..8858fb50 100644 --- a/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp @@ -88,8 +88,11 @@ RenderPassVkImpl::RenderPassVkImpl(IReferenceCounters* pRefCounters, auto* pCurrVkAttachmentReference = &vkAttachmentReferences[CurrAttachmentReferenceInd]; for (Uint32 attachment = 0; attachment < NumAttachments; ++attachment, ++CurrAttachmentReferenceInd) { - vkAttachmentReferences[CurrAttachmentReferenceInd].attachment = pSrcAttachments[attachment].AttachmentIndex; - vkAttachmentReferences[CurrAttachmentReferenceInd].layout = ResourceStateToVkImageLayout(pSrcAttachments[attachment].State); + const auto& AttachmnetRef = pSrcAttachments[attachment]; + + vkAttachmentReferences[CurrAttachmentReferenceInd].attachment = AttachmnetRef.AttachmentIndex; + vkAttachmentReferences[CurrAttachmentReferenceInd].layout = + ResourceStateToVkImageLayout(AttachmnetRef.State, /*IsInsideRenderPass = */ true); } return pCurrVkAttachmentReference; diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp index bf34a07a..25966163 100644 --- a/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp +++ b/Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp @@ -1304,7 +1304,7 @@ RESOURCE_STATE VkAccessFlagsToResourceStates(VkAccessFlags AccessFlags) -VkImageLayout ResourceStateToVkImageLayout(RESOURCE_STATE StateFlag) +VkImageLayout ResourceStateToVkImageLayout(RESOURCE_STATE StateFlag, bool IsInsideRenderPass) { if (StateFlag == RESOURCE_STATE_UNKNOWN) { @@ -1335,7 +1335,7 @@ VkImageLayout ResourceStateToVkImageLayout(RESOURCE_STATE StateFlag) case RESOURCE_STATE_INDIRECT_ARGUMENT: UNEXPECTED("Invalid resource state"); return VK_IMAGE_LAYOUT_UNDEFINED; case RESOURCE_STATE_COPY_DEST: return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; case RESOURCE_STATE_COPY_SOURCE: return VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - case RESOURCE_STATE_RESOLVE_DEST: return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + case RESOURCE_STATE_RESOLVE_DEST: return IsInsideRenderPass ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; case RESOURCE_STATE_RESOLVE_SOURCE: return VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; case RESOURCE_STATE_INPUT_ATTACHMENT: return VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; case RESOURCE_STATE_PRESENT: return VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; |
