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:
parent
a0ea29a2fa
commit
c69dbc4490
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user