From 0c79882e8488fc108185a499766d6d5d23bdbe2d Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 18 Jul 2022 17:59:37 +0200 Subject: [PATCH] [dxvk] Use synchronization2 functions for events --- src/dxvk/dxvk_cmdlist.h | 4 ++-- src/dxvk/dxvk_context.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 023db49f7..e8fdb632a 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -707,8 +707,8 @@ namespace dxvk { void cmdSetEvent( VkEvent event, - VkPipelineStageFlags stages) { - m_vkd->vkCmdSetEvent(m_execBuffer, event, stages); + const VkDependencyInfo* dependencyInfo) { + m_vkd->vkCmdSetEvent2(m_execBuffer, event, dependencyInfo); } diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 7b8c4a222..64b71d72a 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -2524,8 +2524,17 @@ namespace dxvk { DxvkGpuEventHandle handle = m_common->eventPool().allocEvent(); - m_cmd->cmdSetEvent(handle.event, - VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT); + // Supported client APIs can't access device memory in a defined manner + // without triggering a queue submission first, so we really only need + // to wait for prior commands, especially queries, to complete. + VkMemoryBarrier2 barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 }; + barrier.srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; + + VkDependencyInfo depInfo = { VK_STRUCTURE_TYPE_DEPENDENCY_INFO }; + depInfo.memoryBarrierCount = 1; + depInfo.pMemoryBarriers = &barrier; + + m_cmd->cmdSetEvent(handle.event, &depInfo); m_cmd->trackGpuEvent(event->reset(handle)); m_cmd->trackResource(event);