forcing the game to use the highest GPU perfrence
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user