Stefan, I have taken sometime to read through Equalizer. Very interesting.
However, I will utlimately use Chromium to run unmodified existing apps and I’m planning to write an SPU that allows a single box to render across multiple graphics cards within the box. The idea is avoid the interprocess communication within a box that seems to clog Chromium up on WinXP.
As a starting point, I am not writing a Chromium SPU currently. I just want to write a simple OpenGL app that renders multiple viewports (one per graphics card) without having to loop through the geometry N times (where N is the number of cards or viewports).
In an ideal world, I would like to have a draw code that sets N viewports up on each card, then throws out the geometry calls for a single scene. The cards render this scene relative to their viewport.
In my head it seems simple enough. I am just unable to figure out how to get OpenGL and WinXp to achieve it.
If I use GPU affinity on the N viewport calls, then the masks are immutable and thus I’ll have to loop N times on geometry. Defeats the intent. Conversely, if I just setup the viewports sequentially without GPU affinity, then the last one set will be the one the geometry calls render into. Again, no avail.
I am thinking that multiple threads with multiple contexts and using the GPU affinity mask is the way to go. However, two concerns:
(1) If the calls all go over the PCIe bus anyway, is there an advantage to the GPU affinity?
(2) Assuming an advantage, how can I efficiently have the threads access a common set of geometry calls, keeping in mind that I ultimately want to write a Chromium SPU that would simply pass down a sequence of OpenGL geometry calls to each thread?
I hope I’m making sense here. I would really like to use Equalizer, but I just don’t think that’s possible. For better or for worse, I think we are married to Chromium.