Вопрос по c++, nvidia – Принудительное использование графического процессора NVIDIA в ноутбуках Optimus
Я программирую игру DirectX, и когда я запускаю ее на ноутбуке Optimus, используется графический процессор Intel, что приводит к ужасной производительности. Если я заставлю графический процессор NVIDIA с помощью контекстного меню или переименую свой исполняемый файл в bf3.exe или в другое известное имя исполняемого файла игры, производительность будет такой, как и ожидалось.
Очевидно, что и то, и другое не является приемлемым решением, когда мне приходится распространять свою игру, так есть ли способ программно заставить ноутбук использовать графический процессор NVIDIA?
Я уже пытался использовать DirectX для перечисления адаптеров (IDirect3D9 :: GetAdapterCount, IDirect3D9 :: GetAdapterIdentifier), и он не работает: сообщается только об одном GPU (используемом).
В соответствии с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;
}
Оптимус в Белой книге наhttp://www.nvidia.com/object/LO_optimus_whitepapers.html неясно, что именно нужно сделать, чтобы переключиться на GPU. В официальном документе говорится, что вызовы DX, DXVA и CUDA обнаружены и приведут к включению графического процессора. Но кроме того, решение основано на профилях, поддерживаемых NVIDIA, и, конечно же, для вашей игры еще нет.
Одна вещь, которую можно попробовать, это сделать вызов CUDA, например,cuInit(0);
, В отличие от DX и DXVA, интегрированная графика Intel не может справиться с этим, поэтому она должна принудительно переключиться на графический процессор.