[dxvk] Use synchronization2 functions for events

This commit is contained in:
Philip Rebohle 2022-07-18 17:59:37 +02:00
parent adb906b18c
commit 0c79882e84
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 13 additions and 4 deletions

View File

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

View File

@ -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<DxvkAccess::None>(event);