我正在编写 DirectX 游戏,当我在 Optimus 笔记本电脑上运行它时,使用的是 Intel GPU,导致性能非常糟糕。如果我使用上下文菜单或通过将我的可执行文件重命名为 bf3.exe 或其他一些著名的游戏可执行文件名称来强制使用 NVIDIA GPU,则性能符合预期。
显然,当我必须重新分发我的游戏时,这两种解决方案都不是可接受的解决方案,那么有没有办法以编程方式强制笔记本电脑使用 NVIDIA GPU?
我已经尝试使用 DirectX 枚举适配器(IDirect3D9::GetAdapterCount,IDirect3D9::GetAdapterIdentifier),但它不起作用:只报告了 1 个 GPU(正在使用的那个)。
问问题
12694 次
2 回答
40
根据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;
}
于 2012-12-26T13:10:37.813 回答
5
http://www.nvidia.com/object/LO_optimus_whitepapers.html上的 Optimus 白皮书不清楚在切换到 GPU 之前究竟需要什么。白皮书称检测到 DX、DXVA 和 CUDA 调用并将导致 GPU 被打开。但此外,该决定基于 NVIDIA 维护的配置文件,当然,您的游戏尚不存在配置文件。
要尝试的一件事是进行 CUDA 调用,例如调用cuInit(0);
. 与 DX 和 DXVA 不同,英特尔集成显卡无法处理这个问题,因此它应该强制切换到 GPU。
于 2012-05-11T03:37:34.770 回答