From badb93334e3fc3611632d8302f5694bfa52fc92d Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 1 May 2018 23:29:58 +0200 Subject: [PATCH] [dxvk] Fix DxvkContext::transformImage We have to spill the render pass before transforming the image. We don't need the barrier if the old and new layout are the same. --- src/dxvk/dxvk_context.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 76ec620d9..b642e58bc 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -1211,17 +1211,21 @@ namespace dxvk { const VkImageSubresourceRange& dstSubresources, VkImageLayout srcLayout, VkImageLayout dstLayout) { - m_barriers.accessImage( - dstImage, dstSubresources, - srcLayout, - dstImage->info().stages, - dstImage->info().access, - dstLayout, - dstImage->info().stages, - dstImage->info().access); - m_barriers.recordCommands(m_cmd); + this->spillRenderPass(); - m_cmd->trackResource(dstImage); + if (srcLayout != dstLayout) { + m_barriers.accessImage( + dstImage, dstSubresources, + srcLayout, + dstImage->info().stages, + dstImage->info().access, + dstLayout, + dstImage->info().stages, + dstImage->info().access); + m_barriers.recordCommands(m_cmd); + + m_cmd->trackResource(dstImage); + } }