d3d12: fallback to integrated adapter instead of arbitrary one

Using the integrated adapter when none is specified uses less power by
default and doesn't break scenarios on Optimus systems (for example, on
Surface Books, detaching the screen gets prohibited because the GPU on
the performance base is in use)

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17005>
This commit is contained in:
Tiago Koji Castro Shibata 2022-05-25 21:41:27 -07:00 committed by Marge Bot
parent 3b867ae69b
commit 4622e99e10

View file

@ -110,7 +110,17 @@ choose_dxcore_adapter(IDXCoreAdapterFactory *factory, LUID *adapter_luid)
}
#endif
// No adapter specified or not found, pick 0 as the default
// Adapter not specified or not found, so pick an integrated adapter if possible
for (unsigned i = 0; i < list->GetAdapterCount(); ++i) {
if (SUCCEEDED(list->GetAdapter(i, &adapter))) {
bool is_integrated;
if (SUCCEEDED(adapter->GetProperty(DXCoreAdapterProperty::IsIntegrated, &is_integrated)) && is_integrated)
return adapter;
adapter->Release();
}
}
// No integrated GPUs, so pick the first valid one
if (list->GetAdapterCount() > 0 && SUCCEEDED(list->GetAdapter(0, &adapter)))
return adapter;
}