@@ -38,63 +38,20 @@ class DxgiModule
38
38
}
39
39
};
40
40
41
- extern " C" __declspec(dllexport) int __cdecl GetAdapter (bool preferHighPerformance)
42
- {
43
- DxgiModule dxgi;
44
-
45
- ComPtr<IDXGIFactory6> factory = dxgi.CreateFactory ();;
46
- if (!factory)
47
- {
48
- return 0 ;
49
- }
50
-
51
- ComPtr<IDXGIAdapter1> adapter;
52
-
53
- // Store LUIDs for hardware adapters in original unsorted order.
54
- std::vector<std::pair<int , LUID>> adaptersUnsortedIndexAndLuid;
55
- for (int i = 0 ; factory->EnumAdapters1 (i, adapter.ReleaseAndGetAddressOf ()) != DXGI_ERROR_NOT_FOUND; i++)
56
- {
57
- DXGI_ADAPTER_DESC desc = {};
58
- RETURN_IF_FAILED (adapter->GetDesc (&desc));
59
- adaptersUnsortedIndexAndLuid.emplace_back (i, desc.AdapterLuid );
60
- }
61
-
62
- // Find the first adapter meeting GPU preference.
63
- DXGI_ADAPTER_DESC preferredAdapterDesc = {};
64
- {
65
- DXGI_GPU_PREFERENCE gpuPreference = preferHighPerformance ? DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE : DXGI_GPU_PREFERENCE_MINIMUM_POWER;
66
- RETURN_IF_FAILED (factory->EnumAdapterByGpuPreference (0 , gpuPreference, IID_PPV_ARGS (adapter.ReleaseAndGetAddressOf ())));
67
- RETURN_IF_FAILED (adapter->GetDesc (&preferredAdapterDesc));
68
- }
69
-
70
- // Look up the index of the preferred adapter in the unsorted list order.
71
- for (auto & hardwareAdapterEntry : adaptersUnsortedIndexAndLuid)
72
- {
73
- if (hardwareAdapterEntry.second .HighPart == preferredAdapterDesc.AdapterLuid .HighPart &&
74
- hardwareAdapterEntry.second .LowPart == preferredAdapterDesc.AdapterLuid .LowPart )
75
- {
76
- return hardwareAdapterEntry.first ;
77
- }
78
- }
79
-
80
- return 0 ;
81
- }
82
-
83
41
84
42
extern " C" __declspec(dllexport) void __cdecl GetAdapters (AdapterInfo * adapterArray)
85
43
{
86
44
DxgiModule dxgi;
87
-
88
- ComPtr<IDXGIFactory6> factory = dxgi.CreateFactory ();;
45
+ ComPtr<IDXGIFactory6> factory = dxgi.CreateFactory ();
89
46
if (!factory)
90
47
return ;
91
48
92
49
int adapterCount = 0 ;
93
50
ComPtr<IDXGIAdapter1> adapter;
94
- for (int i = 0 ; factory->EnumAdapters1 (i, adapter.ReleaseAndGetAddressOf ()) != DXGI_ERROR_NOT_FOUND; i++)
51
+ for (int i = 0 ; factory->EnumAdapterByGpuPreference (i, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS ( adapter.ReleaseAndGetAddressOf () )) != DXGI_ERROR_NOT_FOUND; i++)
95
52
{
96
- DXGI_ADAPTER_DESC desc = {};
97
- HRESULT hr = adapter->GetDesc (&desc);
53
+ DXGI_ADAPTER_DESC1 desc = {};
54
+ HRESULT hr = adapter->GetDesc1 (&desc);
98
55
if (SUCCEEDED (hr))
99
56
{
100
57
AdapterInfo info{};
@@ -107,6 +64,7 @@ extern "C" __declspec(dllexport) void __cdecl GetAdapters(AdapterInfo * adapterA
107
64
info.SharedSystemMemory = desc.SharedSystemMemory ;
108
65
info.SubSysId = desc.SubSysId ;
109
66
info.VendorId = desc.VendorId ;
67
+ info.Flags = desc.Flags ;
110
68
wcsncpy_s (info.Description , desc.Description , _TRUNCATE);
111
69
adapterArray[adapterCount] = info;
112
70
++adapterCount;
0 commit comments