1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-27 04:54:15 +01:00

[dxvk] Move draw and dispatch stat counters back to the context

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.
This commit is contained in:
Philip Rebohle 2025-02-21 23:02:12 +01:00
parent 405451f9e1
commit c9ffa30638
2 changed files with 22 additions and 28 deletions

View File

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

View File

@ -892,6 +892,7 @@ 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);
@ -915,6 +916,7 @@ namespace dxvk {
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);
@ -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()))
@ -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.
@ -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>;
@ -1782,6 +1789,9 @@ namespace dxvk {
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
}
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawCalls, 1u);
m_cmd->addStatCtr(DxvkStatCounter::CmdDrawsMerged, batchSize - 1u);
batchSize = 0u;
}
}
@ -1821,6 +1831,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)
@ -1859,6 +1872,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)
@ -5639,6 +5656,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);
}