From 0f2610010be21aa15685f5734197623203fc9a59 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 13 Dec 2019 10:47:40 +0100 Subject: [PATCH] [hud] Implement queue submission counter as a HUD item --- src/dxvk/hud/dxvk_hud.cpp | 1 + src/dxvk/hud/dxvk_hud_item.cpp | 35 ++++++++++++++++++++++++++++++++++ src/dxvk/hud/dxvk_hud_item.h | 27 ++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/dxvk/hud/dxvk_hud.cpp b/src/dxvk/hud/dxvk_hud.cpp index fb76c794..0af4fec6 100644 --- a/src/dxvk/hud/dxvk_hud.cpp +++ b/src/dxvk/hud/dxvk_hud.cpp @@ -39,6 +39,7 @@ namespace dxvk::hud { addItem("devinfo", m_device); addItem("fps"); addItem("frametimes"); + addItem("submissions", device); } diff --git a/src/dxvk/hud/dxvk_hud_item.cpp b/src/dxvk/hud/dxvk_hud_item.cpp index 44c84864..b803670b 100644 --- a/src/dxvk/hud/dxvk_hud_item.cpp +++ b/src/dxvk/hud/dxvk_hud_item.cpp @@ -258,4 +258,39 @@ namespace dxvk::hud { return position; } + + HudSubmissionStatsItem::HudSubmissionStatsItem(const Rc& device) + : m_device(device) { + + } + + + HudSubmissionStatsItem::~HudSubmissionStatsItem() { + + } + + + void HudSubmissionStatsItem::update(dxvk::high_resolution_clock::time_point time) { + DxvkStatCounters counters = m_device->getStatCounters(); + + uint32_t currCounter = counters.getCtr(DxvkStatCounter::QueueSubmitCount); + m_diffCounter = currCounter - m_prevCounter; + m_prevCounter = currCounter; + } + + + HudPos HudSubmissionStatsItem::render( + HudRenderer& renderer, + HudPos position) { + position.y += 16.0f; + + renderer.drawText(16.0f, + { position.x, position.y }, + { 1.0f, 1.0f, 1.0f, 1.0f }, + str::format("Queue submissions: ", m_diffCounter)); + + position.y += 8.0f; + return position; + } + } diff --git a/src/dxvk/hud/dxvk_hud_item.h b/src/dxvk/hud/dxvk_hud_item.h index a65aa142..1d327fe8 100644 --- a/src/dxvk/hud/dxvk_hud_item.h +++ b/src/dxvk/hud/dxvk_hud_item.h @@ -215,4 +215,31 @@ namespace dxvk::hud { }; + + /** + * \brief HUD item to display queue submissions + */ + class HudSubmissionStatsItem : public HudItem { + + public: + + HudSubmissionStatsItem(const Rc& device); + + ~HudSubmissionStatsItem(); + + void update(dxvk::high_resolution_clock::time_point time); + + HudPos render( + HudRenderer& renderer, + HudPos position); + + private: + + Rc m_device; + + uint64_t m_prevCounter = 0; + uint64_t m_diffCounter = 0; + + }; + } \ No newline at end of file