From af16461858187b370ddece3ae9be14d4a23aa163 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 7 Oct 2018 17:33:03 +0200 Subject: [PATCH] [dxvk] Fix missing indirect dispatch barriers and tracking --- src/dxvk/dxvk_context.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 0a1bc590a..f436f3b30 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -884,7 +884,7 @@ namespace dxvk { auto physicalSlice = buffer.physicalSlice(); - if (m_barriers.isBufferDirty(buffer.physicalSlice(), DxvkAccess::Read)) + if (m_barriers.isBufferDirty(physicalSlice, DxvkAccess::Read)) m_barriers.recordCommands(m_cmd); if (this->validateComputeState()) { @@ -897,10 +897,19 @@ namespace dxvk { physicalSlice.handle(), physicalSlice.offset()); + m_cmd->trackResource( + physicalSlice.resource()); + m_queries.endQueries(m_cmd, VK_QUERY_TYPE_PIPELINE_STATISTICS); this->commitComputePostBarriers(); + + m_barriers.accessBuffer(physicalSlice, + VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, + VK_ACCESS_INDIRECT_COMMAND_READ_BIT, + buffer.bufferInfo().stages, + buffer.bufferInfo().access); } m_cmd->addStatCtr(DxvkStatCounter::CmdDispatchCalls, 1);