diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp index 0fcded514..28a145f8f 100644 --- a/src/dxgi/dxgi_swapchain.cpp +++ b/src/dxgi/dxgi_swapchain.cpp @@ -73,7 +73,8 @@ namespace dxvk { if (riid == __uuidof(IUnknown) || riid == __uuidof(IDXGIObject) || riid == __uuidof(IDXGIDeviceSubObject) - || riid == __uuidof(IDXGISwapChain)) { + || riid == __uuidof(IDXGISwapChain) + || riid == __uuidof(IDXGISwapChain1)) { *ppvObject = ref(this); return S_OK; } @@ -142,6 +143,35 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetDesc1(DXGI_SWAP_CHAIN_DESC1* pDesc) { + Logger::err("DxgiSwapChain::GetDesc1: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetBackgroundColor( + DXGI_RGBA* pColor) { + Logger::err("DxgiSwapChain::GetBackgroundColor: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetRotation( + DXGI_MODE_ROTATION* pRotation) { + Logger::err("DxgiSwapChain::GetRotation: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetRestrictToOutput( + IDXGIOutput** ppRestrictToOutput) { + InitReturnPtr(ppRestrictToOutput); + + Logger::err("DxgiSwapChain::GetRestrictToOutput: Not implemented"); + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats) { std::lock_guard lock(m_mutex); @@ -177,6 +207,28 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetFullscreenDesc( + DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) { + Logger::err("DxgiSwapChain::GetFullscreenDesc: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetHwnd( + HWND* pHwnd) { + Logger::err("DxgiSwapChain::GetHwnd: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetCoreWindow( + REFIID refiid, + void** ppUnk) { + Logger::err("DxgiSwapChain::GetCoreWindow: Not implemented"); + return E_NOTIMPL; + } + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::GetLastPresentCount(UINT* pLastPresentCount) { std::lock_guard lock(m_mutex); @@ -188,6 +240,13 @@ namespace dxvk { } + BOOL STDMETHODCALLTYPE DxgiSwapChain::IsTemporaryMonoSupported() { + // This seems to be related to stereo 3D display + // modes, which we don't support at the moment + return FALSE; + } + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::Present(UINT SyncInterval, UINT Flags) { std::lock_guard lock(m_mutex); @@ -235,6 +294,17 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiSwapChain::Present1( + UINT SyncInterval, + UINT PresentFlags, + const DXGI_PRESENT_PARAMETERS* pPresentParameters) { + if (pPresentParameters != nullptr) + Logger::warn("DXGI: Present parameters not supported"); + + return Present(SyncInterval, PresentFlags); + } + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::ResizeBuffers( UINT BufferCount, UINT Width, @@ -335,6 +405,20 @@ namespace dxvk { } + HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetBackgroundColor( + const DXGI_RGBA* pColor) { + Logger::err("DxgiSwapChain::SetBackgroundColor: Not implemented"); + return E_NOTIMPL; + } + + + HRESULT STDMETHODCALLTYPE DxgiSwapChain::SetRotation( + DXGI_MODE_ROTATION Rotation) { + Logger::err("DxgiSwapChain::SetRotation: Not implemented"); + return E_NOTIMPL; + } + + HRESULT DxgiSwapChain::SetGammaControl(const DXGI_GAMMA_CONTROL* pGammaControl) { std::lock_guard lock(m_mutex); diff --git a/src/dxgi/dxgi_swapchain.h b/src/dxgi/dxgi_swapchain.h index b6c75c84c..4b694bbe1 100644 --- a/src/dxgi/dxgi_swapchain.h +++ b/src/dxgi/dxgi_swapchain.h @@ -20,69 +20,105 @@ namespace dxvk { class DxgiFactory; class DxgiOutput; - class DxgiSwapChain : public DxgiObject { + class DxgiSwapChain : public DxgiObject { public: DxgiSwapChain( - DxgiFactory* factory, - IUnknown* pDevice, - DXGI_SWAP_CHAIN_DESC* pDesc); + DxgiFactory* factory, + IUnknown* pDevice, + DXGI_SWAP_CHAIN_DESC* pDesc); + ~DxgiSwapChain(); HRESULT STDMETHODCALLTYPE QueryInterface( - REFIID riid, - void** ppvObject) final; + REFIID riid, + void** ppvObject) final; HRESULT STDMETHODCALLTYPE GetParent( - REFIID riid, - void** ppParent) final; + REFIID riid, + void** ppParent) final; HRESULT STDMETHODCALLTYPE GetDevice( - REFIID riid, - void** ppDevice) final; + REFIID riid, + void** ppDevice) final; HRESULT STDMETHODCALLTYPE GetBuffer( - UINT Buffer, - REFIID riid, - void** ppSurface) final; + UINT Buffer, + REFIID riid, + void** ppSurface) final; HRESULT STDMETHODCALLTYPE GetContainingOutput( - IDXGIOutput** ppOutput) final; + IDXGIOutput** ppOutput) final; HRESULT STDMETHODCALLTYPE GetDesc( - DXGI_SWAP_CHAIN_DESC* pDesc) final; + DXGI_SWAP_CHAIN_DESC* pDesc) final; - HRESULT STDMETHODCALLTYPE GetFrameStatistics( - DXGI_FRAME_STATISTICS* pStats) final; + HRESULT STDMETHODCALLTYPE GetDesc1( + DXGI_SWAP_CHAIN_DESC1* pDesc) final; HRESULT STDMETHODCALLTYPE GetFullscreenState( - BOOL* pFullscreen, - IDXGIOutput** ppTarget) final; + BOOL* pFullscreen, + IDXGIOutput** ppTarget) final; + + HRESULT STDMETHODCALLTYPE GetFullscreenDesc( + DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) final; + + HRESULT STDMETHODCALLTYPE GetHwnd( + HWND* pHwnd) final; + + HRESULT STDMETHODCALLTYPE GetCoreWindow( + REFIID refiid, + void** ppUnk) final; + + HRESULT STDMETHODCALLTYPE GetBackgroundColor( + DXGI_RGBA* pColor) final; + + HRESULT STDMETHODCALLTYPE GetRotation( + DXGI_MODE_ROTATION* pRotation) final; + + HRESULT STDMETHODCALLTYPE GetRestrictToOutput( + IDXGIOutput** ppRestrictToOutput) final; + + HRESULT STDMETHODCALLTYPE GetFrameStatistics( + DXGI_FRAME_STATISTICS* pStats) final; HRESULT STDMETHODCALLTYPE GetLastPresentCount( - UINT* pLastPresentCount) final; + UINT* pLastPresentCount) final; + BOOL STDMETHODCALLTYPE IsTemporaryMonoSupported() final; + HRESULT STDMETHODCALLTYPE Present( - UINT SyncInterval, - UINT Flags) final; + UINT SyncInterval, + UINT Flags) final; + HRESULT STDMETHODCALLTYPE Present1( + UINT SyncInterval, + UINT PresentFlags, + const DXGI_PRESENT_PARAMETERS* pPresentParameters) final; + HRESULT STDMETHODCALLTYPE ResizeBuffers( - UINT BufferCount, - UINT Width, - UINT Height, - DXGI_FORMAT NewFormat, - UINT SwapChainFlags) final; + UINT BufferCount, + UINT Width, + UINT Height, + DXGI_FORMAT NewFormat, + UINT SwapChainFlags) final; HRESULT STDMETHODCALLTYPE ResizeTarget( - const DXGI_MODE_DESC* pNewTargetParameters) final; + const DXGI_MODE_DESC* pNewTargetParameters) final; HRESULT STDMETHODCALLTYPE SetFullscreenState( - BOOL Fullscreen, - IDXGIOutput* pTarget) final; + BOOL Fullscreen, + IDXGIOutput* pTarget) final; + HRESULT STDMETHODCALLTYPE SetBackgroundColor( + const DXGI_RGBA* pColor) final; + + HRESULT STDMETHODCALLTYPE SetRotation( + DXGI_MODE_ROTATION Rotation) final; + HRESULT SetGammaControl( - const DXGI_GAMMA_CONTROL* pGammaControl); + const DXGI_GAMMA_CONTROL* pGammaControl); HRESULT SetDefaultGammaControl();