Add a limit for warning on unknown GUID QueryInterface calls

This commit is contained in:
baldurk
2018-01-25 10:36:16 +00:00
parent fb0772b828
commit ad841a0341
9 changed files with 49 additions and 26 deletions
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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);
+2 -4
View File
@@ -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);
+3 -5
View File
@@ -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);
+2 -1
View File
@@ -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);
+2 -1
View File
@@ -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);
+29
View File
@@ -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)
+2
View File
@@ -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);
+6 -12
View File
@@ -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);