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