EnumAdapters often enumerates default adapter twice on multi-GPU PC

Suguru Kitsuki 11 Reputation points
2022-08-06T16:43:41.893+00:00

My PC has two graphic cards, RTX A4000 and RX6400.
But EnumAdapters enumrates 3 graphic cards. A4000, RX6400 and A4000

example code:

Microsoft::WRL::ComPtr<IDXGIAdapter1> adapter;
for (UINT adapterIndex = 0; S_OK == factory->EnumAdapters1(adapterIndex, &adapter); ++adapterIndex) {
DXGI_ADAPTER_DESC1 desc;
if (adapter->GetDesc1(&desc) == S_OK && (desc.Flags& DXGI_ADAPTER_FLAG_SOFTWARE)==0) {
wprintf_s(L"%u:%x-%05x: %s\n", adapterIndex, desc.AdapterLuid.HighPart, desc.AdapterLuid.LowPart, desc.Description);
}
}

output:
0:0-0fca0: NVIDIA RTX A4000
1:0-11bf6: AMD Radeon RX 6400
2:0-1b89e: NVIDIA RTX A4000

Why is default graphic card RTX A4000 listed twice when there is only one?
I tested on some PC and multiple GPU combinations, 2080Ti, RTX3070, RTX3060.... and encountered this problem with high probability.
There is no problem if the PC has only one GPU.
DxDiag also reports the default graphic card twice on multi-GPU PC.
I think this problem has occurred since Windows 10 1903~1909.

Windows development Windows API - Win32
Windows for business Windows Client for IT Pros User experience Other
Developer technologies C++
{count} votes

1 answer

Sort by: Most helpful
  1. Husnain Ali 0 Reputation points
    2023-12-01T23:16:19.8733333+00:00

    The issue with EnumAdapters listing the default graphics card twice is likely due to how DXGI handles GPU enumeration in some Windows 10 versions.

    To work around this:

    1. Make sure your graphics drivers and Windows are up to date.
    2. Check for duplicates based on the unique GPU identifier (AdapterLuid).
    3. If the problem persists, report it to Microsoft through Feedback Hub or Developer Community.

    This issue may be specific to certain Windows versions, and updates could address it.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.