问题
我有一个OpenGL应用程序,可以在不同的多图形处理器配置的机器上运行(可能还有不同的Windows版本,从XP到7)。是否有一个通用的方法来选择特定的图形处理器,将作为OpenGL渲染器独立于图形处理器组合(例如,NVIDIA + NVIDIA,NVIDIA + AMD,NVIDIA +英特尔等)?它必须是一种可以从应用程序代码中应用的解决方案,即直接在C++中或从应用程序中调用的脚本中应用,而无需最终用户干预。
下面是我为寻找解决方案所做的几个测试的详细信息,从非常具体的情况开始,但也许有一种解决方案可以在所有或大多数情况下工作。
有没有什么可靠的方法来强制哪一个图形处理器做OpenGL渲染?
任何提示都将不胜感激。提前感谢!
尝试了可能的解决方案
Windows XP 64,带两个NVIDIA Quadro
使用两个Quadro卡的组合进行测试
在64位Windows XP下使用相同的驱动程序(275.36版),我在各种方法上都取得了相当的成功,例如:
只有当两个卡使用相同的驱动程序并且决定使用所需的卡时,此解决方案才是好的。所以它太具体了,在让驱动程序决定之前,可能会在NVAPI代码中使用unpredictable.
有了这个解决方案,它在理论上可以让驱动程序如我所愿地决定,但这是困难的,需要两个卡使用相同的驱动程序,并不总是工作(与FX1700+NVS285它不work).
这样做的效果是默认情况下应用程序在选定的主屏幕中打开。此解决方案仅适用于FX 1700 + FX 570组合。对于FX 1700 + FX 540,渲染器依赖于驱动程序设置,独立于主屏幕,并且对于FX 1700 + NVS 285,当窗口在特定屏幕中时,渲染器始终是FX 1700.
可以在独立于主屏幕的所需屏幕中创建窗口,但是其具有与上面的OpenGL上下文相同的问题,所述屏幕仅启用所需图形卡中的屏幕,然后启用其它屏幕。
这是我发现的使用NVS285作为渲染器的唯一方法,但它很丑陋,我不知道它是否可以自动化,或者它是否可以在所有cases.
与FX1700和FX570的组合,扩展报告为兼容的两个GPU,我可以限制渲染只对其中之一。对于FX1700+FX540对,扩展只报告一个兼容的图形处理器,这是驱动程序决定用于OpenGL渲染的图形处理器。对于FX 1700 + NVS 285组合,始终只报告FX 1700 (我认为NVS 285不支持此扩展,因为如果它是唯一使用的卡,扩展仍不会报告它)。
采用英特尔和AMD的Windows 7 64
该系统在64位Windows 7上运行,显卡是一块Intel HD graphics 2000 (集成在CPU (Sandy Bridge)中)和一块AMD Radeon HD 6450。在所有情况下,渲染都可以在两个屏幕上运行,但渲染GPU会因某些变量而有所不同:
在这个系统上,我也尝试过a solution proposed in the OpenGL forums。选择OpenGL使用的驱动程序是一种老生常谈的方法,因此它可以在使用不同驱动程序的GPU之间进行选择,但不能在使用相同驱动程序的显卡之间进行选择。我得到了以下结果:
发布于 2011-06-10 21:38:50
由于您使用的是nvidia Quadro卡,因此可以使用WGL_NV_gpu_affinity扩展来选择图形处理器。
我不太确定ATI芯片,但我认为它是AMD_gpu_association。
https://stackoverflow.com/questions/6306190
复制相似问题