Mesa (main): d3d12: fallback to integrated adapter instead of arbitrary one

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 16 00:29:33 UTC 2022


Module: Mesa
Branch: main
Commit: 4622e99e103ec2c079c6da082752f8a3c2bd0c83
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4622e99e103ec2c079c6da082752f8a3c2bd0c83

Author: Tiago Koji Castro Shibata <tiago.shibata at gmail.com>
Date:   Wed May 25 21:41:27 2022 -0700

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 at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17005>

---

 src/gallium/drivers/d3d12/d3d12_dxcore_screen.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_dxcore_screen.cpp b/src/gallium/drivers/d3d12/d3d12_dxcore_screen.cpp
index b12f2f4b3b1..7017cbf5046 100644
--- a/src/gallium/drivers/d3d12/d3d12_dxcore_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_dxcore_screen.cpp
@@ -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;
    }



More information about the mesa-commit mailing list