6.32. 图形互操作性

本节介绍低级别 CUDA 驱动程序应用程序编程接口的图形互操作性功能。

函数

CUresult cuGraphicsMapResources ( unsigned int  count, CUgraphicsResource* resources, CUstream hStream )
映射图形资源以供 CUDA 访问。
CUresult cuGraphicsResourceGetMappedMipmappedArray ( CUmipmappedArray* pMipmappedArray, CUgraphicsResource resource )
获取一个多级渐远纹理数组,通过它可以访问映射的图形资源。
CUresult cuGraphicsResourceGetMappedPointer ( CUdeviceptr* pDevPtr, size_t* pSize, CUgraphicsResource resource )
获取一个设备指针,通过它可以访问映射的图形资源。
CUresult cuGraphicsResourceSetMapFlags ( CUgraphicsResource resource, unsigned int  flags )
设置用于映射图形资源的使用标志。
CUresult cuGraphicsSubResourceGetMappedArray ( CUarray* pArray, CUgraphicsResource resource, unsigned int  arrayIndex, unsigned int  mipLevel )
获取一个数组,通过它可以访问映射的图形资源的子资源。
CUresult cuGraphicsUnmapResources ( unsigned int  count, CUgraphicsResource* resources, CUstream hStream )
取消映射图形资源。
CUresult cuGraphicsUnregisterResource ( CUgraphicsResource resource )
取消注册图形资源以供 CUDA 访问。

函数

CUresult cuGraphicsMapResources ( unsigned int  count, CUgraphicsResource* resources, CUstream hStream )
映射图形资源以供 CUDA 访问。
参数
count
- 要映射的资源数量
resources
- 要映射以供 CUDA 使用的资源
hStream
- 要与之同步的流
描述

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

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

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

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

注意
  • 此函数使用标准 默认流 语义。

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

另请参阅

cuGraphicsResourceGetMappedPointer, cuGraphicsSubResourceGetMappedArray, cuGraphicsUnmapResources, cudaGraphicsMapResources

CUresult cuGraphicsResourceGetMappedMipmappedArray ( CUmipmappedArray* pMipmappedArray, CUgraphicsResource resource )
获取一个多级渐远纹理数组,通过它可以访问映射的图形资源。
参数
pMipmappedArray
- 返回的多级渐远纹理数组,通过它可以访问resource可以被访问
resource
- 要访问的映射资源
描述

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

如果resource如果不是纹理,则无法通过多级渐远纹理数组访问它,并且返回 CUDA_ERROR_NOT_MAPPED_AS_ARRAY。如果resource未映射,则返回 CUDA_ERROR_NOT_MAPPED

注意

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

另请参阅

cuGraphicsResourceGetMappedPointer, cudaGraphicsResourceGetMappedMipmappedArray

CUresult cuGraphicsResourceGetMappedPointer ( CUdeviceptr* pDevPtr, size_t* pSize, CUgraphicsResource resource )
获取一个设备指针,通过它可以访问映射的图形资源。
参数
pDevPtr
- 返回的指针,通过它可以访问resource可以被访问
pSize
- 返回的可从*pPointer
resource
- 要访问的映射资源
描述

*pDevPtr一个指针,通过它可以访问映射的图形资源resource。在pSize中返回可以从该指针访问的内存大小(以字节为单位)。中设置的值pPointer每次resource被映射时都可能更改。

如果resource如果不是缓冲区,则无法通过指针访问它,并且返回 CUDA_ERROR_NOT_MAPPED_AS_POINTER。如果resource未映射,则返回 CUDA_ERROR_NOT_MAPPED。 *

注意

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

另请参阅

cuGraphicsMapResources, cuGraphicsSubResourceGetMappedArray, cudaGraphicsResourceGetMappedPointer

CUresult cuGraphicsResourceSetMapFlags ( CUgraphicsResource resource, unsigned int  flags )
设置用于映射图形资源的使用标志。
参数
resource
- 要设置标志的已注册资源
flags
- 资源映射的参数
描述

设置flags用于映射图形资源resource.

。对flags的更改将在下次resource映射时生效。参数flags可以是以下任何值

  • CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE:指定不提供有关此资源将如何使用的提示。因此,假定 CUDA 内核将从此资源读取和写入。这是默认值。

  • CU_GRAPHICS_MAP_RESOURCE_FLAGS_READONLY:指定访问此资源的 CUDA 内核不会写入此资源。

  • CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITEDISCARD:指定访问此资源的 CUDA 内核不会从此资源读取,并将覆盖资源的全部内容,因此不会保留先前存储在资源中的任何数据。

如果resource如果当前已映射以供 CUDA 访问,则返回 CUDA_ERROR_ALREADY_MAPPED。如果flags不是上述值之一,则返回 CUDA_ERROR_INVALID_VALUE

注意

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

另请参阅

cuGraphicsMapResources, cudaGraphicsResourceSetMapFlags

CUresult cuGraphicsSubResourceGetMappedArray ( CUarray* pArray, CUgraphicsResource resource, unsigned int  arrayIndex, unsigned int  mipLevel )
获取一个数组,通过它可以访问映射的图形资源的子资源。
参数
pArray
- 返回的数组,通过它可以访问resource可以被访问
resource
- 要访问的映射资源
arrayIndex
- 数组纹理的数组索引或立方体贴图面索引,如 CUarray_cubemap_face 中为要访问的子资源定义的立方体贴图纹理
mipLevel
- 要访问的子资源的多级渐远纹理级别
描述

*pArray一个数组,通过它可以访问映射的图形资源resource的子资源,该子资源对应于数组索引arrayIndex和多级渐远纹理级别mipLevel。中设置的值*pArray每次resource被映射时都可能更改。

如果resource如果不是纹理,则无法通过数组访问它,并且返回 CUDA_ERROR_NOT_MAPPED_AS_ARRAY。如果arrayIndex不是resource的有效数组索引,则返回 CUDA_ERROR_INVALID_VALUE。如果mipLevel不是resource的有效数组索引,则返回 CUDA_ERROR_INVALID_VALUE。如果resource未映射,则返回 CUDA_ERROR_NOT_MAPPED

注意

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

另请参阅

cuGraphicsResourceGetMappedPointer, cudaGraphicsSubResourceGetMappedArray

CUresult cuGraphicsUnmapResources ( unsigned int  count, CUgraphicsResource* resources, CUstream hStream )
取消映射图形资源。
参数
count
- 要取消映射的资源数量
resources
- 要取消映射的资源
hStream
- 要与之同步的流
描述

取消映射count中的图形资源resources.

。一旦取消映射,resources中的资源在再次映射之前无法由 CUDA 访问。

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

如果resources包含任何重复条目,则返回 CUDA_ERROR_INVALID_HANDLE。如果resources如果当前未映射以供 CUDA 访问,则返回 CUDA_ERROR_NOT_MAPPED

注意
  • 此函数使用标准 默认流 语义。

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

另请参阅

cuGraphicsMapResources, cudaGraphicsUnmapResources

CUresult cuGraphicsUnregisterResource ( CUgraphicsResource resource )
取消注册图形资源以供 CUDA 访问。
参数
resource
- 要取消注册的资源
描述

取消注册图形资源resource,使其除非再次注册,否则 CUDA 无法访问。

如果resource如果无效,则返回 CUDA_ERROR_INVALID_HANDLE

注意

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

另请参阅

cuGraphicsD3D9RegisterResource, cuGraphicsD3D10RegisterResource, cuGraphicsD3D11RegisterResource, cuGraphicsGLRegisterBuffer, cuGraphicsGLRegisterImage, cudaGraphicsUnregisterResource