summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-08-08 22:40:24 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-08-08 22:40:24 +0000
commitd04e840486b08bc8356d6e7275a8e7f4d54f68e3 (patch)
tree5e54db7bb6c3ea2b0d1fcd14198d8dd96737357c /Graphics/GraphicsEngineVulkan
parentInitial implementation of render passes in D3D12 (diff)
downloadDiligentCore-d04e840486b08bc8356d6e7275a8e7f4d54f68e3.tar.gz
DiligentCore-d04e840486b08bc8356d6e7275a8e7f4d54f68e3.zip
D3D12 backend: implemented render pass attachment state transitons
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanTypeConversions.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/RenderPassVkImpl.cpp7
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp4
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;