6.20. Direct3D 10 互操作性
本节介绍了 CUDA 运行时应用程序编程接口的 Direct3D 10 互操作性功能。请注意,Direct3D 10 资源的映射是使用 图形互操作性 中描述的图形 API 不可知、资源映射接口执行的。
枚举
- enum cudaD3D10DeviceList
函数
- __host__ cudaError_t cudaD3D10GetDevice ( int* device, IDXGIAdapter* pAdapter )
- 获取适配器的设备编号。
- __host__ cudaError_t cudaD3D10GetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int cudaDeviceCount, ID3D10Device* pD3D10Device, cudaD3D10DeviceList deviceList )
- 获取与 Direct3D 10 设备对应的 CUDA 设备。
- __host__ cudaError_t cudaGraphicsD3D10RegisterResource ( cudaGraphicsResource** resource, ID3D10Resource* pD3DResource, unsigned int flags )
- 注册一个 Direct3D 10 资源以供 CUDA 访问。
枚举
函数
- __host__ cudaError_t cudaD3D10GetDevice ( int* device, IDXGIAdapter* pAdapter )
-
获取适配器的设备编号。
参数
- device
- - 返回与 pAdapter 对应的设备
- pAdapter
- - 要获取设备的 D3D10 适配器
描述
在*device中返回与适配器对应的 CUDA 兼容设备,pAdapter该适配器从 IDXGIFactory::EnumAdapters 获取。仅当适配器上的设备pAdapter与 CUDA 兼容时,此调用才会成功。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
- __host__ cudaError_t cudaD3D10GetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int cudaDeviceCount, ID3D10Device* pD3D10Device, cudaD3D10DeviceList deviceList )
-
获取与 Direct3D 10 设备对应的 CUDA 设备。
参数
- pCudaDeviceCount
- - 返回与对应的 CUDA 设备数量
- pCudaDevices
- - 返回与对应的 CUDA 设备数量
- 对应的 CUDA 设备
- - 输出设备数组的大小pCudaDevices
- 对应的 CUDA 设备数量
- - 要查询 CUDA 设备的 Direct3D 10 设备
- deviceList
- - 要返回的设备集。此集合可以是 cudaD3D10DeviceListAll (表示所有设备)、cudaD3D10DeviceListCurrentFrame (表示用于渲染当前帧的设备,在 SLI 中)或 cudaD3D10DeviceListNextFrame (表示用于渲染下一帧的设备,在 SLI 中)。
描述
在*pCudaDeviceCount返回与 Direct3D 10 设备对应的 CUDA 兼容设备数量对应的 CUDA 设备数量。还在*pCudaDevices中返回最多对应的 CUDA 设备个与 Direct3D 10 设备对应的 CUDA 兼容设备对应的 CUDA 设备数量.
如果用于渲染的任何 GPU 不支持 CUDA,则调用将返回 cudaErrorNoDevice。另请参阅
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsResourceGetMappedPointer, cuD3D10GetDevices
- __host__ cudaError_t cudaGraphicsD3D10RegisterResource ( cudaGraphicsResource** resource, ID3D10Resource* pD3DResource, unsigned int flags )
-
注册一个 Direct3D 10 资源以供 CUDA 访问。
参数
- resource
- - 指向返回的资源句柄的指针
- pD3DResource
- - 要注册的 Direct3D 资源
- flags
- - 资源注册的参数
返回值
cudaSuccess, cudaErrorInvalidDevice, cudaErrorInvalidValue, cudaErrorInvalidResourceHandle, cudaErrorUnknown
描述
注册 Direct3D 10 资源pD3DResource以供 CUDA 访问。
如果此调用成功,则应用程序将能够映射和取消映射此资源,直到通过 cudaGraphicsUnregisterResource() 取消注册为止。此外,如果成功,此调用将增加pD3DResource上的内部引用计数。当通过 cudaGraphicsUnregisterResource() 取消注册此资源时,此引用计数将递减。
此调用可能具有高开销,不应在交互式应用程序中每帧调用。
的类型pD3DResource必须是以下类型之一。
-
ID3D10Buffer:可以通过设备指针访问
-
ID3D10Texture1D:纹理的各个子资源可以通过数组访问
-
ID3D10Texture2D:纹理的各个子资源可以通过数组访问
-
ID3D10Texture3D:纹理的各个子资源可以通过数组访问
参数flags可用于指定注册时的其他参数。此参数的有效值是
-
cudaGraphicsRegisterFlagsNone:指定关于此资源将如何使用的任何提示。
-
cudaGraphicsRegisterFlagsSurfaceLoadStore:指定 CUDA 将此资源绑定到表面引用。
-
cudaGraphicsRegisterFlagsTextureGather:指定 CUDA 将对此资源执行纹理采集操作。
并非上述类型的所有 Direct3D 资源都可以用于与 CUDA 的互操作性。以下是一些限制。
-
主渲染目标不能在 CUDA 中注册。
-
格式不是 1、2 或 4 通道 8 位、16 位或 32 位整数或浮点数据的纹理无法共享。
-
深度或模板格式的表面无法共享。
支持的 DXGI 格式的完整列表如下。为了简洁起见,符号 A_{B,C,D} 表示 A_B、A_C 和 A_D。
-
DXGI_FORMAT_A8_UNORM
-
DXGI_FORMAT_B8G8R8A8_UNORM
-
DXGI_FORMAT_B8G8R8X8_UNORM
-
DXGI_FORMAT_R16_FLOAT
-
DXGI_FORMAT_R16G16B16A16_{FLOAT,SINT,SNORM,UINT,UNORM}
-
DXGI_FORMAT_R16G16_{FLOAT,SINT,SNORM,UINT,UNORM}
-
DXGI_FORMAT_R16_{SINT,SNORM,UINT,UNORM}
-
DXGI_FORMAT_R32_FLOAT
-
DXGI_FORMAT_R32G32B32A32_{FLOAT,SINT,UINT}
-
DXGI_FORMAT_R32G32_{FLOAT,SINT,UINT}
-
DXGI_FORMAT_R32_{SINT,UINT}
-
DXGI_FORMAT_R8G8B8A8_{SINT,SNORM,UINT,UNORM,UNORM_SRGB}
-
DXGI_FORMAT_R8G8_{SINT,SNORM,UINT,UNORM}
-
DXGI_FORMAT_R8_{SINT,SNORM,UINT,UNORM}
如果pD3DResource类型不正确或已注册,则返回 cudaErrorInvalidResourceHandle。如果pD3DResource无法注册,则返回 cudaErrorUnknown。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsResourceGetMappedPointer, cuGraphicsD3D10RegisterResource