| 71 | } |
| 72 | |
| 73 | DXGIAdapter 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 |
nothing calls this directly
no test coverage detected