From ce191fbf1ce1bf75887e4b019b28426452cee0f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 16 Aug 2015 10:49:19 -0700 Subject: [PATCH] Cleanup. --- src/renderer_d3d12.cpp | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index 708f3219..4e9d289c 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -572,11 +572,23 @@ namespace bgfx { namespace d3d12 } } - hr = D3D12CreateDevice(m_adapter - , D3D_FEATURE_LEVEL_11_0 - , __uuidof(ID3D12Device) - , (void**)&m_device - ); + D3D_FEATURE_LEVEL featureLevel[] = + { + D3D_FEATURE_LEVEL_12_1, + D3D_FEATURE_LEVEL_12_0, + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_11_0, + }; + + hr = E_FAIL; + for (uint32_t ii = 0; ii < BX_COUNTOF(featureLevel) && FAILED(hr); ++ii) + { + hr = D3D12CreateDevice(m_adapter + , featureLevel[ii] + , __uuidof(ID3D12Device) + , (void**)&m_device + ); + } BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D12 device."); if (FAILED(hr) ) @@ -591,12 +603,20 @@ namespace bgfx { namespace d3d12 for (uint32_t ii = 0; DXGI_ERROR_NOT_FOUND != m_factory->EnumAdapters(ii, reinterpret_cast(&adapter) ); ++ii) { adapter->GetDesc(&m_adapterDesc); - DX_RELEASE(adapter, 0); if (m_adapterDesc.AdapterLuid.LowPart == luid.LowPart && m_adapterDesc.AdapterLuid.HighPart == luid.HighPart) { + if (NULL == m_adapter) + { + m_adapter = adapter; + } + else + { + DX_RELEASE(adapter, 0); + } break; } + DX_RELEASE(adapter, 0); } g_caps.vendorId = (uint16_t)m_adapterDesc.VendorId; @@ -963,7 +983,7 @@ namespace bgfx { namespace d3d12 m_cmd.shutdown(); DX_RELEASE(m_device, 0); case 3: - DX_RELEASE(m_adapter, 2); + DX_RELEASE(m_adapter, 0); DX_RELEASE(m_factory, 0); #if USE_D3D12_DYNAMIC_LIB case 2: