6.39. OpenGL 互操作性

本节介绍低级别 CUDA 驱动程序应用程序编程接口的 OpenGL 互操作性功能。请注意,OpenGL 资源的映射是使用 图形互操作性 中描述的图形 API 不可知、资源映射接口执行的。

模块

 

枚举

enum CUGLDeviceList

函数

CUresult cuGLGetDevices ( unsigned int* pCudaDeviceCount, CUdevice* pCudaDevices, unsigned int  cudaDeviceCount, CUGLDeviceList deviceList )
获取与当前 OpenGL 上下文关联的 CUDA 设备。
CUresult cuGraphicsGLRegisterBuffer ( CUgraphicsResource* pCudaResource, GLuint buffer, unsigned int  Flags )
注册 OpenGL 缓冲区对象。
CUresult cuGraphicsGLRegisterImage ( CUgraphicsResource* pCudaResource, GLuint image, GLenum target, unsigned int  Flags )
注册 OpenGL 纹理或渲染缓冲区对象。
CUresult cuWGLGetDevice ( CUdevice* pDevice, HGPUNV hGpu )
获取与 hGpu 关联的 CUDA 设备。

枚举

enum CUGLDeviceList

与 OpenGL 设备对应的 CUDA 设备

CU_GL_DEVICE_LIST_ALL = 0x01
当前 OpenGL 上下文使用的所有 GPU 的 CUDA 设备
CU_GL_DEVICE_LIST_CURRENT_FRAME = 0x02
当前 OpenGL 上下文在其当前渲染帧中使用的 GPU 的 CUDA 设备
CU_GL_DEVICE_LIST_NEXT_FRAME = 0x03
当前 OpenGL 上下文在下一帧中将要使用的 GPU 的 CUDA 设备

函数

CUresult cuGLGetDevices ( unsigned int* pCudaDeviceCount, CUdevice* pCudaDevices, unsigned int  cudaDeviceCount, CUGLDeviceList deviceList )
获取与当前 OpenGL 上下文关联的 CUDA 设备。
参数
pCudaDeviceCount
- 返回的 CUDA 设备数量。
pCudaDevices
- 返回的 CUDA 设备。
cudaDeviceCount
- 输出设备数组 pCudaDevices 的大小。
deviceList
- 要返回的设备集。
描述

*pCudaDeviceCount中返回与当前 OpenGL 上下文对应的 CUDA 兼容设备的数量。 也在*pCudaDevices中返回最多 cudaDeviceCount 个与当前 OpenGL 上下文对应的 CUDA 兼容设备。 如果当前 OpenGL 上下文使用的任何 GPU 不支持 CUDA,则此调用将返回 CUDA_ERROR_NO_DEVICE。

以下是deviceList参数可能的值:

注意

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

另请参阅

cuWGLGetDevice, cudaGLGetDevices

CUresult cuGraphicsGLRegisterBuffer ( CUgraphicsResource* pCudaResource, GLuint buffer, unsigned int  Flags )
注册 OpenGL 缓冲区对象。
参数
pCudaResource
- 指向返回的对象句柄的指针
buffer
- 要注册的缓冲区对象的名称
Flags
- 注册标志
描述

注册由buffer指定的缓冲区对象,以便 CUDA 访问。 已注册对象的句柄作为pCudaResource返回。 注册标志Flags指定预期用途,如下所示

  • CU_GRAPHICS_REGISTER_FLAGS_NONE:指定关于此资源将如何使用的任何提示。 因此,假定 CUDA 将从此资源读取和写入。 这是默认值。

  • CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY:指定 CUDA 将不会写入此资源。

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

注意

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

另请参阅

cuGraphicsUnregisterResource, cuGraphicsMapResources, cuGraphicsResourceGetMappedPointer, cudaGraphicsGLRegisterBuffer

CUresult cuGraphicsGLRegisterImage ( CUgraphicsResource* pCudaResource, GLuint image, GLenum target, unsigned int  Flags )
注册 OpenGL 纹理或渲染缓冲区对象。
参数
pCudaResource
- 指向返回的对象句柄的指针
image
- 要注册的纹理或渲染缓冲区对象的名称
target
- 标识由image
Flags
- 注册标志
描述

指定的对象类型。image指定的缓冲区对象,以便 CUDA 访问。 已注册对象的句柄作为pCudaResource.

target必须与对象的类型匹配,并且必须是 GL_TEXTURE_2D、GL_TEXTURE_RECTANGLE、GL_TEXTURE_CUBE_MAP、GL_TEXTURE_3D、GL_TEXTURE_2D_ARRAY 或 GL_RENDERBUFFER 之一。

注册标志Flags指定预期用途,如下所示

  • CU_GRAPHICS_REGISTER_FLAGS_NONE:指定关于此资源将如何使用的任何提示。 因此,假定 CUDA 将从此资源读取和写入。 这是默认值。

  • CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY:指定 CUDA 将不会写入此资源。

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

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

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

支持以下图像格式。 为了简洁起见,列表已缩写。 例如,{GL_R, GL_RG} X {8, 16} 将扩展为以下 4 种格式 {GL_R8, GL_R16, GL_RG8, GL_RG16}

  • GL_RED、GL_RG、GL_RGBA、GL_LUMINANCE、GL_ALPHA、GL_LUMINANCE_ALPHA、GL_INTENSITY

  • {GL_R, GL_RG, GL_RGBA} X {8, 16, 16F, 32F, 8UI, 16UI, 32UI, 8I, 16I, 32I}

  • {GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY} X {8, 16, 16F_ARB, 32F_ARB, 8UI_EXT, 16UI_EXT, 32UI_EXT, 8I_EXT, 16I_EXT, 32I_EXT}

当前不允许使用以下图像类

  • 带有边框的纹理

  • 多重采样渲染缓冲区

注意

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

另请参阅

cuGraphicsUnregisterResource, cuGraphicsMapResources, cuGraphicsSubResourceGetMappedArray, cudaGraphicsGLRegisterImage

CUresult cuWGLGetDevice ( CUdevice* pDevice, HGPUNV hGpu )
获取与 hGpu 关联的 CUDA 设备。
参数
pDevice
- 与 hGpu 关联的设备
hGpu
- GPU 的句柄,通过 WGL_NV_gpu_affinity() 查询获得
描述

*pDevicehGpu关联的 CUDA 设备 (如果适用)。

注意

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

另请参阅

cuGLMapBufferObject, cuGLRegisterBufferObject, cuGLUnmapBufferObject, cuGLUnregisterBufferObject, cuGLUnmapBufferObjectAsync, cuGLSetBufferObjectMapFlags, cudaWGLGetDevice

OpenGL 互操作性 [已弃用]