6.40. Direct3D 9 互操作性

本节介绍低级CUDA驱动程序应用程序编程接口中与Direct3D 9互操作的函数。 请注意,Direct3D 9资源的映射是通过图形API无关的资源映射接口执行的,该接口在图形互操作性中有详细描述。

模块

 

枚举

enum CUd3d9DeviceList

Functions

CUresult cuD3D9CtxCreate ( CUcontext* pCtx, CUdevice* pCudaDevice, unsigned int  Flags, IDirect3DDevice9* pD3DDevice )
Create a CUDA context for interoperability with Direct3D 9.
CUresult cuD3D9CtxCreateOnDevice ( CUcontext* pCtx, unsigned int  flags, IDirect3DDevice9* pD3DDevice, CUdevice cudaDevice )
Create a CUDA context for interoperability with Direct3D 9.
CUresult cuD3D9GetDevice ( CUdevice* pCudaDevice, const char* pszAdapterName )
Gets the CUDA device corresponding to a display adapter.
CUresult cuD3D9GetDevices ( unsigned int* pCudaDeviceCount, CUdevice* pCudaDevices, unsigned int  cudaDeviceCount, IDirect3DDevice9* pD3D9Device, CUd3d9DeviceList deviceList )
Gets the CUDA devices corresponding to a Direct3D 9 device.
CUresult cuD3D9GetDirect3DDevice ( IDirect3DDevice9** ppD3DDevice )
Get the Direct3D 9 device against which the current CUDA context was created.
CUresult cuGraphicsD3D9RegisterResource ( CUgraphicsResource* pCudaResource, IDirect3DResource9* pD3DResource, unsigned int  Flags )
Register a Direct3D 9 resource for access by CUDA.

枚举

enum CUd3d9DeviceList

与D3D9设备对应的CUDA设备

数值
CU_D3D9_DEVICE_LIST_ALL = 0x01
The CUDA devices for all GPUs used by a D3D9 device
CU_D3D9_DEVICE_LIST_CURRENT_FRAME = 0x02
The CUDA devices for the GPUs used by a D3D9 device in its currently rendering frame
CU_D3D9_DEVICE_LIST_NEXT_FRAME = 0x03
The CUDA devices for the GPUs to be used by a D3D9 device in the next frame

Functions

CUresult cuD3D9CtxCreate ( CUcontext* pCtx, CUdevice* pCudaDevice, unsigned int  Flags, IDirect3DDevice9* pD3DDevice )
为与Direct3D 9的互操作性创建CUDA上下文。
参数
pCtx
- Returned newly created CUDA context
pCudaDevice
- Returned pointer to the device on which the context was created
Flags
- Context creation flags (see cuCtxCreate() for details)
pD3DDevice
- Direct3D device to create interoperability context with
描述

创建一个新的CUDA上下文,启用该上下文与Direct3D设备pD3DDevice的互操作性,并将创建的CUDA上下文与调用线程关联。创建的CUcontext将通过*pCtx返回。在该CUDA上下文的生命周期内,可以注册和映射来自此设备的Direct3D资源。如果pCudaDevice非空,则创建此CUDA上下文的CUdevice将通过*pCudaDevice返回。

调用成功时,该操作会增加pD3DDevice的内部引用计数。当通过cuCtxDestroy()销毁此上下文时,该引用计数将递减。如果pD3DDevice被销毁或遇到错误,此上下文将停止工作。

请注意,此功能并非正确运行所必需。仅当操作系统为Windows Vista或Windows 7,且设备pD3DDdevice不是IDirect3DDevice9Ex时,使用此功能才会加速互操作性。在所有其他情况下,此功能并非必要。

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9GetDevice, cuGraphicsD3D9RegisterResource

CUresult cuD3D9CtxCreateOnDevice ( CUcontext* pCtx, unsigned int  flags, IDirect3DDevice9* pD3DDevice, CUdevice cudaDevice )
为与Direct3D 9的互操作性创建CUDA上下文。
参数
pCtx
- Returned newly created CUDA context
flags
- Context creation flags (see cuCtxCreate() for details)
pD3DDevice
- Direct3D device to create interoperability context with
cudaDevice
- The CUDA device on which to create the context. This device must be among the devices returned when querying CU_D3D9_DEVICES_ALL from cuD3D9GetDevices.
描述

创建一个新的CUDA上下文,启用该上下文与Direct3D设备pD3DDevice的互操作性,并将创建的CUDA上下文与调用线程关联。创建的CUcontext将通过*pCtx返回。在该CUDA上下文的生命周期内,可以注册和映射来自此设备的Direct3D资源。

调用成功时,该操作会增加pD3DDevice的内部引用计数。当通过cuCtxDestroy()销毁此上下文时,该引用计数将递减。如果pD3DDevice被销毁或遇到错误,此上下文将停止工作。

请注意,此功能并非正确运行所必需。仅当操作系统为Windows Vista或Windows 7,且设备pD3DDdevice不是IDirect3DDevice9Ex时,使用此功能才会加速互操作性。在所有其他情况下,此功能并非必要。

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9GetDevices, cuGraphicsD3D9RegisterResource

CUresult cuD3D9GetDevice ( CUdevice* pCudaDevice, const char* pszAdapterName )
获取与显示适配器对应的CUDA设备。
参数
pCudaDevice
- Returned CUDA device corresponding to pszAdapterName
pszAdapterName
- Adapter name to query for device
描述

*pCudaDevice中返回与适配器名称pszAdapterName对应的CUDA兼容设备,该适配器名称来自EnumDisplayDevices()或IDirect3D9::GetAdapterIdentifier()。

如果适配器pszAdapterName上没有设备兼容CUDA,则该调用将失败。

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9CtxCreate, cudaD3D9GetDevice

CUresult cuD3D9GetDevices ( unsigned int* pCudaDeviceCount, CUdevice* pCudaDevices, unsigned int  cudaDeviceCount, IDirect3DDevice9* pD3D9Device, CUd3d9DeviceList deviceList )
获取与Direct3D 9设备对应的CUDA设备。
参数
pCudaDeviceCount
- Returned number of CUDA devices corresponding to pD3D9Device
pCudaDevices
- Returned CUDA devices corresponding to pD3D9Device
cudaDeviceCount
- The size of the output device array pCudaDevices
pD3D9Device
- Direct3D 9 device to query for CUDA devices
deviceList
- The set of devices to return. This set may be CU_D3D9_DEVICE_LIST_ALL for all devices, CU_D3D9_DEVICE_LIST_CURRENT_FRAME for the devices used to render the current frame (in SLI), or CU_D3D9_DEVICE_LIST_NEXT_FRAME for the devices used to render the next frame (in SLI).
描述

*pCudaDeviceCount中返回与Direct3D 9设备pD3D9Device对应的CUDA兼容设备数量。同时在*pCudaDevices中返回最多cudaDeviceCount个与Direct3D 9设备pD3D9Device对应的CUDA兼容设备。

如果用于渲染pDevice的任何GPU不支持CUDA,则该调用将返回CUDA_ERROR_NO_DEVICE

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9CtxCreate, cudaD3D9GetDevices

CUresult cuD3D9GetDirect3DDevice ( IDirect3DDevice9** ppD3DDevice )
获取当前CUDA上下文所对应的Direct3D 9设备。
参数
ppD3DDevice
- Returned Direct3D device corresponding to CUDA context
描述

*ppD3DDevice中返回创建此CUDA上下文时对应的Direct3D设备,该设备是通过cuD3D9CtxCreate()创建的。

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9GetDevice, cudaD3D9GetDirect3DDevice

CUresult cuGraphicsD3D9RegisterResource ( CUgraphicsResource* pCudaResource, IDirect3DResource9* pD3DResource, unsigned int  Flags )
注册一个Direct3D 9资源以便通过CUDA访问。
参数
pCudaResource
- Returned graphics resource handle
pD3DResource
- Direct3D resource to register
Flags
- Parameters for resource registration
描述

将Direct3D 9资源pD3DResource注册以供CUDA访问,并在pCudaResource中返回指向pD3Dresource的CUDA句柄。返回的pCudaResource句柄可用于映射和取消映射该资源,直到取消注册为止。成功调用此函数将增加pD3DResource的内部引用计数。当通过cuGraphicsUnregisterResource()取消注册该资源时,此引用计数将递减。

此调用可能开销较大,在交互式应用中不应每帧都调用。

pD3DResource的类型必须是以下之一。

  • IDirect3DVertexBuffer9: 可以通过设备指针访问

  • IDirect3DIndexBuffer9: 可以通过设备指针访问

  • IDirect3DSurface9: 可以通过数组访问。只有独立类型的IDirect3DSurface9对象可以被显式共享。特别是,单独的mipmap级别和立方体贴图的各个面不能直接注册。要访问与纹理关联的各个表面,必须注册基础纹理对象。

  • IDirect3DBaseTexture9: 可以通过数组访问此纹理上的各个表面。

Flags参数可用于在注册时指定附加参数。该参数的有效值为

  • CU_GRAPHICS_REGISTER_FLAGS_NONE: 指定不提供关于该资源使用方式的任何提示。

  • CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: 指定CUDA将把此资源绑定到表面引用。

  • CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: 指定CUDA将对此资源执行纹理收集操作。

并非所有上述类型的Direct3D资源都能用于与CUDA的互操作性。以下是一些限制。

  • 主渲染目标可能未在CUDA中注册。

  • 分配为共享的资源可能无法在CUDA中注册。

  • 无法共享那些格式不是1、2或4通道的8位、16位或32位整数或浮点数据的纹理。

  • 深度或模板格式的表面无法共享。

支持的完整格式列表如下:

  • D3DFMT_L8

  • D3DFMT_L16

  • D3DFMT_A8R8G8B8

  • D3DFMT_X8R8G8B8

  • D3DFMT_G16R16

  • D3DFMT_A8B8G8R8

  • D3DFMT_A8

  • D3DFMT_A8L8

  • D3DFMT_Q8W8V8U8

  • D3DFMT_V16U16

  • D3DFMT_A16B16G16R16F

  • D3DFMT_A16B16G16R16

  • D3DFMT_R32F

  • D3DFMT_G16R16F

  • D3DFMT_A32B32G32R32F

  • D3DFMT_G32R32F

  • D3DFMT_R16F

如果未使用cuD3D9CtxCreate为此上下文初始化Direct3D互操作性,则将返回CUDA_ERROR_INVALID_CONTEXT。如果pD3DResource类型不正确或已注册,则返回CUDA_ERROR_INVALID_HANDLE。如果pD3DResource无法注册,则返回CUDA_ERROR_UNKNOWN。如果Flags不是上述指定值之一,则返回CUDA_ERROR_INVALID_VALUE

Note:

请注意,此函数也可能返回之前异步启动的错误代码。

另请参阅:

cuD3D9CtxCreate, cuGraphicsUnregisterResource, cuGraphicsMapResources, cuGraphicsSubResourceGetMappedArray, cuGraphicsResourceGetMappedPointer, cudaGraphicsD3D9RegisterResource

Direct3D 9 互操作性 [已弃用]