From af16461858187b370ddece3ae9be14d4a23aa163 Mon Sep 17 00:00:00 2001
From: Philip Rebohle <philip.rebohle@tu-dortmund.de>
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 0a1bc590..f436f3b3 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);