From bbd5762d3db2c0151532b90fbdca4438da45faf1 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 2 May 2020 19:54:38 +0200 Subject: [PATCH] [dxvk] Add initializeImage helper Allows us to use TOP_OF_PIPE -> xxx barriers more often. --- src/dxvk/dxvk_context.cpp | 20 ++++++++++++++++++++ src/dxvk/dxvk_context.h | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 6efcb05a..39451779 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -4742,6 +4742,26 @@ namespace dxvk { } + void DxvkContext::initializeImage( + const Rc& image, + const VkImageSubresourceRange& subresources, + VkImageLayout dstLayout, + VkPipelineStageFlags dstStages, + VkAccessFlags dstAccess) { + if (m_execBarriers.isImageDirty(image, subresources, DxvkAccess::Write)) + m_execBarriers.recordCommands(m_cmd); + + VkPipelineStageFlags srcStages = 0; + + if (image->isInUse()) + srcStages = dstStages; + + m_execAcquires.accessImage(image, subresources, + VK_IMAGE_LAYOUT_UNDEFINED, srcStages, 0, + dstLayout, dstStages, dstAccess); + } + + VkDescriptorSet DxvkContext::allocateDescriptorSet( VkDescriptorSetLayout layout) { if (m_descPool == nullptr) diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index eb98fd19..7a8c8e2a 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -1223,6 +1223,13 @@ namespace dxvk { VkPipelineStageFlags dstStages, VkAccessFlags dstAccess); + void initializeImage( + const Rc& image, + const VkImageSubresourceRange& subresources, + VkImageLayout dstLayout, + VkPipelineStageFlags dstStages, + VkAccessFlags dstAccess); + VkDescriptorSet allocateDescriptorSet( VkDescriptorSetLayout layout);