forcing the game to use the highest GPU perfrence

This commit is contained in:
Joud Kandeel
2026-10-04 20:48:38 +02:00
committed by Anaël
parent 594e6659b7
commit 8fd51a82e9
@@ -583,6 +583,7 @@ static bool TakeScreenshot(wstring& outFilename)
return success;
}
IDXGIAdapter* g_pAdapter = nullptr;
ID3D11RenderTargetView* g_pRenderTargetView = nullptr;
ID3D11DepthStencilView* g_pDepthStencilView = nullptr;
ID3D11Texture2D* g_pDepthStencilBuffer = nullptr;
@@ -927,6 +928,7 @@ HRESULT InitDevice()
D3D_DRIVER_TYPE_HARDWARE,
D3D_DRIVER_TYPE_WARP,
D3D_DRIVER_TYPE_REFERENCE,
D3D_DRIVER_TYPE_UNKNOWN
};
UINT numDriverTypes = ARRAYSIZE( driverTypes );
@@ -963,10 +965,42 @@ HRESULT InitDevice()
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
/*
* @CDevJoud: we would like to force the game to choose the highest GPU available.
* we loop over all the GPUs in the system and choose the one that are either
* Nvidia or AMD and ignore the integrated one
*/
IDXGIFactory* pFactory = nullptr;
CreateDXGIFactory(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&pFactory));
IDXGIAdapter* adapter = nullptr;
for (INT i = 0; pFactory->EnumAdapters(i, &adapter) != DXGI_ERROR_NOT_FOUND; i++) {
if (adapter != nullptr) {
DXGI_ADAPTER_DESC desc{};
adapter->GetDesc(&desc);
//Nvidia GPUs
if (desc.VendorId == 0x10DE /*Nvidia GPUs*/) {
g_pAdapter = adapter;
break;
} else if (desc.VendorId == 0x1002 /*AMD GPUs*/) {
g_pAdapter = adapter;
break;
} else if(desc.VendorId == 0x8086 /*Intel GPUs*/) {
g_pAdapter = adapter;
break;
}
else {
// If there is no Adapter found just use anything
g_pAdapter = adapter;
}
}
}
for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ )
{
g_driverType = driverTypes[driverTypeIndex];
hr = D3D11CreateDeviceAndSwapChain( nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels,
hr = D3D11CreateDeviceAndSwapChain( g_pAdapter, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels,
D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext );
if( HRESULT_SUCCEEDED( hr ) )
break;
@@ -2297,6 +2331,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
// Free resources, unregister custom classes, and exit.
// app.Uninit();
g_pAdapter->Release();
g_pd3dDevice->Release();
}