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

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

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

2 ответа

Решение

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

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

Согласно 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;
}
Другие вопросы по тегам