mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 21:30:53 +00:00
Add checks for QueryInterface(IUnknown) to return 'this'. Refs #238
This commit is contained in:
@@ -1326,7 +1326,13 @@ void WrappedID3D11DeviceContext::ClearMaps()
|
||||
|
||||
HRESULT STDMETHODCALLTYPE WrappedID3D11DeviceContext::QueryInterface( REFIID riid, void **ppvObject )
|
||||
{
|
||||
if(riid == __uuidof(ID3D11DeviceContext))
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(ID3D11DeviceContext *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
else if(riid == __uuidof(ID3D11DeviceContext))
|
||||
{
|
||||
*ppvObject = (ID3D11DeviceContext *)this;
|
||||
AddRef();
|
||||
|
||||
@@ -490,6 +490,13 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11Debug::QueryInterface(REFIID riid, void *
|
||||
)
|
||||
return m_pDevice->QueryInterface(riid, ppvObject);
|
||||
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(ID3D11Debug *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
string guid = ToStr::Get(riid);
|
||||
RDCWARN("Querying ID3D11Debug for interface: %s", guid.c_str());
|
||||
|
||||
@@ -524,7 +531,13 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if(riid == __uuidof(IDXGIDevice))
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(ID3D11Device2 *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
else if(riid == __uuidof(IDXGIDevice))
|
||||
{
|
||||
hr = m_pDevice->QueryInterface(riid, ppvObject);
|
||||
|
||||
|
||||
@@ -148,7 +148,13 @@ public:
|
||||
{
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(IDXGIKeyedMutex *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(IDXGIObject))
|
||||
{
|
||||
*ppvObject = (IDXGIObject *)(IDXGIKeyedMutex *)this;
|
||||
@@ -515,6 +521,12 @@ public:
|
||||
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
|
||||
{
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
*ppvObject = (IUnknown *)(NestedType *)this;
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
if(riid == __uuidof(NestedType))
|
||||
{
|
||||
*ppvObject = (NestedType *)this;
|
||||
|
||||
@@ -49,7 +49,16 @@ public:
|
||||
/* [in] */ REFIID riid,
|
||||
/* [annotation][iid_is][out] */
|
||||
__RPC__deref_out void **ppvObject)
|
||||
{ return WrapQueryInterface(m_pReal, riid, ppvObject); }
|
||||
{
|
||||
if(riid == __uuidof(IUnknown))
|
||||
{
|
||||
AddRef();
|
||||
*ppvObject = (IUnknown *)(IDXGIObject *)this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return WrapQueryInterface(m_pReal, riid, ppvObject);
|
||||
}
|
||||
|
||||
ULONG STDMETHODCALLTYPE AddRef() { return ++m_iRefcount; }
|
||||
ULONG STDMETHODCALLTYPE Release() { ULONG ret = --m_iRefcount; if(m_iRefcount == 0) delete this; return ret; }
|
||||
|
||||
Reference in New Issue
Block a user