From f3cb0e1854a6b8fbb538e9e4bd4600c33c28f496 Mon Sep 17 00:00:00 2001 From: reinsteam Date: Wed, 21 Mar 2018 17:47:03 +0900 Subject: [PATCH] Plugged in NV counters into D3D11Replay. - Counters are displayed in RenderDoc 'Performance counter selection' window --- renderdoc/driver/d3d11/d3d11_counters.cpp | 42 ++++++++++++++++++++++- renderdoc/driver/d3d11/d3d11_replay.cpp | 20 ++++++++--- renderdoc/driver/d3d11/d3d11_replay.h | 7 ++++ 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_counters.cpp b/renderdoc/driver/d3d11/d3d11_counters.cpp index 5b6064931..6f88e618f 100644 --- a/renderdoc/driver/d3d11/d3d11_counters.cpp +++ b/renderdoc/driver/d3d11/d3d11_counters.cpp @@ -26,6 +26,7 @@ #include #include "common/common.h" #include "driver/ihv/amd/amd_counters.h" +#include "driver/ihv/nv/nv_counters.h" #include "d3d11_context.h" #include "d3d11_debug.h" #include "d3d11_device.h" @@ -54,6 +55,12 @@ vector D3D11Replay::EnumerateCounters() ret.insert(ret.end(), amdCounters.begin(), amdCounters.end()); } + if(m_pNVCounters) + { + vector nvCounters = m_pNVCounters->GetPublicCounterIds(); + ret.insert(ret.end(), nvCounters.begin(), nvCounters.end()); + } + return ret; } @@ -71,6 +78,15 @@ CounterDescription D3D11Replay::DescribeCounter(GPUCounter counterID) } } + /////NV////// + if(IsNvidiaCounter(counterID)) + { + if(m_pNVCounters) + { + return m_pNVCounters->GetCounterDescription(counterID); + } + } + // 448A0516-B50E-4312-A6DC-CFE7222FC1AC desc.uuid.words[0] = 0x448A0516; desc.uuid.words[1] = 0xB50E4312; @@ -332,6 +348,11 @@ void D3D11Replay::FillTimersAMD(uint32_t &eventStartID, uint32_t &sampleIndex, } } +void D3D11Replay::FillTimersNV(uint32_t &eventStartID, uint32_t &sampleIndex, + vector &eventIDs, const DrawcallDescription &drawnode) +{ +} + vector D3D11Replay::FetchCountersAMD(const vector &counters) { vector ret; @@ -375,6 +396,12 @@ vector D3D11Replay::FetchCountersAMD(const vector &co return m_pAMDCounters->GetCounterData(sessionID, sampleIndex, eventIDs, counters); } +vector D3D11Replay::FetchCountersNV(const vector &counters) +{ + vector ret; + return ret; +} + vector D3D11Replay::FetchCounters(const vector &counters) { vector ret; @@ -389,7 +416,7 @@ vector D3D11Replay::FetchCounters(const vector &count vector d3dCounters; std::copy_if(counters.begin(), counters.end(), std::back_inserter(d3dCounters), - [](const GPUCounter &c) { return !IsAMDCounter(c); }); + [](const GPUCounter &c) { return !IsAMDCounter(c) && !IsNvidiaCounter(c); }); if(m_pAMDCounters) { @@ -404,6 +431,19 @@ vector D3D11Replay::FetchCounters(const vector &count } } + if(m_pNVCounters) + { + // Filter out the AMD counters + vector nvCounters; + std::copy_if(counters.begin(), counters.end(), std::back_inserter(nvCounters), + [](const GPUCounter &c) { return IsNvidiaCounter(c); }); + + if(!nvCounters.empty()) + { + ret = FetchCountersNV(nvCounters); + } + } + if(d3dCounters.empty()) { return ret; diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 75fdfac8b..8eaa8a644 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -26,6 +26,7 @@ #include "d3d11_replay.h" #include "driver/dx/official/d3dcompiler.h" #include "driver/ihv/amd/amd_counters.h" +#include "driver/ihv/nv/nv_counters.h" #include "driver/shaders/dxbc/dxbc_debug.h" #include "maths/camera.h" #include "maths/matrix.h" @@ -156,20 +157,30 @@ void D3D11Replay::CreateResources() RenderDoc::Inst().SetProgress(LoadProgress::DebugManagerInit, 0.9f); - AMDCounters *counters = new AMDCounters(); + AMDCounters *pAMDCounters = new AMDCounters(); + NVCounters *pNVCounters = new NVCounters(); ID3D11Device *d3dDevice = m_pDevice->GetReal(); - if(counters->Init(AMDCounters::ApiType::Dx11, (void *)d3dDevice)) + if(pAMDCounters->Init(AMDCounters::ApiType::Dx11, (void *)d3dDevice)) { - m_pAMDCounters = counters; + m_pAMDCounters = pAMDCounters; } else { - delete counters; + delete pAMDCounters; m_pAMDCounters = NULL; } + if(pNVCounters->Init(d3dDevice)) + { + m_pNVCounters = pNVCounters; + } + else + { + delete pNVCounters; + m_pNVCounters = NULL; + } RenderDoc::Inst().SetProgress(LoadProgress::DebugManagerInit, 1.0f); } @@ -187,6 +198,7 @@ void D3D11Replay::DestroyResources() m_PixelHistory.Release(); SAFE_DELETE(m_pAMDCounters); + SAFE_DELETE(m_pNVCounters); ShutdownStreamOut(); ClearPostVSCache(); diff --git a/renderdoc/driver/d3d11/d3d11_replay.h b/renderdoc/driver/d3d11/d3d11_replay.h index e767fb715..dae165c55 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.h +++ b/renderdoc/driver/d3d11/d3d11_replay.h @@ -37,6 +37,7 @@ class WrappedID3D11Device; class WrappedID3D11DeviceContext; class AMDCounters; +class NVCounters; struct D3D11CounterContext; struct D3D11PostVSData @@ -245,9 +246,14 @@ private: void ShutdownStreamOut(); std::vector FetchCountersAMD(const vector &counters); + std::vector FetchCountersNV(const vector &counters); + void FillTimers(D3D11CounterContext &ctx, const DrawcallDescription &drawnode); void FillTimersAMD(uint32_t &eventStartID, uint32_t &sampleIndex, vector &eventIDs, const DrawcallDescription &drawnode); + void FillTimersNV(uint32_t &eventStartID, uint32_t &sampleIndex, vector &eventIDs, + const DrawcallDescription &drawnode); + void SerializeImmediateContext(); bool RenderTextureInternal(TextureDisplay cfg, bool blendAlpha); @@ -286,6 +292,7 @@ private: IDXGIFactory *m_pFactory = NULL; AMDCounters *m_pAMDCounters = NULL; + NVCounters *m_pNVCounters = NULL; WrappedID3D11Device *m_pDevice = NULL; WrappedID3D11DeviceContext *m_pImmediateContext = NULL;