From 23e8bdd5556a684787c03b1e3b339ec8a2a329d6 Mon Sep 17 00:00:00 2001 From: assiduous Date: Sun, 12 Jan 2020 18:21:37 -0800 Subject: Vk query manager: improved query reuse order Added Vk and D3D12 query usage reporting --- .../include/QueryManagerD3D12.h | 4 +++- .../GraphicsEngineD3D12/src/QueryManagerD3D12.cpp | 22 +++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) (limited to 'Graphics/GraphicsEngineD3D12') diff --git a/Graphics/GraphicsEngineD3D12/include/QueryManagerD3D12.h b/Graphics/GraphicsEngineD3D12/include/QueryManagerD3D12.h index 0600c2e4..13337696 100644 --- a/Graphics/GraphicsEngineD3D12/include/QueryManagerD3D12.h +++ b/Graphics/GraphicsEngineD3D12/include/QueryManagerD3D12.h @@ -75,7 +75,9 @@ private: CComPtr pd3d12QueryHeap; std::deque AvailableQueries; std::vector ResolveBufferOffsets; - Uint32 HeapSize = 0; + + Uint32 HeapSize = 0; + Uint32 MaxAllocatedQueries = 0; }; std::mutex m_HeapMutex; diff --git a/Graphics/GraphicsEngineD3D12/src/QueryManagerD3D12.cpp b/Graphics/GraphicsEngineD3D12/src/QueryManagerD3D12.cpp index b62ab877..444bc69f 100644 --- a/Graphics/GraphicsEngineD3D12/src/QueryManagerD3D12.cpp +++ b/Graphics/GraphicsEngineD3D12/src/QueryManagerD3D12.cpp @@ -26,6 +26,8 @@ */ #include "pch.h" +#include + #include "QueryManagerD3D12.h" #include "D3D12TypeConversions.h" #include "GraphicsAccessories.h" @@ -129,6 +131,9 @@ QueryManagerD3D12::QueryManagerD3D12(ID3D12Device* pd3d12Device, QueryManagerD3D12::~QueryManagerD3D12() { + std::stringstream QueryUsageSS; + QueryUsageSS << "D3D12 query manager peak usage:"; + for (Uint32 QueryType = QUERY_TYPE_UNDEFINED + 1; QueryType < QUERY_TYPE_NUM_TYPES; ++QueryType) { auto& HeapInfo = m_Heaps[QueryType]; @@ -147,19 +152,26 @@ QueryManagerD3D12::~QueryManagerD3D12() " have not been returned to the query manager"); } } + QueryUsageSS << std::endl + << std::setw(30) << std::left << GetQueryTypeString(static_cast(QueryType)) << ": " + << std::setw(4) << std::right << HeapInfo.MaxAllocatedQueries + << '/' << std::setw(4) << HeapInfo.HeapSize; } + LOG_INFO_MESSAGE(QueryUsageSS.str()); } Uint32 QueryManagerD3D12::AllocateQuery(QUERY_TYPE Type) { std::lock_guard Lock(m_HeapMutex); - Uint32 Index = InvalidIndex; - auto& HeapInfo = m_Heaps[Type]; - if (!HeapInfo.AvailableQueries.empty()) + Uint32 Index = InvalidIndex; + auto& HeapInfo = m_Heaps[Type]; + auto& AvailableQueries = HeapInfo.AvailableQueries; + if (!AvailableQueries.empty()) { - Index = HeapInfo.AvailableQueries.front(); - HeapInfo.AvailableQueries.pop_front(); + Index = AvailableQueries.front(); + AvailableQueries.pop_front(); + HeapInfo.MaxAllocatedQueries = std::max(HeapInfo.MaxAllocatedQueries, HeapInfo.HeapSize - static_cast(AvailableQueries.size())); } return Index; -- cgit v1.2.3