diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index dd048b85..62e10f3c 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -1465,7 +1465,7 @@ namespace dxvk { vertexCount, instanceCount, firstVertex, firstInstance); - this->commitGraphicsPostBarriers(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1486,8 +1486,7 @@ namespace dxvk { descriptor.buffer.offset + offset, count, stride); - this->commitGraphicsPostBarriers(); - this->trackDrawBuffer(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1512,8 +1511,7 @@ namespace dxvk { cntDescriptor.buffer.offset + countOffset, maxCount, stride); - this->commitGraphicsPostBarriers(); - this->trackDrawBuffer(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1534,7 +1532,7 @@ namespace dxvk { firstIndex, vertexOffset, firstInstance); - this->commitGraphicsPostBarriers(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1555,8 +1553,7 @@ namespace dxvk { descriptor.buffer.offset + offset, count, stride); - this->commitGraphicsPostBarriers(); - this->trackDrawBuffer(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1581,8 +1578,7 @@ namespace dxvk { cntDescriptor.buffer.offset + countOffset, maxCount, stride); - this->commitGraphicsPostBarriers(); - this->trackDrawBuffer(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -1604,7 +1600,7 @@ namespace dxvk { counterBias, counterDivisor); - this->commitGraphicsPostBarriers(); + this->finalizeDraw(); } m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1); @@ -4429,6 +4425,18 @@ namespace dxvk { } + template + void DxvkContext::finalizeDraw() { + if (m_flags.test(DxvkContextFlag::DirtyDrawBuffer) && Indirect) + this->trackDrawBuffer(); + + if (m_state.gp.flags.any( + DxvkGraphicsPipelineFlag::HasFsStorageDescriptors, + DxvkGraphicsPipelineFlag::HasVsStorageDescriptors)) + this->commitGraphicsPostBarriers(); + } + + void DxvkContext::emitMemoryBarrier( VkPipelineStageFlags srcStages, VkAccessFlags srcAccess, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 21cc18b0..f54f5321 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -1166,6 +1166,9 @@ namespace dxvk { void commitGraphicsPostBarriers(); + template + void finalizeDraw(); + void emitMemoryBarrier( VkPipelineStageFlags srcStages, VkAccessFlags srcAccess, @@ -1176,7 +1179,7 @@ namespace dxvk { VkDescriptorSetLayout layout); void trackDrawBuffer(); - + }; } \ No newline at end of file