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 设备。
枚举
函数
- CUresult cuGLGetDevices ( unsigned int* pCudaDeviceCount, CUdevice* pCudaDevices, unsigned int cudaDeviceCount, CUGLDeviceList deviceList )
-
获取与当前 OpenGL 上下文关联的 CUDA 设备。
参数
- pCudaDeviceCount
- - 返回的 CUDA 设备数量。
- pCudaDevices
- - 返回的 CUDA 设备。
- cudaDeviceCount
- - 输出设备数组 pCudaDevices 的大小。
- deviceList
- - 要返回的设备集。
返回值
CUDA_SUCCESS, CUDA_ERROR_NO_DEVICE, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_GRAPHICS_CONTEXT, CUDA_ERROR_OPERATING_SYSTEM
描述
在*pCudaDeviceCount中返回与当前 OpenGL 上下文对应的 CUDA 兼容设备的数量。 也在*pCudaDevices中返回最多 cudaDeviceCount 个与当前 OpenGL 上下文对应的 CUDA 兼容设备。 如果当前 OpenGL 上下文使用的任何 GPU 不支持 CUDA,则此调用将返回 CUDA_ERROR_NO_DEVICE。
以下是deviceList参数可能的值:
-
CU_GL_DEVICE_LIST_ALL:查询当前 OpenGL 上下文使用的所有设备。
-
CU_GL_DEVICE_LIST_CURRENT_FRAME:查询当前 OpenGL 上下文用于渲染当前帧的设备 (在 SLI 中)。
-
CU_GL_DEVICE_LIST_NEXT_FRAME:查询当前 OpenGL 上下文用于渲染下一帧的设备 (在 SLI 中)。 请注意,这是一个预测,不能保证在所有情况下都是正确的。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
- CUresult cuGraphicsGLRegisterBuffer ( CUgraphicsResource* pCudaResource, GLuint buffer, unsigned int Flags )
-
注册 OpenGL 缓冲区对象。
参数
- pCudaResource
- - 指向返回的对象句柄的指针
- buffer
- - 要注册的缓冲区对象的名称
- Flags
- - 注册标志
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_HANDLE, CUDA_ERROR_ALREADY_MAPPED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_OPERATING_SYSTEM
描述
注册由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
- - 注册标志
返回值
CUDA_SUCCESS, CUDA_ERROR_INVALID_HANDLE, CUDA_ERROR_ALREADY_MAPPED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_OPERATING_SYSTEM
描述
指定的对象类型。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() 查询获得
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_VALUE
描述
在*pDevice与hGpu关联的 CUDA 设备 (如果适用)。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cuGLMapBufferObject, cuGLRegisterBufferObject, cuGLUnmapBufferObject, cuGLUnregisterBufferObject, cuGLUnmapBufferObjectAsync, cuGLSetBufferObjectMapFlags, cudaWGLGetDevice