我正在编写一个DirectX游戏,当我在Optimus笔记本电脑上运行它时,使用了Intel GPU,导致性能很糟糕。如果我使用上下文菜单或将可执行文件重命名为 bf3.exe 或其他一些著名的游戏可执行文件名称来强制使用 NVIDIA GPU,则性能符合预期。
显然,当我必须重新分发游戏时,两者都不是可接受的解决方案,那么有没有办法以编程方式强制笔记本电脑使用 NVIDIA GPU?
我已经尝试使用DirectX枚举适配器(IDirect3D9::GetAdapterCount,IDirect3D9::GetAdapterIdentifier),但它不起作用:只报告了1个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 的Optimus白皮书尚不清楚切换到GPU之前需要什么。白皮书说,检测到DX,DXVA和CUDA调用,并将导致GPU打开。但除此之外,该决定是基于 NVIDIA 维护的配置文件,当然,您的游戏尚不存在配置文件。
要尝试的一件事是拨打 CUDA 电话,例如 cuInit(0);
.与DX和DXVA相反,英特尔集成显卡无法处理这个问题,因此它应该强制切换到GPU。