#pragma once #include "dxgi_object.h" namespace dxvk { class DxgiAdapter; /** * \brief Per-output data * * Persistent data for a single output, which * is addressed using the \c HMONITOR handle. */ struct DXGI_VK_OUTPUT_DATA { DXGI_FRAME_STATISTICS FrameStats; DXGI_GAMMA_CONTROL GammaCurve; BOOL GammaDirty; }; class DxgiOutput : public DxgiObject { public: DxgiOutput( const Com& adapter, HMONITOR monitor); ~DxgiOutput(); HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void **ppvObject) final; HRESULT STDMETHODCALLTYPE GetParent( REFIID riid, void **ppParent) final; HRESULT STDMETHODCALLTYPE FindClosestMatchingMode( const DXGI_MODE_DESC *pModeToMatch, DXGI_MODE_DESC *pClosestMatch, IUnknown *pConcernedDevice) final; HRESULT STDMETHODCALLTYPE GetDesc( DXGI_OUTPUT_DESC *pDesc) final; HRESULT STDMETHODCALLTYPE GetDisplayModeList( DXGI_FORMAT EnumFormat, UINT Flags, UINT *pNumModes, DXGI_MODE_DESC *pDesc) final; HRESULT STDMETHODCALLTYPE GetDisplaySurfaceData( IDXGISurface *pDestination) final; HRESULT STDMETHODCALLTYPE GetFrameStatistics( DXGI_FRAME_STATISTICS *pStats) final; HRESULT STDMETHODCALLTYPE GetGammaControl( DXGI_GAMMA_CONTROL *pArray) final; HRESULT STDMETHODCALLTYPE GetGammaControlCapabilities( DXGI_GAMMA_CONTROL_CAPABILITIES *pGammaCaps) final; void STDMETHODCALLTYPE ReleaseOwnership() final; HRESULT STDMETHODCALLTYPE SetDisplaySurface( IDXGISurface *pScanoutSurface) final; HRESULT STDMETHODCALLTYPE SetGammaControl( const DXGI_GAMMA_CONTROL *pArray) final; HRESULT STDMETHODCALLTYPE TakeOwnership( IUnknown *pDevice, BOOL Exclusive) final; HRESULT STDMETHODCALLTYPE WaitForVBlank() final; private: Com m_adapter = nullptr; HMONITOR m_monitor = nullptr; uint32_t GetFormatBpp(DXGI_FORMAT Format) const; }; }