diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index d798a819..9324e4e5 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -66,10 +66,7 @@ namespace dxvk { Rc DxvkContext::endRecording() { this->spillRenderPass(true); - - // Ensure that any shared images are in their - // default layout for the next submission - this->transitionRenderTargetLayouts(m_execBarriers, true); + this->flushSharedImages(); m_sdmaBarriers.recordCommands(m_cmd); m_initBarriers.recordCommands(m_cmd); @@ -1938,6 +1935,20 @@ namespace dxvk { } + void DxvkContext::flushSharedImages() { + for (auto i = m_deferredClears.begin(); i != m_deferredClears.end(); ) { + if (i->imageView->imageInfo().shared) { + this->performClear(i->imageView, -1, i->discardAspects, i->clearAspects, i->clearValue); + i = m_deferredClears.erase(i); + } else { + i++; + } + } + + this->transitionRenderTargetLayouts(m_execBarriers, true); + } + + void DxvkContext::updateBuffer( const Rc& buffer, VkDeviceSize offset, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index ad5391dc..efd9a705 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -1139,6 +1139,8 @@ namespace dxvk { void flushClears( bool useRenderPass); + void flushSharedImages(); + void startRenderPass(); void spillRenderPass(bool suspend);