6.26. 图形互操作性

本节介绍 CUDA 运行时应用程序编程接口的图形互操作性功能。

函数

__host__cudaError_t cudaGraphicsMapResources ( int  count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
映射图形资源以供 CUDA 访问。
__host__cudaError_t cudaGraphicsResourceGetMappedMipmappedArray ( cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource )
获取一个多级纹理数组,通过它可以访问映射的图形资源。
__host__cudaError_t cudaGraphicsResourceGetMappedPointer ( void** devPtr, size_t* size, cudaGraphicsResource_t resource )
获取一个设备指针,通过它可以访问映射的图形资源。
__host__cudaError_t cudaGraphicsResourceSetMapFlags ( cudaGraphicsResource_t resource, unsigned int  flags )
为映射图形资源设置使用标志。
__host__cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int  arrayIndex, unsigned int  mipLevel )
获取一个数组,通过它可以访问映射的图形资源的子资源。
__host__cudaError_t cudaGraphicsUnmapResources ( int  count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
取消映射图形资源。
__host__cudaError_t cudaGraphicsUnregisterResource ( cudaGraphicsResource_t resource )
取消注册图形资源以供 CUDA 访问。

函数

__host__cudaError_t cudaGraphicsMapResources ( int  count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 )
映射图形资源以供 CUDA 访问。
参数
count
- 要映射的资源数量
resources
- 要为 CUDA 映射的资源
stream
- 用于同步的流
描述

映射count中的图形资源resources以供 CUDA 访问。

中的资源resources可以被 CUDA 访问,直到它们被取消映射。从中注册的图形 APIresources在被 CUDA 映射时,不应访问任何资源。如果应用程序这样做,则结果未定义。

此函数提供同步保证,即在 cudaGraphicsMapResources() 之前发出的任何图形调用都将在stream中发出的任何后续 CUDA 工作开始之前完成。

如果resources包含任何重复条目,则返回 cudaErrorInvalidResourceHandle。如果resources中的任何资源当前被映射以供 CUDA 访问,则返回 cudaErrorUnknown

注意

另请参阅

cudaGraphicsResourceGetMappedPointer, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsUnmapResources, cuGraphicsMapResources

__host__cudaError_t cudaGraphicsResourceGetMappedMipmappedArray ( cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource )
获取一个多级纹理数组,通过它可以访问映射的图形资源。
参数
mipmappedArray
- 返回的多级纹理数组,通过它resource可以被访问
resource
- 要访问的映射资源
描述

*mipmappedArray中返回一个多级纹理数组,通过它可以访问映射的图形资源resource。中设置的值mipmappedArray可能每次resource被映射时都会更改。

如果resource不是纹理,则无法通过数组访问它,并且返回 cudaErrorUnknown。如果resource未映射,则返回 cudaErrorUnknown

注意

另请参阅

cudaGraphicsResourceGetMappedPointer, cuGraphicsResourceGetMappedMipmappedArray

__host__cudaError_t cudaGraphicsResourceGetMappedPointer ( void** devPtr, size_t* size, cudaGraphicsResource_t resource )
获取一个设备指针,通过它可以访问映射的图形资源。
参数
devPtr
- 返回的指针,通过它resource可以被访问
size
- 返回的可从*devPtr
resource
- 要访问的映射资源
描述

*devPtr开始访问的缓冲区大小resource是一个指针,通过它可以访问映射的图形资源。在*sizedevPtr可能每次resource被映射时都会更改。

如果resource中返回可以从该指针访问的内存大小(以字节为单位)。中设置的值resource不是缓冲区,则无法通过指针访问它,并且返回 cudaErrorUnknown。如果

注意

另请参阅

未映射,则返回 cudaErrorUnknown。*

cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cuGraphicsResourceGetMappedPointer
__host__cudaError_t cudaGraphicsResourceSetMapFlags ( cudaGraphicsResource_t resource, unsigned int  flags )
参数
resource
为映射图形资源设置使用标志。
resource
- 要设置标志的已注册资源
返回值

flags

描述

- 资源映射的参数resourcecudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidResourceHandle, cudaErrorUnknown,resource.

设置resource用于映射图形资源resource。对resource的更改将在下次

  • 被映射时生效。参数resource可以是以下任何值resource.

  • cudaGraphicsMapFlagsNone:指定关于如何使用resource.

  • 的任何提示。因此,假定 CUDA 可以从resource读取或写入。resourcecudaGraphicsMapFlagsReadOnly:指定 CUDA 将不会写入resource

如果resourcecudaGraphicsMapFlagsWriteDiscard:指定 CUDA 将不会从resource读取,并且将覆盖

注意

另请参阅

的全部内容,因此先前存储在

中的任何数据都将不会被保留。
当前是否被映射以供 CUDA 访问,则返回 cudaErrorUnknown。如果
参数
不是上述值之一,则返回 cudaErrorInvalidValue
cudaGraphicsMapResources, cuGraphicsResourceSetMapFlagsresource可以被访问
resource
- 要访问的映射资源
__host__cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int  arrayIndex, unsigned int  mipLevel )
获取一个数组,通过它可以访问映射的图形资源的子资源。
array
- 返回的数组,通过它可以访问
描述

的子资源arrayIndexresource- 数组纹理的数组索引或立方体贴图面索引,由 cudaGraphicsCubeFace 定义,用于立方体贴图纹理,表示要访问的子资源 __host__cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int  arrayIndex, unsigned int  mipLevel ) mipLevelarray。中设置的值不是上述值之一,则返回 cudaErrorInvalidValue可能每次resource被映射时都会更改。

如果resource不是纹理,则无法通过数组访问它,并且返回 cudaErrorUnknown。如果 __host__cudaError_t cudaGraphicsSubResourceGetMappedArray ( cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int  arrayIndex, unsigned int  mipLevel ) - 要访问的子资源的 mipmap 级别resource*arrayarray一个数组,通过它可以访问映射的图形资源的子资源resource*arrayresource未映射,则返回 cudaErrorUnknown

注意

另请参阅

,该子资源对应于数组索引

和 mipmap 级别
。如果
参数
count
不是
resources
的有效数组索引,则返回 cudaErrorInvalidValue。如果
stream
- 用于同步的流
描述

不是count中的图形资源resources.

的有效 mipmap 级别,则返回 cudaErrorInvalidValueresourcescudaGraphicsResourceGetMappedPointer, cuGraphicsSubResourceGetMappedArray

__host__cudaError_t cudaGraphicsUnmapResources ( int  count, cudaGraphicsResource_t* resources, cudaStream_t stream = 0 ) stream取消映射图形资源。

如果resources包含任何重复条目,则返回 cudaErrorInvalidResourceHandle。如果resourcescount

注意

另请参阅

- 要取消映射的资源数量

resources
- 要取消映射的资源
参数
resource
取消映射
描述

。取消映射后,resource中的资源在再次映射之前可能无法被 CUDA 访问。

如果resource此函数提供同步保证,即在 cudaGraphicsUnmapResources() 之前在

注意

另请参阅

中的资源当前未被映射以供 CUDA 访问,则返回 cudaErrorUnknown