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);