Cuda DiectX pixel data exchange

I know CUDA can share data with DirectX by Vertex buffers.

Is it possible to exchange fast pixel information between Cuda and DirectX?
If not, is it planned in the next version?

Thank you


Not currently, and not in the 1.1 release. CUDA - DirectX interop only supports vertex data.

Is DirectX pixel interop important for your application? Most of our customers who are doing visualization are using OpenGL (which does support pixel data interop).

Getting access to the pixel information in YUV formatted IDirect3DSurface9’s would be very powerful in video processing applications as you get the benefits from PureVideo instead of having to decode in software. It can be done today with pixel shaders but only after transformation to a RGB texture type.

Could we hope to see this in a release after 1.1?


You may have encountered a limitation with the DX9 driver not texturing from D3DFMT_YUY2 textures. Alternatively, you can take a YUV422 surface stored as a A8L8 surface in memory. Then using a a pixel shader you can perform the YUV 4:2:2 to RGB color space conversion.

CUDA 2.0 supports (reading/writing) to DX9 2D textures. You can take a surface as YUV directly after the PureVideo pipeline (through VMR9 or EVR), then pass it to a CUDA kernel to do color space conversion and/or post processing.

Putting data into A8L8 textures/surfaces is not an option when using DXVA. But with software decoding you have more freedom. Not a big fan of 4:2:2 since lossy compressed digital video is mostly 4:2:0, but similar could be done with 4:2:0.

Yeah was really happy to see that in the release notes for 2.0… Thanks! Now I’m able to process raw (progressive) video from the decoder with a VMR9/EVR presenter. Next step is using CUDA from a EVR custom mixer in order to have raw field access to interlaced video as well.