我们正在开发在Windows 7及更高版本的计算机上使用DirectX进行3D渲染的软件,64位C#/ .NET代码。
我们观察到,我们正在测试的一些较新的戴尔笔记本电脑都配有双显卡。它们具有Intel HD 4600集成显卡,并且还具有更快的NVIDIA Quadro显卡(例如)。
默认情况下,DirectX应用程序使用Intel图形。这样做可能是为了延长电池寿命。但性能明显比NVIDIA卡差。
使用NVIDIA控制面板,用户可以控制默认使用哪一个。一旦用户将其切换为使用NVIDIA显卡,性能就会大幅提升。
所以,我的问题是......在代码中,有没有办法检测此设置和/或为我们的应用程序(安装和/或启动时)修改它?我们是否可以检测到我们的应用程序正在使用英特尔卡,如果是其中一种双卡方案,则提示用户并且可能(如果他们请求)更改它们的设置?
目前我们必须让用户在NVIDIA控制面板中手动进行更改。
其他人有任何处理此问题的经验,并就如何继续进行任何建议?
答案 0 :(得分:2)
您可以使用C#DLL Interop访问属于NVML (NVidia Management Libraries)的GPU Deployment Kit (GDK)的功能。 NVML包括用于枚举和选择GPU设备的以下功能:
nvmlInit()
nvmlDeviceGetPciInfo()
nvmlDeviceGetCount()
nvmlDeviceGetHandleByIndex()
nvmlDeviceGetHandleByPciBusId()
和
nvmlDeviceSetPersistenceMode()
。
但,许多NVML功能需要管理员访问权限并重新启动才能更改设置。所以这些只有在您的用户对此(可能是在初始安装期间)时才可行。
更好的选择将枚举Direct3D设备并选择最合适的设备:Enumerating with DirectX11和Enumerating with DirectX9。
答案 1 :(得分:0)
答案是你不能,至少有一些例外。 具有双显卡的笔记本电脑通常附带一个软件,可以手动或自动切换您当前使用的卡。还有其他人可以自动检测软件应用程序对更大资源的需求,从而自动切换到nvidia卡。
但是,有一些解决方法,请参阅此thread。此外,我建议您为所有笔记本电脑手动设置默认显卡为nvidia,以消除此问题。