Use DXGI_SWAP_CHAIN_DESC1 if available for additional scaling options. (#3370)
This commit is contained in:
parent
f534946822
commit
cc789e83a6
63
src/dxgi.cpp
63
src/dxgi.cpp
@ -469,7 +469,19 @@ namespace bgfx
|
|||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
uint32_t scdFlags = _scd.flags;
|
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 = _scd.flags;
|
||||||
|
|
||||||
#if BX_PLATFORM_LINUX || BX_PLATFORM_WINDOWS
|
#if BX_PLATFORM_LINUX || BX_PLATFORM_WINDOWS
|
||||||
IDXGIFactory5* factory5;
|
IDXGIFactory5* factory5;
|
||||||
@ -483,8 +495,8 @@ namespace bgfx
|
|||||||
hr = factory5->CheckFeatureSupport(DXGI_FEATURE_PRESENT_ALLOW_TEARING, &allowTearing, sizeof(allowTearing) );
|
hr = factory5->CheckFeatureSupport(DXGI_FEATURE_PRESENT_ALLOW_TEARING, &allowTearing, sizeof(allowTearing) );
|
||||||
BX_TRACE("Allow tearing is %ssupported.", allowTearing ? "" : "not ");
|
BX_TRACE("Allow tearing is %ssupported.", allowTearing ? "" : "not ");
|
||||||
|
|
||||||
scdFlags |= allowTearing ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0;
|
scd.Flags |= allowTearing ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0;
|
||||||
scdFlags |= false
|
scd.Flags |= false
|
||||||
|| _scd.swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
|
|| _scd.swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
|
||||||
|| _scd.swapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD
|
|| _scd.swapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD
|
||||||
? 0 // DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT
|
? 0 // DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT
|
||||||
@ -496,43 +508,22 @@ namespace bgfx
|
|||||||
DX_RELEASE_I(factory5);
|
DX_RELEASE_I(factory5);
|
||||||
}
|
}
|
||||||
|
|
||||||
DXGI_SWAP_CHAIN_DESC scd;
|
DXGI_SWAP_CHAIN_FULLSCREEN_DESC scfd;
|
||||||
scd.BufferDesc.Width = _scd.width;
|
scfd.RefreshRate.Numerator = 1;
|
||||||
scd.BufferDesc.Height = _scd.height;
|
scfd.RefreshRate.Denominator = 60;
|
||||||
scd.BufferDesc.RefreshRate.Numerator = 1;
|
scfd.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
|
||||||
scd.BufferDesc.RefreshRate.Denominator = 60;
|
scfd.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
|
||||||
scd.BufferDesc.Format = _scd.format;
|
scfd.Windowed = _scd.windowed;
|
||||||
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(
|
hr = m_factory->CreateSwapChainForHwnd(
|
||||||
_device
|
_device
|
||||||
|
, (HWND)_scd.nwh
|
||||||
, &scd
|
, &scd
|
||||||
, reinterpret_cast<IDXGISwapChain**>(_swapChain)
|
, &scfd
|
||||||
);
|
, NULL
|
||||||
|
, reinterpret_cast<IDXGISwapChain1**>(_swapChain)
|
||||||
|
);
|
||||||
#else
|
#else
|
||||||
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;
|
|
||||||
|
|
||||||
if (NULL == _scd.ndt)
|
if (NULL == _scd.ndt)
|
||||||
{
|
{
|
||||||
hr = m_factory->CreateSwapChainForCoreWindow(
|
hr = m_factory->CreateSwapChainForCoreWindow(
|
||||||
|
Loading…
Reference in New Issue
Block a user