MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / GetMostPowerful

Method GetMostPowerful

GTE/Graphics/DX11/DXGIAdapter.cpp:73–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73DXGIAdapter DXGIAdapter::GetMostPowerful()
74{
75 // NVIDIA Vendor ID: 0x000010de
76 // AMD Vendor ID: 0x00001002
77 // Intel Vendor ID: 0x00008086
78 // Microsoft Vendor ID: 0x00001414, L"Microsoft Basic Render Driver"
79
80 std::vector<DXGIAdapter> adapters;
81 Enumerate(adapters);
82 std::vector<size_t> discreteAdapters;
83 size_t intelAdapter = std::numeric_limits<size_t>::max();
84 size_t microsoftAdapter = std::numeric_limits<size_t>::max();
85 for (size_t i = 0; i < adapters.size(); ++i)
86 {
87 auto const& desc = adapters[i].GetDescription();
88 if (desc.VendorId == 0x00008086u)
89 {
90 intelAdapter = i;
91 }
92 else if (desc.VendorId == 0x00001414u)
93 {
94 microsoftAdapter = i;
95 }
96 else
97 {
98 discreteAdapters.push_back(i);
99 }
100 }
101
102 IDXGIAdapter1* adapter = nullptr;
103 if (discreteAdapters.size() > 0)
104 {
105 adapter = adapters[discreteAdapters.front()].GetAdapter();
106 }
107 else if (intelAdapter != std::numeric_limits<size_t>::max())
108 {
109 adapter = adapters[intelAdapter].GetAdapter();
110 }
111 else if (microsoftAdapter != std::numeric_limits<size_t>::max())
112 {
113 adapter = adapters[microsoftAdapter].GetAdapter();
114 }
115 else
116 {
117 // If you reach this error, please report a bug to Geometric Tools.
118 LogError("DXGI adapter enumeration failed to find a GPU.");
119 }
120
121 return DXGIAdapter(adapter);
122}
123
124

Callers

nothing calls this directly

Calls 3

DXGIAdapterClass · 0.85
GetDescriptionMethod · 0.80
GetAdapterMethod · 0.45

Tested by

no test coverage detected