Class DirectX11NativeMethods
Direct3D 11 Interoperability for CUDA 3.x
Inheritance
Inherited Members
Namespace: ManagedCuda
Assembly: ManagedCuda.dll
Syntax
public static class DirectX11NativeMethods
Methods
cuD3D11CtxCreate(ref CUcontext, ref CUdevice, CUCtxFlags, IntPtr)
Creates a new CUDA context, enables interoperability for that context with the Direct3D device pD3DDevice, and
associates the created CUDA context with the calling thread. The created CUcontext will be returned in pCtx.
Direct3D resources from this device may be registered and mapped through the lifetime of this CUDA context.
If pCudaDevice is non-NULL then the CUdevice on which this CUDA context was created will be returned in
pCudaDevice.
On success, this call will increase the internal reference count on pD3DDevice. This reference count will be decremented
upon destruction of this context through cuCtxDestroy(CUcontext). This context will cease to function if pD3DDevice
is destroyed or encounters an error.
Declaration
public static CUResult cuD3D11CtxCreate(ref CUcontext pCtx, ref CUdevice pCudaDevice, CUCtxFlags Flags, IntPtr pD3DDevice)
Parameters
| Type | Name | Description |
|---|---|---|
| CUcontext | pCtx | Returned newly created CUDA context |
| CUdevice | pCudaDevice | Returned pointer to the device on which the context was created |
| CUCtxFlags | Flags | Context creation flags (see cuCtxCreate_v2(ref CUcontext, CUCtxFlags, CUdevice) for details) |
| System.IntPtr | pD3DDevice | Direct3D device to create interoperability context with |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorInvalidValue, ErrorOutOfMemory, ErrorUnknown.
|
cuD3D11CtxCreateOnDevice(ref CUcontext, CUCtxFlags, IntPtr, CUdevice)
Creates a new CUDA context, enables interoperability for that context with the Direct3D device pD3DDevice, and
associates the created CUDA context with the calling thread. The created CUcontext will be returned in pCtx.
Direct3D resources from this device may be registered and mapped through the lifetime of this CUDA context.
On success, this call will increase the internal reference count on pD3DDevice. This reference count will be decremented
upon destruction of this context through cuCtxDestroy(CUcontext). This context will cease to function if pD3DDevice
is destroyed or encounters an error.
Declaration
public static CUResult cuD3D11CtxCreateOnDevice(ref CUcontext pCtx, CUCtxFlags flags, IntPtr pD3DDevice, CUdevice cudaDevice)
Parameters
| Type | Name | Description |
|---|---|---|
| CUcontext | pCtx | Returned newly created CUDA context |
| CUCtxFlags | flags | Context creation flags (see cuCtxCreate_v2(ref CUcontext, CUCtxFlags, CUdevice) for details) |
| System.IntPtr | pD3DDevice | Direct3D device to create interoperability context with |
| CUdevice | cudaDevice | Returned pointer to the device on which the context was created |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorInvalidValue, ErrorOutOfMemory, ErrorUnknown.
|
cuD3D11GetDevice(ref CUdevice, IntPtr)
Returns in device the CUDA-compatible device corresponding to the adapter pAdapter obtained from
IDXGIFactory::EnumAdapters. This call will succeed only if a device on adapter pAdapter is Cuda-compatible.
Declaration
public static CUResult cuD3D11GetDevice(ref CUdevice device, IntPtr pAdapter)
Parameters
| Type | Name | Description |
|---|---|---|
| CUdevice | device | Returned CUDA device corresponding to pszAdapterName |
| System.IntPtr | pAdapter | Adapter (type: IDXGIAdapter) |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorInvalidValue, ErrorUnknown.
|
cuD3D11GetDevices(ref Int32, CUdevice[], UInt32, IntPtr, CUd3dXDeviceList)
Gets the CUDA devices corresponding to a Direct3D 11 device
Returns in pCudaDeviceCount the number of CUDA-compatible device corresponding
to the Direct3D 11 device pD3D11Device.
Also returns in pCudaDevices at most cudaDeviceCount of the the CUDA-compatible devices
corresponding to the Direct3D 11 device pD3D11Device.
If any of the GPUs being used to render pDevice are not CUDA capable then the
call will return ErrorNoDevice.
Declaration
public static CUResult cuD3D11GetDevices(ref int pCudaDeviceCount, CUdevice[] pCudaDevices, uint cudaDeviceCount, IntPtr pD3D11Device, CUd3dXDeviceList deviceList)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int32 | pCudaDeviceCount | Returned number of CUDA devices corresponding to |
| CUdevice[] | pCudaDevices | Returned CUDA devices corresponding to |
| System.UInt32 | cudaDeviceCount | The size of the output device array |
| System.IntPtr | pD3D11Device | Direct3D 11 device to query for CUDA devices |
| CUd3dXDeviceList | deviceList | The set of devices to return. |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorNoDevice, ErrorUnknown.
|
cuD3D11GetDirect3DDevice(ref IntPtr)
Returns in ppD3DDevice the Direct3D device against which this CUDA context
was created in cuD3D11CtxCreate(ref CUcontext, ref CUdevice, CUCtxFlags, IntPtr).
Declaration
public static CUResult cuD3D11GetDirect3DDevice(ref IntPtr ppD3DDevice)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | ppD3DDevice | Returned Direct3D device corresponding to CUDA context |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorInvalidValue.
|
cuGraphicsD3D11RegisterResource(ref CUgraphicsResource, IntPtr, CUGraphicsRegisterFlags)
Registers the Direct3D 11 resource pD3DResource for access by CUDA and returns a CUDA handle to
pD3Dresource in pCudaResource. The handle returned in pCudaResource may be used to map and
unmap this resource until it is unregistered. On success this call will increase the internal reference count on
pD3DResource. This reference count will be decremented when this resource is unregistered through cuGraphicsUnregisterResource(CUgraphicsResource).
This call is potentially high-overhead and should not be called every frame in interactive applications.
The type of pD3DResource must be one of the following:
Type of pD3DResource | Restriction |
|---|---|
| ID3D11Buffer | May be accessed through a device pointer. |
| ID3D11Texture1D | Individual subresources of the texture may be accessed via arrays. |
| ID3D11Texture2D | Individual subresources of the texture may be accessed via arrays. |
| ID3D11Texture3D | Individual subresources of the texture may be accessed via arrays. |
Not all Direct3D resources of the above types may be used for interoperability with CUDA. The following are some
limitations.
• The primary rendertarget may not be registered with CUDA.
• Resources allocated as shared may not be registered with CUDA.
• Textures which are not of a format which is 1, 2, or 4 channels of 8, 16, or 32-bit integer or floating-point data
cannot be shared.
• Surfaces of depth or stencil formats cannot be shared.
If Direct3D interoperability is not initialized for this context using cuD3D11CtxCreate(ref CUcontext, ref CUdevice, CUCtxFlags, IntPtr) then
ErrorInvalidContext is returned. If pD3DResource is of incorrect type or is already registered then
ErrorInvalidHandle is returned. If pD3DResource cannot be registered then
ErrorUnknown is returned. If Flags is not one of the above specified value then ErrorInvalidValue
is returned.
Declaration
public static CUResult cuGraphicsD3D11RegisterResource(ref CUgraphicsResource pCudaResource, IntPtr pD3DResource, CUGraphicsRegisterFlags Flags)
Parameters
| Type | Name | Description |
|---|---|---|
| CUgraphicsResource | pCudaResource | Returned graphics resource handle |
| System.IntPtr | pD3DResource | Direct3D resource to register |
| CUGraphicsRegisterFlags | Flags | Parameters for resource registration |
Returns
| Type | Description |
|---|---|
| CUResult | CUDA Error Codes: Success, ErrorDeinitialized, ErrorNotInitialized,
ErrorInvalidContext, ErrorInvalidValue, ErrorInvalidHandle, ErrorOutOfMemory, ErrorUnknown.
|