diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index c46f00454..4141d8ba4 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -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(); diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index e663f2239..e9bbf07cf 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -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); diff --git a/renderdoc/driver/d3d11/d3d11_resources.h b/renderdoc/driver/d3d11/d3d11_resources.h index d87367758..67b3b3841 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.h +++ b/renderdoc/driver/d3d11/d3d11_resources.h @@ -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; diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.h b/renderdoc/driver/dxgi/dxgi_wrapped.h index 91e64941b..324806f8e 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.h +++ b/renderdoc/driver/dxgi/dxgi_wrapped.h @@ -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; }