From 75e6fe2a279a1c29eda335f72bc01b58580a2e6d Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Sun, 2 Apr 2023 12:31:22 +0200 Subject: [PATCH] Prefer high performance GPUs in laptops with DX12 #746 --- neo/sys/DeviceManager.h | 1 + neo/sys/DeviceManager_DX12.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/neo/sys/DeviceManager.h b/neo/sys/DeviceManager.h index dab8e31d..8726a3cf 100644 --- a/neo/sys/DeviceManager.h +++ b/neo/sys/DeviceManager.h @@ -28,6 +28,7 @@ #if USE_DX11 || USE_DX12 #include + #include #endif #if USE_DX11 diff --git a/neo/sys/DeviceManager_DX12.cpp b/neo/sys/DeviceManager_DX12.cpp index 8f95c8c4..f6c228f8 100644 --- a/neo/sys/DeviceManager_DX12.cpp +++ b/neo/sys/DeviceManager_DX12.cpp @@ -121,11 +121,22 @@ static RefCountPtr FindAdapter( const std::wstring& targetName ) return targetAdapter; } + RefCountPtr DXGIFactory6; + unsigned int adapterNo = 0; while( SUCCEEDED( hres ) ) { RefCountPtr pAdapter; - hres = DXGIFactory->EnumAdapters( adapterNo, &pAdapter ); + + // Try to use EnumAdapterByGpuPreference method to get the better performing GPU. + if( S_OK == DXGIFactory->QueryInterface( IID_PPV_ARGS( &DXGIFactory6 ) ) ) + { + hres = DXGIFactory6->EnumAdapterByGpuPreference( adapterNo, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS( &pAdapter ) ); + } + else + { + hres = DXGIFactory->EnumAdapters( adapterNo, &pAdapter ); + } if( SUCCEEDED( hres ) ) {