Подтвердить что ты не робот

Принудительное использование графического процессора NVIDIA в ноутбуках Optimus

Я программирую игру DirectX, и когда я запускаю ее на ноутбуке Optimus, используется Intel GPU, что приводит к ужасной производительности. Если я заставляю графический процессор NVIDIA использовать контекстное меню или переименовывая свой исполняемый файл в bf3.exe или другое известное исполняемое имя игры, производительность будет такой же, как ожидалось.
Очевидно, что ни одно из них не является приемлемым решением, когда мне приходится перераспределять мою игру, поэтому есть ли способ программно заставить ноутбук использовать графический процессор NVIDIA?

Я уже пробовал использовать DirectX для перечисления адаптеров (IDirect3D9:: GetAdapterCount, IDirect3D9:: GetAdapterIdentifier), и он не работает: сообщается только 1 графический процессор (тот, который используется).

4b9b3361

Ответ 1

Технический документ Optimus в http://www.nvidia.com/object/LO_optimus_whitepapers.html неясен в точности, что требуется, прежде чем будет сделан переход на GPU. В техническом документе говорится, что обнаружены вызовы DX, DXVA и CUDA, что приведет к включению GPU. Но, кроме того, решение основано на профилях, поддерживаемых NVIDIA, и, конечно же, еще не существует для вашей игры.

Можно попытаться сделать вызов CUDA, например, cuInit(0);. В отличие от DX и DXVA, для интегрированной графики Intel нет способа справиться с этим, поэтому он должен принудительно переключиться на GPU.

Ответ 2

В соответствии с http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf, начиная с 302 драйверов, достаточно связать статически с одной из следующих библиотек: vcamp110.dll, vcamp110d.dll, nvapi.dll, nvapi64.dll, opencl.dll, nvcuda.dll, cudart *. * или экспортировать переменную NvOptimusEnablement в вашу программу:

extern "C" {
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}