Hi,
Last week I wrote a raytracer (CUDA SDK 2.1) that run on CUDA device. I exploit the DirectX 9 interoperability (starting from the simpleD3D9Texture sample of the SDK) such that the raytracer store pixels directly into a texture surface. My next step is to distribute this on two (or more) GPUs. Looking at the code and the documentation isn’t clear if I can use the second GPU to render in the same texture. The programming guide say: “A CUDA context may interoperate with only one Direct3D device at a time and the CUDA context and Direct3D device must be created on the same GPU”. So, there is no way to exploit my multiple GPU system when use DirectX 9 interoperability?
Best Regard,
- AGPX
P.S.: I found a bug in the simpleD3D9Texture code:
HRESULT InitD3D9(HWND hWnd)
{
// Create the D3D object.
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
// Get primary display identifier
D3DADAPTER_IDENTIFIER9 adapterId;
// Find the first CUDA capable device
unsigned int adapter;
for (adapter = 0; adapter < g_pD3D->GetAdapterCount(); adapter++)
{
D3DADAPTER_IDENTIFIER9 ident;
int device;
g_pD3D->GetAdapterIdentifier(adapter, 0, &adapterId);
cudaD3D9GetDevice(&device, ident.DeviceName);
if (cudaSuccess == cudaGetLastError()) break;
}
...
}
The line:
[font=“Courier New”]
cudaD3D9GetDevice(&device, ident.DeviceName);[/font]
make use of the unused variable ident. Instead, that line should be:
[font=“Courier New”]
cudaD3D9GetDevice(&device, adapterId.DeviceName);[/font]
replacing ident with adapterId.