Rendering with 2 different GPUs or choosing one

Hi, I have already asked this question in several places but haven’t found a solution yet. In fact it is two questions in one :stuck_out_tongue:

I have an OpenGL application that has to run in machines with diverse multi-monitor and multi-GPU configurations (and possibly different Windows versions, from XP to 7). The problem is that with most configurations that I have tried, rendering works only in one GPU. I only have been able to get rendering in both GPUs when they are very similar (a NVIDIA Quadro FX 1700 and a Quadro FX 570). So, the first question is: is there some way to render with both GPUs (each one to its monitor/s)?

Supposing I can’t find a solution for the first problem, I would be left with rendering only in one GPU, just like now. The problem in this case is that the used GPU may not be the desired one. Is there a way to programatically select which GPU will render OpenGL?

I have tested several possible solutions with pairs of NVIDIA Quadro graphics cards on Windows XP 64 (this is what I have access to at this moment). This is what I have tried:

  • [li] Rendering in both GPUs with the method proposed in http://www.rchoetzlein.com/theory/2010/multi-monitor-rendering-in-opengl/, but both rendering contexts are created in the same GPU independently of the monitor.[] Letting the NVIDIA driver decide the renderer. When it can’t use both GPUs it chooses the most powerful one, which is good. Also, the settings can be modified to force it to choose the other GPU (sometimes). But not all end users will have two NVIDIA GPUs.[] Creating the rendering context in a specific screen (either setting the main screen or creating the window where desired). In any case its the NVIDIA driver who decides dthe renderer. I don’t know what would happen with AMD.[] Disabling one monitor to force rendering on the other and the reenabling the former. This works, but it is ugly and I don’t know if it is programmable.[] Using WGL_NV_gpu_affinity to select the renderer. With this I have only been able to limit the rendering to one GPU in the one case when I can use both. In the other cases the driver has decided.

If anybody knows another possible solution or has any idea, it would be appreciated. I can give more details in my testing configuration and the tests themselves if needed.

PS: On a curious note, with Direct3D rendering works always on both screens and both GPUs, but I don’t know why (it is done by the driver?, or by the library?), and anyways I need OpenGL.

If both GPUs are from the same vendor, there might be a extension for you to select the GPU.
http://www.opengl.org/registry/specs/NV/gpu_affinity.txt
and for AMD
http://www.opengl.org/registry/specs/AMD/wgl_gpu_association.txt

or, you just create the GL window on the videocard/monitor in question. If both video cards are from the same vendor, you should get hw acceleration.

If they are different, the second monitor will use the default Microsoft drivers (software render or emulation via Direct3D and GL 1.1).

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.