diff --git a/renderdoc/driver/ihv/nv/nv_d3d11_counters.cpp b/renderdoc/driver/ihv/nv/nv_d3d11_counters.cpp index 6c99c4e59..b1033c5a8 100644 --- a/renderdoc/driver/ihv/nv/nv_d3d11_counters.cpp +++ b/renderdoc/driver/ihv/nv/nv_d3d11_counters.cpp @@ -296,6 +296,10 @@ bool NVD3D11Counters::HasCounter(GPUCounter counterID) const { return counterID == GPUCounter::FirstNvidia; } + if(!m_Impl->CounterEnumerator) + { + return false; + } return m_Impl->CounterEnumerator->HasCounter(counterID); } diff --git a/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp b/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp index ffc4a3f87..c704eb728 100644 --- a/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp +++ b/renderdoc/driver/ihv/nv/nv_d3d12_counters.cpp @@ -293,6 +293,12 @@ rdcarray NVD3D12Counters::EnumerateCounters(WrappedID3D12Device &dev { return {GPUCounter::FirstNvidia}; } + // NOTE: Nsight Perf SDK needs access to a D3D12 device handle and command + // queue in order to determine which counters are available on a + // particular NVIDIA device. However, since the D3D12 command queue is + // not available at the time NVD3D12Counters::Init() is called this + // determination must be deferred until the first time + // NVD3D12Counters::EnumerateCounters() is called. if(!m_Impl->InitCounterEnumerator(device)) { return {GPUCounter::FirstNvidia}; @@ -306,6 +312,10 @@ bool NVD3D12Counters::HasCounter(GPUCounter counterID) const { return counterID == GPUCounter::FirstNvidia; } + if(!m_Impl->CounterEnumerator) + { + return false; + } return m_Impl->CounterEnumerator->HasCounter(counterID); } diff --git a/renderdoc/driver/ihv/nv/nv_gl_counters.cpp b/renderdoc/driver/ihv/nv/nv_gl_counters.cpp index 8cdafdbda..1c71abaa8 100644 --- a/renderdoc/driver/ihv/nv/nv_gl_counters.cpp +++ b/renderdoc/driver/ihv/nv/nv_gl_counters.cpp @@ -292,6 +292,10 @@ bool NVGLCounters::HasCounter(GPUCounter counterID) const { return counterID == GPUCounter::FirstNvidia; } + if(!m_Impl->CounterEnumerator) + { + return false; + } return m_Impl->CounterEnumerator->HasCounter(counterID); } diff --git a/renderdoc/driver/ihv/nv/nv_vk_counters.cpp b/renderdoc/driver/ihv/nv/nv_vk_counters.cpp index 83b0f577f..da00d40e0 100644 --- a/renderdoc/driver/ihv/nv/nv_vk_counters.cpp +++ b/renderdoc/driver/ihv/nv/nv_vk_counters.cpp @@ -282,6 +282,10 @@ bool NVVulkanCounters::HasCounter(GPUCounter counterID) const { return counterID == GPUCounter::FirstNvidia; } + if(!m_Impl->CounterEnumerator) + { + return false; + } return m_Impl->CounterEnumerator->HasCounter(counterID); }