Skip to content

Commit

Permalink
Use DXGI_SWAP_CHAIN_DESC1 if available for additional scaling options.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtytel committed Oct 31, 2024
1 parent f534946 commit 847698d
Showing 1 changed file with 59 additions and 21 deletions.
80 changes: 59 additions & 21 deletions src/dxgi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -496,28 +496,66 @@ namespace bgfx
DX_RELEASE_I(factory5);
}

DXGI_SWAP_CHAIN_DESC scd;
scd.BufferDesc.Width = _scd.width;
scd.BufferDesc.Height = _scd.height;
scd.BufferDesc.RefreshRate.Numerator = 1;
scd.BufferDesc.RefreshRate.Denominator = 60;
scd.BufferDesc.Format = _scd.format;
scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
scd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
scd.SampleDesc.Count = 1;
scd.SampleDesc.Quality = 0;
scd.BufferUsage = _scd.bufferUsage;
scd.BufferCount = _scd.bufferCount;
scd.OutputWindow = (HWND)_scd.nwh;
scd.Windowed = _scd.windowed;
scd.SwapEffect = _scd.swapEffect;
scd.Flags = scdFlags;

hr = m_factory->CreateSwapChain(
_device
, &scd
, reinterpret_cast<IDXGISwapChain**>(_swapChain)
IDXGIFactory2* factory2;
hr = m_factory->QueryInterface(IID_IDXGIFactory2, (void**)&factory2);

if (SUCCEEDED(hr) )
{
DX_RELEASE_I(factory2);
DXGI_SWAP_CHAIN_DESC1 scd;
scd.Width = _scd.width;
scd.Height = _scd.height;
scd.Format = _scd.format;
scd.Stereo = _scd.stereo;
scd.SampleDesc.Count = 1;
scd.SampleDesc.Quality = 0;
scd.BufferUsage = _scd.bufferUsage;
scd.BufferCount = _scd.bufferCount;
scd.Scaling = _scd.scaling;
scd.SwapEffect = _scd.swapEffect;
scd.AlphaMode = _scd.alphaMode;
scd.Flags = scdFlags;

DXGI_SWAP_CHAIN_FULLSCREEN_DESC scfd;
scfd.RefreshRate.Numerator = 1;
scfd.RefreshRate.Denominator = 60;
scfd.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
scfd.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
scfd.Windowed = _scd.windowed;

hr = m_factory->CreateSwapChainForHwnd(
_device
, (HWND)_scd.nwh
, &scd
, &scfd, NULL
, reinterpret_cast<IDXGISwapChain1**>(_swapChain)
);
}
else
{
DXGI_SWAP_CHAIN_DESC scd;
scd.BufferDesc.Width = _scd.width;
scd.BufferDesc.Height = _scd.height;
scd.BufferDesc.RefreshRate.Numerator = 1;
scd.BufferDesc.RefreshRate.Denominator = 60;
scd.BufferDesc.Format = _scd.format;
scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
scd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
scd.SampleDesc.Count = 1;
scd.SampleDesc.Quality = 0;
scd.BufferUsage = _scd.bufferUsage;
scd.BufferCount = _scd.bufferCount;
scd.OutputWindow = (HWND)_scd.nwh;
scd.Windowed = _scd.windowed;
scd.SwapEffect = _scd.swapEffect;
scd.Flags = scdFlags;

hr = m_factory->CreateSwapChain(
_device
, &scd
, reinterpret_cast<IDXGISwapChain**>(_swapChain)
);
}
#else
DXGI_SWAP_CHAIN_DESC1 scd;
scd.Width = _scd.width;
Expand Down

0 comments on commit 847698d

Please sign in to comment.