mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-31 11:51:04 +00:00
Add a limit for warning on unknown GUID QueryInterface calls
This commit is contained in:
@@ -1389,7 +1389,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11DeviceContext::QueryInterface(REFIID riid
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCWARN("Querying ID3D11DeviceContext for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("ID3D11DeviceContext", riid);
|
||||
}
|
||||
|
||||
return RefCounter::QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -356,7 +356,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11Debug::QueryInterface(REFIID riid, void *
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
RDCWARN("Querying ID3D11Debug for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("ID3D11Debug", riid);
|
||||
|
||||
return m_pDebug->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
@@ -615,7 +615,7 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCWARN("Querying ID3D11Device for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("ID3D11Device", riid);
|
||||
}
|
||||
|
||||
return m_RefCounter.QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -220,8 +220,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12CommandQueue::QueryInterface(REFIID riid,
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying ID3D12CommandQueue for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("ID3D12CommandQueue", riid);
|
||||
}
|
||||
|
||||
return RefCounter12::QueryInterface(riid, ppvObject);
|
||||
@@ -835,8 +834,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12GraphicsCommandList::QueryInterface(REFII
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying ID3D12GraphicsCommandList for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("ID3D12GraphicsCommandList", riid);
|
||||
}
|
||||
|
||||
return RefCounter12::QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -84,7 +84,7 @@ HRESULT STDMETHODCALLTYPE DummyID3D12DebugDevice::QueryInterface(REFIID riid, vo
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
RDCWARN("Querying ID3D12DebugDevice for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("ID3D12DebugDevice", riid);
|
||||
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
@@ -114,8 +114,7 @@ HRESULT STDMETHODCALLTYPE WrappedID3D12DebugDevice::QueryInterface(REFIID riid,
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying ID3D12DebugDevice for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("ID3D12DebugDevice", riid);
|
||||
|
||||
return m_pDebug->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
@@ -481,8 +480,7 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying ID3D12Device for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("ID3D12Device", riid);
|
||||
}
|
||||
|
||||
return m_RefCounter.QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "d3d8_device.h"
|
||||
#include "core/core.h"
|
||||
#include "driver/dxgi/dxgi_common.h"
|
||||
#include "serialise/serialiser.h"
|
||||
#include "d3d8_debug.h"
|
||||
#include "d3d8_resources.h"
|
||||
@@ -145,7 +146,7 @@ HRESULT WrappedD3DDevice8::QueryInterface(REFIID riid, void **ppvObject)
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCWARN("Querying IDirect3DDevice8 for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("IDirect3DDevice8", riid);
|
||||
}
|
||||
|
||||
return m_device->QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "d3d9_device.h"
|
||||
#include "core/core.h"
|
||||
#include "driver/dxgi/dxgi_common.h"
|
||||
#include "serialise/serialiser.h"
|
||||
#include "d3d9_debug.h"
|
||||
|
||||
@@ -99,7 +100,7 @@ HRESULT WrappedD3DDevice9::QueryInterface(REFIID riid, void **ppvObject)
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCWARN("Querying IDirect3DDevice9 for interface: %s", ToStr(riid).c_str());
|
||||
WarnUnknownGUID("IDirect3DDevice9", riid);
|
||||
}
|
||||
|
||||
return m_device->QueryInterface(riid, ppvObject);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "dxgi_common.h"
|
||||
#include "common/common.h"
|
||||
#include "common/threading.h"
|
||||
#include "serialise/serialiser.h"
|
||||
|
||||
UINT GetFormatBPP(DXGI_FORMAT f)
|
||||
@@ -1338,6 +1339,34 @@ D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo)
|
||||
return D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
|
||||
}
|
||||
|
||||
void WarnUnknownGUID(const char *name, REFIID riid)
|
||||
{
|
||||
static Threading::CriticalSection lock;
|
||||
// we use a vector here, because the number of *distinct* unknown GUIDs encountered is likely to
|
||||
// be low (e.g. less than 10).
|
||||
static std::vector<std::pair<IID, int> > warned;
|
||||
|
||||
{
|
||||
SCOPED_LOCK(lock);
|
||||
|
||||
for(std::pair<IID, int> &w : warned)
|
||||
{
|
||||
if(w.first == riid)
|
||||
{
|
||||
w.second++;
|
||||
if(w.second > 5)
|
||||
return;
|
||||
|
||||
RDCWARN("Querying %s for interface: %s", name, ToStr(riid).c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RDCWARN("Querying %s for interface: %s", name, ToStr(riid).c_str());
|
||||
warned.push_back(std::make_pair(riid, 1));
|
||||
}
|
||||
}
|
||||
|
||||
Topology MakePrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY Topo)
|
||||
{
|
||||
switch(Topo)
|
||||
|
||||
@@ -61,6 +61,8 @@ bool IsYUVFormat(DXGI_FORMAT f);
|
||||
Topology MakePrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY Topo);
|
||||
D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo);
|
||||
|
||||
void WarnUnknownGUID(const char *name, REFIID riid);
|
||||
|
||||
DECLARE_REFLECTION_STRUCT(DXGI_SAMPLE_DESC);
|
||||
DECLARE_REFLECTION_STRUCT(IID);
|
||||
DECLARE_REFLECTION_ENUM(DXGI_FORMAT);
|
||||
|
||||
@@ -163,8 +163,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject)
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGIObject for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGIObject", riid);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -291,8 +290,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain4::QueryInterface(REFIID riid, vo
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGISwapChain for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGISwapChain", riid);
|
||||
}
|
||||
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
@@ -652,8 +650,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIOutput5::QueryInterface(REFIID riid, void
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGIOutput for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGIOutput", riid);
|
||||
}
|
||||
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
@@ -727,8 +724,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIAdapter3::QueryInterface(REFIID riid, void
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGIAdapter for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGIAdapter", riid);
|
||||
}
|
||||
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
@@ -827,8 +823,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIDevice4::QueryInterface(REFIID riid, void
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGIDevice for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGIDevice", riid);
|
||||
}
|
||||
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
@@ -934,8 +929,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIFactory5::QueryInterface(REFIID riid, void
|
||||
}
|
||||
else
|
||||
{
|
||||
string guid = ToStr(riid);
|
||||
RDCWARN("Querying IDXGIFactory for interface: %s", guid.c_str());
|
||||
WarnUnknownGUID("IDXGIFactory", riid);
|
||||
}
|
||||
|
||||
return RefCountDXGIObject::QueryInterface(riid, ppvObject);
|
||||
|
||||
Reference in New Issue
Block a user