Ver Fonte

Cleanup.

Branimir Karadžić há 10 anos atrás
pai
commit
ce191fbf1c
1 ficheiros alterados com 27 adições e 7 exclusões
  1. 27 7
      src/renderer_d3d12.cpp

+ 27 - 7
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<IDXGIAdapter**>(&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: