Sharing textures among multiple GPUs?

Started by
2 comments, last by eile 12 years ago
Hi,
Is there anybody who has the experience to share textures(in video memory) among multiple GPUs?
I'm doing multi-monitor development. On the machine(OS is win7), there are two or more ATI display cards(FirePro 2460 or other), each display card has one GPU and more than one output(FirePro 2460 has 4 outputs).
As the SDK mentioned, Direct3D resources can now be shared between devices or processes from Direct3D 9 for Windows Vista, so for each monitor, I create a Direct3D9 device; only one device create the texture and shared it to other devices. This can work well for one display card(that means the machine only use one display card's 4 outputs and connect to 4 monitors), but for two or more display cards, when calling CreateTexture and pass the shared handle to it, it return 0x80070057( An invalid parameter was passed to the returning function).
Can anybody tell me that whether Direct3D support it or not? Or other methods?
It seems that OpenGL can share textures among multiple GPUs.
Advertisement
The textures of two separate GPUs are physically in different memory chips. One GPU cannot access memory allocated on an another (except by copying the data via system memory).

Some Crossfire/SLI implementations could implement resource synchronization but the connection does not have nearly the same bandwidth as a PCI-X bus.

OpenGL drivers do software synchronization to make this scenario possible. In D3D, you can manually copy the data to multiple physical textures. Note that readbacks from GPU to system memory are usually relatively slow.

Niko Suni

You can't share contexts between GPUs. You have to manage the textures to each GPU separately. More (OpenGL-specific) information can be found at http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html
Forgot to mention this: there is also WGL_NV_copy_image to do GPU->GPU transfers.

This topic is closed to new replies.

Advertisement