diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.cpp b/renderdoc/driver/dxgi/dxgi_wrapped.cpp index ab90becd5..77a709f2d 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.cpp +++ b/renderdoc/driver/dxgi/dxgi_wrapped.cpp @@ -76,7 +76,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject) else if(riid == __uuidof(IDXGIAdapter)) { IDXGIAdapter *real = (IDXGIAdapter *)(*ppvObject); - *ppvObject = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(real)); + *ppvObject = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(real)); return true; } else if(riid == __uuidof(IDXGIFactory)) @@ -100,7 +100,7 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject) else if(riid == __uuidof(IDXGIAdapter1)) { IDXGIAdapter1 *real = (IDXGIAdapter1 *)(*ppvObject); - *ppvObject = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter3(real)); + *ppvObject = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter4(real)); return true; } else if(riid == __uuidof(IDXGIFactory1)) @@ -112,13 +112,13 @@ bool RefCountDXGIObject::HandleWrap(REFIID riid, void **ppvObject) else if(riid == __uuidof(IDXGIAdapter2)) { IDXGIAdapter2 *real = (IDXGIAdapter2 *)(*ppvObject); - *ppvObject = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter3(real)); + *ppvObject = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter4(real)); return true; } else if(riid == __uuidof(IDXGIAdapter3)) { IDXGIAdapter3 *real = (IDXGIAdapter3 *)(*ppvObject); - *ppvObject = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter3(real)); + *ppvObject = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter4(real)); return true; } else if(riid == __uuidof(IDXGIFactory2)) @@ -350,7 +350,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain4::GetContainingOutput(IDXGIOutpu HRESULT ret = m_pReal->GetContainingOutput(ppOutput); if(SUCCEEDED(ret) && ppOutput && *ppOutput) - *ppOutput = (IDXGIOutput *)(new WrappedIDXGIOutput5(this, *ppOutput)); + *ppOutput = (IDXGIOutput *)(new WrappedIDXGIOutput6(this, *ppOutput)); return ret; } @@ -383,7 +383,7 @@ HRESULT WrappedIDXGISwapChain4::SetFullscreenState( /* [in] */ BOOL Fullscreen, /* [in] */ IDXGIOutput *pTarget) { - WrappedIDXGIOutput5 *wrappedOutput = (WrappedIDXGIOutput5 *)pTarget; + WrappedIDXGIOutput6 *wrappedOutput = (WrappedIDXGIOutput6 *)pTarget; IDXGIOutput *unwrappedOutput = wrappedOutput ? wrappedOutput->GetReal() : NULL; if(RenderDoc::Inst().GetCaptureOptions().allowFullscreen) @@ -399,7 +399,7 @@ HRESULT WrappedIDXGISwapChain4::GetFullscreenState( HRESULT ret = m_pReal->GetFullscreenState(pFullscreen, ppTarget); if(SUCCEEDED(ret) && ppTarget && *ppTarget) - *ppTarget = (IDXGIOutput *)(new WrappedIDXGIOutput5(this, *ppTarget)); + *ppTarget = (IDXGIOutput *)(new WrappedIDXGIOutput6(this, *ppTarget)); return ret; } @@ -545,12 +545,12 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGISwapChain4::GetRestrictToOutput(IDXGIOutpu HRESULT ret = m_pReal2->GetRestrictToOutput(ppRestrictToOutput); if(SUCCEEDED(ret) && ppRestrictToOutput && *ppRestrictToOutput) - *ppRestrictToOutput = (IDXGIOutput *)(new WrappedIDXGIOutput5(this, *ppRestrictToOutput)); + *ppRestrictToOutput = (IDXGIOutput *)(new WrappedIDXGIOutput6(this, *ppRestrictToOutput)); return ret; } -WrappedIDXGIOutput5::WrappedIDXGIOutput5(RefCountDXGIObject *owner, IDXGIOutput *real) +WrappedIDXGIOutput6::WrappedIDXGIOutput6(RefCountDXGIObject *owner, IDXGIOutput *real) : RefCountDXGIObject(real), m_Owner(owner), m_pReal(real) { SAFE_ADDREF(m_Owner); @@ -565,20 +565,23 @@ WrappedIDXGIOutput5::WrappedIDXGIOutput5(RefCountDXGIObject *owner, IDXGIOutput real->QueryInterface(__uuidof(IDXGIOutput4), (void **)&m_pReal4); m_pReal5 = NULL; real->QueryInterface(__uuidof(IDXGIOutput5), (void **)&m_pReal5); + m_pReal6 = NULL; + real->QueryInterface(__uuidof(IDXGIOutput6), (void **)&m_pReal6); } -WrappedIDXGIOutput5::~WrappedIDXGIOutput5() +WrappedIDXGIOutput6::~WrappedIDXGIOutput6() { SAFE_RELEASE(m_pReal1); SAFE_RELEASE(m_pReal2); SAFE_RELEASE(m_pReal3); SAFE_RELEASE(m_pReal4); SAFE_RELEASE(m_pReal5); + SAFE_RELEASE(m_pReal6); SAFE_RELEASE(m_pReal); SAFE_RELEASE(m_Owner); } -HRESULT STDMETHODCALLTYPE WrappedIDXGIOutput5::QueryInterface(REFIID riid, void **ppvObject) +HRESULT STDMETHODCALLTYPE WrappedIDXGIOutput6::QueryInterface(REFIID riid, void **ppvObject) { if(riid == __uuidof(IDXGIOutput)) { @@ -659,7 +662,7 @@ HRESULT STDMETHODCALLTYPE WrappedIDXGIOutput5::QueryInterface(REFIID riid, void return RefCountDXGIObject::QueryInterface(riid, ppvObject); } -WrappedIDXGIAdapter3::WrappedIDXGIAdapter3(IDXGIAdapter *real) +WrappedIDXGIAdapter4::WrappedIDXGIAdapter4(IDXGIAdapter *real) : RefCountDXGIObject(real), m_pReal(real) { m_pReal1 = NULL; @@ -668,17 +671,20 @@ WrappedIDXGIAdapter3::WrappedIDXGIAdapter3(IDXGIAdapter *real) real->QueryInterface(__uuidof(IDXGIAdapter2), (void **)&m_pReal2); m_pReal3 = NULL; real->QueryInterface(__uuidof(IDXGIAdapter3), (void **)&m_pReal3); + m_pReal4 = NULL; + real->QueryInterface(__uuidof(IDXGIAdapter4), (void **)&m_pReal4); } -WrappedIDXGIAdapter3::~WrappedIDXGIAdapter3() +WrappedIDXGIAdapter4::~WrappedIDXGIAdapter4() { SAFE_RELEASE(m_pReal1); SAFE_RELEASE(m_pReal2); SAFE_RELEASE(m_pReal3); + SAFE_RELEASE(m_pReal4); SAFE_RELEASE(m_pReal); } -HRESULT STDMETHODCALLTYPE WrappedIDXGIAdapter3::QueryInterface(REFIID riid, void **ppvObject) +HRESULT STDMETHODCALLTYPE WrappedIDXGIAdapter4::QueryInterface(REFIID riid, void **ppvObject) { if(riid == __uuidof(IDXGIAdapter)) { @@ -838,8 +844,8 @@ std::vector UnwrapResourceSet(UINT NumResources, IDXGIResource resources.resize(NumResources); for(UINT i = 0; i < NumResources; i++) { - WrappedDXGIInterface *wrapped = - (WrappedDXGIInterface *)ppResources[i]; + WrappedDXGIInterface *wrapped = + (WrappedDXGIInterface *)ppResources[i]; resources[i] = UnwrapDXGIResource(wrapped->GetWrapped()); if(resources[i] == NULL) { @@ -1025,7 +1031,7 @@ HRESULT WrappedIDXGIFactory5::CreateSwapChainForHwnd( { ID3DDevice *wrapDevice = GetD3DDevice(pDevice); - WrappedIDXGIOutput5 *wrappedOutput = (WrappedIDXGIOutput5 *)pRestrictToOutput; + WrappedIDXGIOutput6 *wrappedOutput = (WrappedIDXGIOutput6 *)pRestrictToOutput; IDXGIOutput *unwrappedOutput = wrappedOutput ? wrappedOutput->GetReal() : NULL; if(wrapDevice) @@ -1061,7 +1067,7 @@ HRESULT WrappedIDXGIFactory5::CreateSwapChainForCoreWindow(IUnknown *pDevice, IU { ID3DDevice *wrapDevice = GetD3DDevice(pDevice); - WrappedIDXGIOutput5 *wrappedOutput = (WrappedIDXGIOutput5 *)pRestrictToOutput; + WrappedIDXGIOutput6 *wrappedOutput = (WrappedIDXGIOutput6 *)pRestrictToOutput; IDXGIOutput *unwrappedOutput = wrappedOutput ? wrappedOutput->GetReal() : NULL; if(!RenderDoc::Inst().GetCaptureOptions().allowFullscreen) @@ -1101,7 +1107,7 @@ HRESULT WrappedIDXGIFactory5::CreateSwapChainForComposition(IUnknown *pDevice, { ID3DDevice *wrapDevice = GetD3DDevice(pDevice); - WrappedIDXGIOutput5 *wrappedOutput = (WrappedIDXGIOutput5 *)pRestrictToOutput; + WrappedIDXGIOutput6 *wrappedOutput = (WrappedIDXGIOutput6 *)pRestrictToOutput; IDXGIOutput *unwrappedOutput = wrappedOutput ? wrappedOutput->GetReal() : NULL; if(!RenderDoc::Inst().GetCaptureOptions().allowFullscreen) diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.h b/renderdoc/driver/dxgi/dxgi_wrapped.h index e4635f830..3df77ecbc 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.h +++ b/renderdoc/driver/dxgi/dxgi_wrapped.h @@ -27,7 +27,7 @@ #include "common/common.h" #include "common/wrapped_pool.h" -#include "driver/dx/official/dxgi1_5.h" +#include "driver/dx/official/dxgi1_6.h" MIDL_INTERFACE("6f15aaf2-d208-4e89-9ab4-489535d34f9c") ID3D11Texture2D; MIDL_INTERFACE("dc8e63f3-d12b-4952-b47b-5e45026a862d") ID3D11Resource; @@ -838,7 +838,7 @@ public: } }; -class WrappedIDXGIOutput5 : public IDXGIOutput5, public RefCountDXGIObject +class WrappedIDXGIOutput6 : public IDXGIOutput6, public RefCountDXGIObject { RefCountDXGIObject *m_Owner; IDXGIOutput *m_pReal; @@ -847,13 +847,14 @@ class WrappedIDXGIOutput5 : public IDXGIOutput5, public RefCountDXGIObject IDXGIOutput3 *m_pReal3; IDXGIOutput4 *m_pReal4; IDXGIOutput5 *m_pReal5; + IDXGIOutput6 *m_pReal6; public: IMPLEMENT_IDXGIOBJECT_WITH_REFCOUNTDXGIOBJECT_CUSTOMQUERY; HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); - WrappedIDXGIOutput5(RefCountDXGIObject *owner, IDXGIOutput *real); - ~WrappedIDXGIOutput5(); + WrappedIDXGIOutput6(RefCountDXGIObject *owner, IDXGIOutput *real); + ~WrappedIDXGIOutput6(); IDXGIOutput *GetReal() { return m_pReal; } ////////////////////////////// @@ -1031,18 +1032,36 @@ public: return m_pReal5->DuplicateOutput1(pDevice, Flags, SupportedFormatsCount, pSupportedFormats, ppOutputDuplication); } + + ////////////////////////////// + // implement IDXGIOutput6 + + virtual HRESULT STDMETHODCALLTYPE GetDesc1( + /* [annotation][out] */ + _Out_ DXGI_OUTPUT_DESC1 *pDesc) + { + return m_pReal6->GetDesc1(pDesc); + } + + virtual HRESULT STDMETHODCALLTYPE CheckHardwareCompositionSupport( + /* [annotation][out] */ + _Out_ UINT *pFlags) + { + return m_pReal6->CheckHardwareCompositionSupport(pFlags); + } }; -class WrappedIDXGIAdapter3 : public IDXGIAdapter3, public RefCountDXGIObject +class WrappedIDXGIAdapter4 : public IDXGIAdapter4, public RefCountDXGIObject { IDXGIAdapter *m_pReal; IDXGIAdapter1 *m_pReal1; IDXGIAdapter2 *m_pReal2; IDXGIAdapter3 *m_pReal3; + IDXGIAdapter4 *m_pReal4; public: - WrappedIDXGIAdapter3(IDXGIAdapter *real); - virtual ~WrappedIDXGIAdapter3(); + WrappedIDXGIAdapter4(IDXGIAdapter *real); + virtual ~WrappedIDXGIAdapter4(); IMPLEMENT_IDXGIOBJECT_WITH_REFCOUNTDXGIOBJECT_CUSTOMQUERY; HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); @@ -1058,7 +1077,7 @@ public: HRESULT ret = m_pReal->EnumOutputs(Output, ppOutput); if(SUCCEEDED(ret) && ppOutput && *ppOutput) - *ppOutput = (IDXGIOutput *)(new WrappedIDXGIOutput5(this, *ppOutput)); + *ppOutput = (IDXGIOutput *)(new WrappedIDXGIOutput6(this, *ppOutput)); return ret; } @@ -1154,6 +1173,16 @@ public: { return m_pReal3->UnregisterVideoMemoryBudgetChangeNotification(dwCookie); } + + ////////////////////////////// + // implement IDXGIAdapter4 + + virtual HRESULT STDMETHODCALLTYPE GetDesc3( + /* [annotation][out] */ + _Out_ DXGI_ADAPTER_DESC3 *pDesc) + { + return m_pReal4->GetDesc3(pDesc); + } }; class WrappedIDXGIDevice4 : public IDXGIDevice4, public RefCountDXGIObject @@ -1185,7 +1214,7 @@ public: { HRESULT ret = m_pReal->GetAdapter(pAdapter); if(SUCCEEDED(ret)) - *pAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(*pAdapter)); + *pAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(*pAdapter)); return ret; } @@ -1319,7 +1348,7 @@ public: { HRESULT ret = m_pReal->EnumAdapters(Adapter, ppAdapter); if(SUCCEEDED(ret)) - *ppAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(*ppAdapter)); + *ppAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(*ppAdapter)); return ret; } @@ -1350,7 +1379,7 @@ public: { HRESULT ret = m_pReal->CreateSoftwareAdapter(Module, ppAdapter); if(SUCCEEDED(ret)) - *ppAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(*ppAdapter)); + *ppAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(*ppAdapter)); return ret; } @@ -1373,7 +1402,7 @@ public: HRESULT ret = factory->EnumAdapters1(Adapter, ppAdapter); if(SUCCEEDED(ret)) - *ppAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter3(*ppAdapter)); + *ppAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter4(*ppAdapter)); return ret; } @@ -1506,22 +1535,22 @@ public: if(riid == __uuidof(IDXGIAdapter3)) { IDXGIAdapter3 *adapter = (IDXGIAdapter3 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter4(adapter)); } else if(riid == __uuidof(IDXGIAdapter2)) { IDXGIAdapter2 *adapter = (IDXGIAdapter2 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter4(adapter)); } else if(riid == __uuidof(IDXGIAdapter1)) { IDXGIAdapter1 *adapter = (IDXGIAdapter1 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter4(adapter)); } else { IDXGIAdapter *adapter = (IDXGIAdapter *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(adapter)); } } return ret; @@ -1539,22 +1568,22 @@ public: if(riid == __uuidof(IDXGIAdapter3)) { IDXGIAdapter3 *adapter = (IDXGIAdapter3 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter3 *)(new WrappedIDXGIAdapter4(adapter)); } else if(riid == __uuidof(IDXGIAdapter2)) { IDXGIAdapter2 *adapter = (IDXGIAdapter2 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter2 *)(new WrappedIDXGIAdapter4(adapter)); } else if(riid == __uuidof(IDXGIAdapter1)) { IDXGIAdapter1 *adapter = (IDXGIAdapter1 *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter1 *)(new WrappedIDXGIAdapter4(adapter)); } else { IDXGIAdapter *adapter = (IDXGIAdapter *)*ppvAdapter; - *ppvAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter3(adapter)); + *ppvAdapter = (IDXGIAdapter *)(new WrappedIDXGIAdapter4(adapter)); } } return ret; diff --git a/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj b/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj index 66a955b50..cb91e8eb6 100644 --- a/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj +++ b/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj @@ -112,6 +112,7 @@ + diff --git a/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj.filters b/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj.filters index b22042e82..4b564e749 100644 --- a/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj.filters +++ b/renderdoc/driver/dxgi/renderdoc_dxgi.vcxproj.filters @@ -48,6 +48,9 @@ PCH + + official +