176 ComPtr<IDXGIFactory6> factory;
181 std::vector<LUID> seen;
182 for (UINT index = 0;; ++index) {
183 ComPtr<IDXGIAdapter1> adapter;
184 if (factory->EnumAdapterByGpuPreference(index, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE,
185 IID_PPV_ARGS(&adapter)) == DXGI_ERROR_NOT_FOUND) {
189 DXGI_ADAPTER_DESC1 desc{};
193 if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)
196 if (rng::any_of(seen, [&](
const LUID& luid) {
return SameLuid(luid, desc.AdapterLuid); }))
198 seen.push_back(desc.AdapterLuid);
201 ToUtf8(desc.Description), desc.DedicatedVideoMemory >> 20,
202 static_cast<unsigned long>(desc.AdapterLuid.HighPart), desc.AdapterLuid.LowPart, desc.Flags);
204 ReportAdapterIdentity(adapter.Get(), desc);
207 ComPtr<ID3D12Device> device;
208 const HRESULT result = D3D12CreateDevice(adapter.Get(), D3D_FEATURE_LEVEL_12_2, IID_PPV_ARGS(&device));
210 if (FAILED(result)) {
219 ReportDevice(device.Get());
227 ReportWarp(factory.Get());