Hello everybody
Since the version 3, OpenGL look like have the same power of DirectX. But there only one thing where OpenGL can be considered “deprecated” : multiple GPU support.
OpenGL contexts’ are to basic, and it may be very nice to have a such support like DirectX 10 or 11 with multiple GPU. OpenCL’s context’s creation is very nice too.
The idea is to have a full control off GPUs and bridges (SLI and CrossFire) without using specific vendors’ APIs or extensions, and without specific operating systems function (like OpenCL’s context’s creation).
The easiest solution could be to consider a virtual device : an array of multiple GPUs interconnected by the same bridge.
Exemple of a computer who has a SLI 3-ways and an other GPU :
Virtual device 0
{
GPU 0
GPU 1
GPU 2
}
Virtual device 1
{
GPU 3
}
A OpenGL Context should be create on one virtual device.
For example in our fictive computer, we create an OpenGL Context 0 on the virtual device 0.
In a context, we should create one or more memory device. A memory device is where texture, FBOs, render buffers, VB0s, shaders […] should be store And each GPU can have one or more memory device.
For example in our fictive computer, we create 2 memory device :
Memory device 0 on GPU 0 and 1 (so data will be copied in the two graphic memory)
Memory device 1 on GPU 2
And in a context, we should create one or more OpenGL pipeline. One pipeline per thread on the CPU.
For example in our fictive computer, we create 3 memory device :
pipeline 0 on GPU 0 on the thread N1
pipeline 1 on GPU 1 on the thread N2
pipeline 2 on GPU 0 and 1 on the thread N3
pipeline 3 on GPU 2 on the thread N4
So on threads N1 et N2, we can render by a dynamic 2D load-balancing, on threads N3 we can have an “on the fly loading for the memory device 0”. and on the thread N4, we can render shadow maps.
And then we should have commands to copy somme objects from a memory device to an other may be on an other GPU. And the copy directly use the bridge connection instead passing by mother board’s memory.
I think a such idea could be very difficult to implement, but it could bring to us a lot of facilities and performance for Multiple GPUs rendering.