From 56e7389495668ec60656ade9c5ffb5ce23b7c22c Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 22 May 2018 23:52:03 +0200 Subject: [PATCH] [dxgi] Stubbed out IDXGIFactory2 --- src/dxgi/dxgi_factory.cpp | 102 +++++++++++++++++++++++++++++++++++++- src/dxgi/dxgi_factory.h | 55 +++++++++++++++++++- 2 files changed, 154 insertions(+), 3 deletions(-) diff --git a/src/dxgi/dxgi_factory.cpp b/src/dxgi/dxgi_factory.cpp index d1638d6d4..5b9e55d58 100644 --- a/src/dxgi/dxgi_factory.cpp +++ b/src/dxgi/dxgi_factory.cpp @@ -22,7 +22,8 @@ namespace dxvk { if (riid == __uuidof(IUnknown) || riid == __uuidof(IDXGIObject) || riid == __uuidof(IDXGIFactory) - || riid == __uuidof(IDXGIFactory1)) { + || riid == __uuidof(IDXGIFactory1) + || riid == __uuidof(IDXGIFactory2)) { *ppvObject = ref(this); return S_OK; } @@ -41,6 +42,12 @@ namespace dxvk { } + BOOL STDMETHODCALLTYPE DxgiFactory::IsWindowedStereoEnabled() { + // We don't support Stereo 3D at the moment + return FALSE; + } + + HRESULT STDMETHODCALLTYPE DxgiFactory::CreateSoftwareAdapter( HMODULE Module, IDXGIAdapter** ppAdapter) { @@ -76,6 +83,45 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiFactory::CreateSwapChainForHwnd( + IUnknown* pDevice, + HWND hWnd, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) { + InitReturnPtr(ppSwapChain); + + Logger::err("DxgiFactory::CreateSwapChainForHwnd: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiFactory::CreateSwapChainForCoreWindow( + IUnknown* pDevice, + IUnknown* pWindow, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) { + InitReturnPtr(ppSwapChain); + + Logger::err("DxgiFactory::CreateSwapChainForCoreWindow: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiFactory::CreateSwapChainForComposition( + IUnknown* pDevice, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) { + InitReturnPtr(ppSwapChain); + + Logger::err("DxgiFactory::CreateSwapChainForComposition: Not implemented"); + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE DxgiFactory::EnumAdapters( UINT Adapter, IDXGIAdapter** ppAdapter) { @@ -117,6 +163,14 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiFactory::GetSharedResourceAdapterLuid( + HANDLE hResource, + LUID* pLuid) { + Logger::err("DxgiFactory::GetSharedResourceAdapterLuid: Not implemented"); + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE DxgiFactory::MakeWindowAssociation(HWND WindowHandle, UINT Flags) { Logger::warn("DXGI: MakeWindowAssociation: Ignoring flags"); m_associatedWindow = WindowHandle; @@ -129,4 +183,50 @@ namespace dxvk { return TRUE; } + + HRESULT STDMETHODCALLTYPE DxgiFactory::RegisterOcclusionStatusWindow( + HWND WindowHandle, + UINT wMsg, + DWORD* pdwCookie) { + Logger::err("DxgiFactory::RegisterOcclusionStatusWindow: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiFactory::RegisterStereoStatusEvent( + HANDLE hEvent, + DWORD* pdwCookie) { + Logger::err("DxgiFactory::RegisterStereoStatusEvent: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiFactory::RegisterStereoStatusWindow( + HWND WindowHandle, + UINT wMsg, + DWORD* pdwCookie) { + Logger::err("DxgiFactory::RegisterStereoStatusWindow: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiFactory::RegisterOcclusionStatusEvent( + HANDLE hEvent, + DWORD* pdwCookie) { + Logger::err("DxgiFactory::RegisterOcclusionStatusEvent: Not implemented"); + return E_NOTIMPL; + } + + + void STDMETHODCALLTYPE DxgiFactory::UnregisterStereoStatus( + DWORD dwCookie) { + Logger::err("DxgiFactory::UnregisterStereoStatus: Not implemented"); + } + + + void STDMETHODCALLTYPE DxgiFactory::UnregisterOcclusionStatus( + DWORD dwCookie) { + Logger::err("DxgiFactory::UnregisterOcclusionStatus: Not implemented"); + } + } diff --git a/src/dxgi/dxgi_factory.h b/src/dxgi/dxgi_factory.h index 91859122d..524aacda4 100644 --- a/src/dxgi/dxgi_factory.h +++ b/src/dxgi/dxgi_factory.h @@ -8,7 +8,7 @@ namespace dxvk { - class DxgiFactory : public DxgiObject { + class DxgiFactory : public DxgiObject { public: @@ -23,6 +23,8 @@ namespace dxvk { REFIID riid, void** ppParent) final; + BOOL STDMETHODCALLTYPE IsWindowedStereoEnabled() final; + HRESULT STDMETHODCALLTYPE CreateSoftwareAdapter( HMODULE Module, IDXGIAdapter** ppAdapter) final; @@ -32,6 +34,27 @@ namespace dxvk { DXGI_SWAP_CHAIN_DESC* pDesc, IDXGISwapChain** ppSwapChain) final; + HRESULT STDMETHODCALLTYPE CreateSwapChainForHwnd( + IUnknown* pDevice, + HWND hWnd, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) final; + + HRESULT STDMETHODCALLTYPE CreateSwapChainForCoreWindow( + IUnknown* pDevice, + IUnknown* pWindow, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) final; + + HRESULT STDMETHODCALLTYPE CreateSwapChainForComposition( + IUnknown* pDevice, + const DXGI_SWAP_CHAIN_DESC1* pDesc, + IDXGIOutput* pRestrictToOutput, + IDXGISwapChain1** ppSwapChain) final; + HRESULT STDMETHODCALLTYPE EnumAdapters( UINT Adapter, IDXGIAdapter** ppAdapter) final; @@ -43,11 +66,39 @@ namespace dxvk { HRESULT STDMETHODCALLTYPE GetWindowAssociation( HWND* pWindowHandle) final; + HRESULT STDMETHODCALLTYPE GetSharedResourceAdapterLuid( + HANDLE hResource, + LUID* pLuid) final; + HRESULT STDMETHODCALLTYPE MakeWindowAssociation( HWND WindowHandle, UINT Flags) final; - BOOL STDMETHODCALLTYPE IsCurrent(); + BOOL STDMETHODCALLTYPE IsCurrent() final; + + HRESULT STDMETHODCALLTYPE RegisterOcclusionStatusWindow( + HWND WindowHandle, + UINT wMsg, + DWORD* pdwCookie) final; + + HRESULT STDMETHODCALLTYPE RegisterStereoStatusEvent( + HANDLE hEvent, + DWORD* pdwCookie) final; + + HRESULT STDMETHODCALLTYPE RegisterStereoStatusWindow( + HWND WindowHandle, + UINT wMsg, + DWORD* pdwCookie) final; + + HRESULT STDMETHODCALLTYPE RegisterOcclusionStatusEvent( + HANDLE hEvent, + DWORD* pdwCookie) final; + + void STDMETHODCALLTYPE UnregisterStereoStatus( + DWORD dwCookie) final; + + void STDMETHODCALLTYPE UnregisterOcclusionStatus( + DWORD dwCookie) final; private: