From af94c429ea5241c75f9a6e36e9522380cc4f5590 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 25 Apr 2018 15:53:35 +0100 Subject: [PATCH] Only enable counters when we detect the relevant vendor * This avoids problem if the vendor counter library has problems on init on non-vendor hardware, rather than just bailing out/claiming no support. --- renderdoc/driver/d3d11/d3d11_replay.cpp | 23 +++++++++++++++++++---- renderdoc/driver/d3d12/d3d12_replay.cpp | 14 ++++++++++++-- renderdoc/driver/gl/gl_counters.cpp | 15 +++++++++++++-- renderdoc/driver/vulkan/vk_debug.cpp | 17 +++++++++++++++-- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 9ec12bc51..978ee9c50 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -157,12 +157,27 @@ void D3D11Replay::CreateResources() RenderDoc::Inst().SetProgress(LoadProgress::DebugManagerInit, 0.9f); - AMDCounters *countersAMD = new AMDCounters(); - NVCounters *countersNV = new NVCounters(); + AMDCounters *countersAMD = NULL; + NVCounters *countersNV = NULL; + + if(m_Vendor == GPUVendor::AMD) + { + RDCLOG("AMD GPU detected - trying to initialise AMD counters"); + countersAMD = new AMDCounters(); + } + else if(m_Vendor == GPUVendor::nVidia) + { + RDCLOG("nVidia GPU detected - trying to initialise nVidia counters"); + countersNV = new NVCounters(); + } + else + { + RDCLOG("%s GPU detected - no counters available", ToStr(m_Vendor).c_str()); + } ID3D11Device *d3dDevice = m_pDevice->GetReal(); - if(countersAMD->Init(AMDCounters::ApiType::Dx11, (void *)d3dDevice)) + if(countersAMD && countersAMD->Init(AMDCounters::ApiType::Dx11, (void *)d3dDevice)) { m_pAMDCounters = countersAMD; } @@ -172,7 +187,7 @@ void D3D11Replay::CreateResources() m_pAMDCounters = NULL; } - if(countersNV->Init(d3dDevice)) + if(countersNV && countersNV->Init(d3dDevice)) { m_pNVCounters = countersNV; } diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index f5f0450e6..bb9cbad36 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -121,11 +121,21 @@ void D3D12Replay::CreateResources() if(RenderDoc::Inst().IsReplayApp()) { - AMDCounters *counters = new AMDCounters(); + AMDCounters *counters = NULL; + + if(m_Vendor == GPUVendor::AMD) + { + RDCLOG("AMD GPU detected - trying to initialise AMD counters"); + counters = new AMDCounters(); + } + else + { + RDCLOG("%s GPU detected - no counters available", ToStr(m_Vendor).c_str()); + } ID3D12Device *d3dDevice = m_pDevice->GetReal(); - if(counters->Init(AMDCounters::ApiType::Dx12, (void *)d3dDevice)) + if(counters && counters->Init(AMDCounters::ApiType::Dx12, (void *)d3dDevice)) { m_pAMDCounters = counters; } diff --git a/renderdoc/driver/gl/gl_counters.cpp b/renderdoc/driver/gl/gl_counters.cpp index 51beee5cd..1f8b29ad7 100644 --- a/renderdoc/driver/gl/gl_counters.cpp +++ b/renderdoc/driver/gl/gl_counters.cpp @@ -35,8 +35,19 @@ void GLReplay::PreContextInitCounters() void GLReplay::PostContextInitCounters() { - AMDCounters *counters = new AMDCounters(); - if(counters->Init(AMDCounters::ApiType::Ogl, m_ReplayCtx.ctx)) + AMDCounters *counters = NULL; + + if(m_Vendor == GPUVendor::AMD) + { + RDCLOG("AMD GPU detected - trying to initialise AMD counters"); + counters = new AMDCounters(); + } + else + { + RDCLOG("%s GPU detected - no counters available", ToStr(m_Vendor).c_str()); + } + + if(counters && counters->Init(AMDCounters::ApiType::Ogl, m_ReplayCtx.ctx)) { m_pAMDCounters = counters; } diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 32d44a6f5..1017c38a3 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -1399,8 +1399,21 @@ void VulkanReplay::CreateResources() GPA_vkContextOpenInfo context = {Unwrap(m_pDriver->GetInstance()), Unwrap(m_pDriver->GetPhysDev()), Unwrap(m_pDriver->GetDev())}; - AMDCounters *counters = new AMDCounters(); - if(counters->Init(AMDCounters::ApiType::Vk, (void *)&context)) + AMDCounters *counters = NULL; + + GPUVendor vendor = m_pDriver->GetDriverVersion().Vendor(); + + if(vendor == GPUVendor::AMD) + { + RDCLOG("AMD GPU detected - trying to initialise AMD counters"); + counters = new AMDCounters(); + } + else + { + RDCLOG("%s GPU detected - no counters available", ToStr(vendor).c_str()); + } + + if(counters && counters->Init(AMDCounters::ApiType::Vk, (void *)&context)) { m_pAMDCounters = counters; }