我有一个OpenGL应用程序,可以运行在具有不同多GPUconfiguration的机器上(也可能有不同的Windows版本,从XP到7)。 是否有一种通用的方式来select独立于GPU组合(如NVIDIA + NVIDIA,NVIDIA + AMD,NVIDIA + Intel等)的独立GPU作为OpenGL渲染器? 它必须是一个解决scheme,可以从应用程序代码中直接应用,也就是直接用C ++或从应用程序中调用的脚本,而不需要最终用户的干预。
下面是我尝试寻找解决scheme的几个testing的细节,从非常具体的案例开始,但也许有一个解决scheme,可以在所有或大多数情况下工作。
是否有任何可靠的方法来强制哪些GPU做OpenGL渲染?
任何提示将非常感激。 提前致谢!
testing两个Quadro卡的组合
在Windows XP 64位下使用相同的驱动程序(版本275.36),我已经用各种方法取得了相对的成功,例如:
让司机决定。
只要两张卡使用相同的驱动程序,并且决定使用所需的卡,此解决scheme就是好的。 所以它太具体,也许不可预测。
在让驱动程序决定之前,用NVAPI更改代码中的驱动程序设置。
有了这个解决scheme,理论上可以让驾驶员根据自己的意愿做出决定,但是很难,两张卡都需要使用相同的驱动程序,而且并不总是能够正常工作(对于FX 1700 + NVS 285而言,这是行不通的)。
改变主屏幕。
这具有应用程序在默认情况下在选定的主屏幕中打开的效果。 该解决scheme仅在FX 1700 + FX 570组合的情况下才能使用。 对于FX 1700 + FX 540,渲染器取决于驱动程序设置,与主屏幕无关,而FX 1700 + NVS 285则渲染器始终为FX 1700。
当窗口在特定的屏幕上时创buildOpenGL上下文。
窗口可以在所需的屏幕上创build,与哪个主窗口无关,但与上述解决scheme有相同的问题。
创buildOpenGL上下文只启用了所需的graphics卡中的屏幕,然后启用其他/ s。
这是我发现使用NVS 285作为渲染器的唯一方式,但它很丑,我不知道它是否可以自动化,或者在任何情况下都能正常工作。
尝试使用WGL_NV_gpu_affinity扩展select渲染GPU。
FX 1700和FX 570的组合,扩展报告两个GPU是兼容的,我可以限制渲染仅限于其中一个。 使用FX 1700 + FX 540对时,扩展报告只有一个兼容的GPU,这是驱动程序决定用于OpenGL渲染的那个。 使用FX 1700 + NVS 285组合,只有FX 1700被报告,总是(我想NVS 285不支持这个扩展,因为如果它是唯一使用的卡,它仍然没有被扩展报告)。
该系统在Windows 7 64位下运行,graphics卡是一个Intel HD Graphics 2000(集成在CPU(Sandy Bridge)中)和一个AMD Radeon HD 6450.在任何情况下,渲染都可以在两个屏幕上运行,但渲染GPU变化取决于一些variables:
有了这个系统,我也尝试了在OpenGL论坛中提出的解决scheme 。 TL; DR:selectOpenGL所使用的驱动程序是一种很不方便的方法,因此它可以在使用不同驱动程序的GPU之间进行select,但不能在使用相同驱动程序的卡之间进行select。 我获得了以下结果:
由于您使用的是NVIDIA Quadro显卡,因此您可以使用WGL_NV_gpu_affinity扩展名来选择GPU。
我不清楚ATI芯片,但我认为它是AMD_gpu_association