Hi all,
I’m really stuck here and can’t find any solution / hint in the docs or when asking google. I just updated from CUDA 2.3 to 3.1 and get errors when calling cudaGraphicsResourceGetMappedPointer on DirectX 9 texture resources. Specifically, the function returns cudaErrorInvalidValue.
Here’s a snippet of what I’m doing (note that the corresponding CUDA 2.3 code worked fine). Part (3) is where the error occurs:
void Filter::Run(IDirect3DTexture9* source)
{
if(!m_cudaInit)
{
// (1) make sure the D3D device is set
IDirect3DDevice9* device;
source->GetDevice(&device);
CUresult res = cuDriverGetVersion(&version);
if ((res == CUDA_SUCCESS) && (version >= CUDA_VERSION))
{
CUdevice cuDevice = 0;
res = cuCtxGetDevice(&cuDevice);
if((res != CUDA_SUCCESS)/* || (cuDevice == 0)*/)
{
// register d3d device and source frame as resource
cudaD3D9SetDirect3DDevice(d3dDevice);
}
}
else
{
exit(-5);
}
device->Release();
// (2) Register texture
cudaError error = cudaGraphicsD3D9RegisterResource(&m_cudaResource, source, cudaGraphicsRegisterFlagsNone);
error = cudaGraphicsResourceSetMapFlags(m_cudaResource, cudaGraphicsMapFlagsReadOnly);
m_cudaInit = true;
}
// (3) Map resource and get device pointer
error = cudaGraphicsMapResources(1, &m_cudaResource);
void* pSrc;
size_t b;
error = cudaGraphicsResourceGetMappedPointer(&pSrc, &b, m_cudaResource); // !!!! HERE IS WHERE THE ERROR OCCURS !!!!
// (4) Execute kernel
// ...<<< .. >>>
// (5) Unmap texture
error = cudaGraphicsUnmapResources(1, &m_cudaResource);
}
Any help is highly appreciated!