|
|
|
|
@ -145,12 +145,7 @@ void D3D12HostDisplay::SetVSync(bool enabled)
|
|
|
|
|
bool D3D12HostDisplay::CreateRenderDevice(const WindowInfo& wi)
|
|
|
|
|
{
|
|
|
|
|
ComPtr<IDXGIFactory> temp_dxgi_factory;
|
|
|
|
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
|
|
|
|
HRESULT hr = CreateDXGIFactory(IID_PPV_ARGS(temp_dxgi_factory.GetAddressOf()));
|
|
|
|
|
#else
|
|
|
|
|
HRESULT hr = CreateDXGIFactory2(0, IID_PPV_ARGS(temp_dxgi_factory.GetAddressOf()));
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
{
|
|
|
|
|
Log_ErrorPrintf("Failed to create DXGI factory: 0x%08X", hr);
|
|
|
|
|
@ -235,7 +230,6 @@ bool D3D12HostDisplay::CreateSwapChain(const DXGI_MODE_DESC* fullscreen_mode)
|
|
|
|
|
{
|
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
|
|
|
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
|
|
|
|
if (m_window_info.type != WindowInfo::Type::Win32)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
@ -281,43 +275,6 @@ bool D3D12HostDisplay::CreateSwapChain(const DXGI_MODE_DESC* fullscreen_mode)
|
|
|
|
|
hr = m_dxgi_factory->MakeWindowAssociation(swap_chain_desc.OutputWindow, DXGI_MWA_NO_WINDOW_CHANGES);
|
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
Log_WarningPrintf("MakeWindowAssociation() to disable ALT+ENTER failed");
|
|
|
|
|
#else
|
|
|
|
|
if (m_window_info.type != WindowInfo::Type::WinRT)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
ComPtr<IDXGIFactory2> factory2;
|
|
|
|
|
hr = m_dxgi_factory.As(&factory2);
|
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
{
|
|
|
|
|
Log_ErrorPrintf("Failed to get DXGI factory: %08X", hr);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DXGI_SWAP_CHAIN_DESC1 swap_chain_desc = {};
|
|
|
|
|
swap_chain_desc.Width = m_window_info.surface_width;
|
|
|
|
|
swap_chain_desc.Height = m_window_info.surface_height;
|
|
|
|
|
swap_chain_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
|
|
|
|
swap_chain_desc.SampleDesc.Count = 1;
|
|
|
|
|
swap_chain_desc.BufferCount = 3;
|
|
|
|
|
swap_chain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
|
|
|
|
swap_chain_desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
|
|
|
|
|
|
|
|
|
|
m_using_allow_tearing = (m_allow_tearing_supported && !fullscreen_mode);
|
|
|
|
|
if (m_using_allow_tearing)
|
|
|
|
|
swap_chain_desc.Flags |= DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
|
|
|
|
|
|
|
|
|
|
ComPtr<IDXGISwapChain1> swap_chain1;
|
|
|
|
|
hr = factory2->CreateSwapChainForCoreWindow(g_d3d12_context->GetCommandQueue(),
|
|
|
|
|
static_cast<IUnknown*>(m_window_info.window_handle), &swap_chain_desc,
|
|
|
|
|
nullptr, swap_chain1.GetAddressOf());
|
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
{
|
|
|
|
|
Log_ErrorPrintf("CreateSwapChainForCoreWindow failed: 0x%08X", hr);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_swap_chain = swap_chain1;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return CreateSwapChainRTV();
|
|
|
|
|
}
|
|
|
|
|
@ -794,11 +751,7 @@ void D3D12HostDisplay::RenderSoftwareCursor(ID3D12GraphicsCommandList* cmdlist,
|
|
|
|
|
HostDisplay::AdapterAndModeList D3D12HostDisplay::StaticGetAdapterAndModeList()
|
|
|
|
|
{
|
|
|
|
|
ComPtr<IDXGIFactory> dxgi_factory;
|
|
|
|
|
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
|
|
|
|
HRESULT hr = CreateDXGIFactory(IID_PPV_ARGS(dxgi_factory.GetAddressOf()));
|
|
|
|
|
#else
|
|
|
|
|
HRESULT hr = CreateDXGIFactory2(0, IID_PPV_ARGS(dxgi_factory.GetAddressOf()));
|
|
|
|
|
#endif
|
|
|
|
|
if (FAILED(hr))
|
|
|
|
|
return {};
|
|
|
|
|
|
|
|
|
|
|