1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-07 16:46:17 +01:00
dxvk/src/dxgi/dxgi_output.h
Philip Rebohle a32050374c [dxgi] Implement display mode changes
Allows games to change the screen resolution in fullscreen
mode. This is currently in a rough shape and some games may
not work as expected when selecting fullscreen mode.
2018-04-29 23:03:27 +02:00

97 lines
2.6 KiB
C++

#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<IDXGIOutput> {
public:
DxgiOutput(
const Com<DxgiAdapter>& 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;
HRESULT GetDisplayMode(
DXGI_MODE_DESC* pMode,
DWORD ModeNum);
HRESULT SetDisplayMode(
const DXGI_MODE_DESC* pMode);
private:
Com<DxgiAdapter> m_adapter = nullptr;
HMONITOR m_monitor = nullptr;
uint32_t GetFormatBpp(DXGI_FORMAT Format) const;
};
}