Skip to content

Commit

Permalink
[dxvk] Move draw and dispatch stat counters back to the context
Browse files Browse the repository at this point in the history
Otherwise we'll count the HUD by accident. Only keep the barrier counter
since there are so many different places where we issue pipeline barriers,
and they are interesting anyway.
  • Loading branch information
doitsujin committed Feb 21, 2025
1 parent c0f9de2 commit 15964ed
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 28 deletions.
25 changes: 0 additions & 25 deletions src/dxvk/dxvk_cmdlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,6 @@ namespace dxvk {
void cmdBeginRendering(
const VkRenderingInfo* pRenderingInfo) {
m_cmd.execCommands = true;
m_statCounters.addCtr(DxvkStatCounter::CmdRenderPassCount, 1);

m_vkd->vkCmdBeginRendering(getCmdBuffer(), pRenderingInfo);
}
Expand Down Expand Up @@ -694,7 +693,6 @@ namespace dxvk {
uint32_t y,
uint32_t z) {
m_cmd.execCommands |= cmdBuffer == DxvkCmdBuffer::ExecBuffer;
m_statCounters.addCtr(DxvkStatCounter::CmdDispatchCalls, 1);

m_vkd->vkCmdDispatch(getCmdBuffer(cmdBuffer), x, y, z);
}
Expand All @@ -705,7 +703,6 @@ namespace dxvk {
VkBuffer buffer,
VkDeviceSize offset) {
m_cmd.execCommands |= cmdBuffer == DxvkCmdBuffer::ExecBuffer;
m_statCounters.addCtr(DxvkStatCounter::CmdDispatchCalls, 1);

m_vkd->vkCmdDispatchIndirect(getCmdBuffer(cmdBuffer), buffer, offset);
}
Expand All @@ -716,8 +713,6 @@ namespace dxvk {
uint32_t instanceCount,
uint32_t firstVertex,
uint32_t firstInstance) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);

m_vkd->vkCmdDraw(getCmdBuffer(),
vertexCount, instanceCount,
firstVertex, firstInstance);
Expand All @@ -729,9 +724,6 @@ namespace dxvk {
const VkMultiDrawInfoEXT* drawInfos,
uint32_t instanceCount,
uint32_t firstInstance) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1u);
m_statCounters.addCtr(DxvkStatCounter::CmdDrawsMerged, drawCount - 1u);

m_vkd->vkCmdDrawMultiEXT(getCmdBuffer(),
drawCount, drawInfos, instanceCount, firstInstance, sizeof(*drawInfos));
}
Expand All @@ -742,9 +734,6 @@ namespace dxvk {
VkDeviceSize offset,
uint32_t drawCount,
uint32_t stride) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);
m_statCounters.addCtr(DxvkStatCounter::CmdDrawsMerged, drawCount - 1u);

m_vkd->vkCmdDrawIndirect(getCmdBuffer(),
buffer, offset, drawCount, stride);
}
Expand All @@ -757,8 +746,6 @@ namespace dxvk {
VkDeviceSize countOffset,
uint32_t maxDrawCount,
uint32_t stride) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);

m_vkd->vkCmdDrawIndirectCount(getCmdBuffer(), buffer,
offset, countBuffer, countOffset, maxDrawCount, stride);
}
Expand All @@ -770,8 +757,6 @@ namespace dxvk {
uint32_t firstIndex,
int32_t vertexOffset,
uint32_t firstInstance) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);

m_vkd->vkCmdDrawIndexed(getCmdBuffer(),
indexCount, instanceCount,
firstIndex, vertexOffset,
Expand All @@ -784,9 +769,6 @@ namespace dxvk {
const VkMultiDrawIndexedInfoEXT* drawInfos,
uint32_t instanceCount,
uint32_t firstInstance) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);
m_statCounters.addCtr(DxvkStatCounter::CmdDrawsMerged, drawCount - 1u);

m_vkd->vkCmdDrawMultiIndexedEXT(getCmdBuffer(), drawCount,
drawInfos, instanceCount, firstInstance, sizeof(*drawInfos), nullptr);
}
Expand All @@ -797,9 +779,6 @@ namespace dxvk {
VkDeviceSize offset,
uint32_t drawCount,
uint32_t stride) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);
m_statCounters.addCtr(DxvkStatCounter::CmdDrawsMerged, drawCount - 1u);

m_vkd->vkCmdDrawIndexedIndirect(getCmdBuffer(),
buffer, offset, drawCount, stride);
}
Expand All @@ -812,8 +791,6 @@ namespace dxvk {
VkDeviceSize countOffset,
uint32_t maxDrawCount,
uint32_t stride) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);

m_vkd->vkCmdDrawIndexedIndirectCount(getCmdBuffer(),
buffer, offset, countBuffer, countOffset, maxDrawCount, stride);
}
Expand All @@ -826,8 +803,6 @@ namespace dxvk {
VkDeviceSize counterBufferOffset,
uint32_t counterOffset,
uint32_t vertexStride) {
m_statCounters.addCtr(DxvkStatCounter::CmdDrawCalls, 1);

m_vkd->vkCmdDrawIndirectByteCountEXT(getCmdBuffer(),
instanceCount, firstInstance, counterBuffer,
counterBufferOffset, counterOffset, vertexStride);
Expand Down
25 changes: 22 additions & 3 deletions src/dxvk/dxvk_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -892,7 +892,8 @@ namespace dxvk {
VK_QUERY_TYPE_PIPELINE_STATISTICS);

m_cmd->cmdDispatch(DxvkCmdBuffer::ExecBuffer, x, y, z);

m_cmd->addStatCtr(DxvkStatCounter::CmdDispatchCalls, 1u);

m_queryManager.endQueries(m_cmd,
VK_QUERY_TYPE_PIPELINE_STATISTICS);
}
Expand All @@ -912,10 +913,11 @@ namespace dxvk {
if (this->commitComputeState()) {
m_queryManager.beginQueries(m_cmd,
VK_QUERY_TYPE_PIPELINE_STATISTICS);

m_cmd->cmdDispatchIndirect(DxvkCmdBuffer::ExecBuffer,
bufferSlice.handle, bufferSlice.offset);

m_cmd->addStatCtr(DxvkStatCounter::CmdDispatchCalls, 1u);

m_queryManager.endQueries(m_cmd,
VK_QUERY_TYPE_PIPELINE_STATISTICS);

Expand Down Expand Up @@ -986,6 +988,7 @@ namespace dxvk {
m_cmd->cmdDrawIndirectVertexCount(1, 0,
physSlice.handle, physSlice.offset + counterOffset,
counterBias, counterDivisor);
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);

// The count will generally be written from streamout
if (likely(m_state.id.cntBuffer.buffer()->hasGfxStores()))
Expand Down Expand Up @@ -1694,6 +1697,8 @@ namespace dxvk {
m_cmd->cmdDraw(draws->vertexCount, draws->instanceCount,
draws->firstVertex, draws->firstInstance);
}

m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);
} else if (unlikely(needsDrawBarriers())) {
// If the current pipeline has storage resource hazards,
// unroll draws and insert a barrier after each one.
Expand All @@ -1709,6 +1714,8 @@ namespace dxvk {
draws[i].firstVertex, draws[i].firstInstance);
}
}

m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, count);
} else {
using MultiDrawInfo = std::conditional_t<Indexed,
VkMultiDrawIndexedInfoEXT, VkMultiDrawInfoEXT>;
Expand Down Expand Up @@ -1781,6 +1788,9 @@ namespace dxvk {
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
}

m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawsMerged, batchSize - 1u);

batchSize = 0u;
}
}
Expand Down Expand Up @@ -1820,6 +1830,9 @@ namespace dxvk {
descriptor.buffer.offset + offset, step, stride);
}

m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawsMerged, step - 1u);

if (unlikely(m_state.id.argBuffer.buffer()->hasGfxStores())) {
accessDrawBuffer(offset, step, stride, Indexed
? sizeof(VkDrawIndexedIndirectCommand)
Expand Down Expand Up @@ -1858,6 +1871,10 @@ namespace dxvk {
maxCount, stride);
}

// Can't meaningfully estimate the draw count here since the
// maximum draw count may be based on the draw buffer size
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);

if (unlikely(m_state.id.argBuffer.buffer()->hasGfxStores())) {
accessDrawBuffer(offset, maxCount, stride, Indexed
? sizeof(VkDrawIndexedIndirectCommand)
Expand Down Expand Up @@ -5638,6 +5655,8 @@ namespace dxvk {

for (uint32_t i = 0; i < framebufferInfo.numAttachments(); i++)
m_cmd->track(framebufferInfo.getAttachment(i).view->image(), DxvkAccess::Write);

m_cmd->addStatCtr(DxvkStatCounter::CmdRenderPassCount, 1u);
}


Expand Down

0 comments on commit 15964ed

Please sign in to comment.