6.16. OpenGL 互操作性
本节介绍 CUDA 运行时应用程序编程接口的 OpenGL 互操作性功能。请注意,OpenGL 资源的映射是使用 图形互操作性 中描述的图形 API 不可知、资源映射接口执行的。
枚举
- enum cudaGLDeviceList
函数
- __host__ cudaError_t cudaGLGetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int cudaDeviceCount, cudaGLDeviceList deviceList )
- 获取与当前 OpenGL 上下文关联的 CUDA 设备。
- __host__ cudaError_t cudaGraphicsGLRegisterBuffer ( cudaGraphicsResource** resource, GLuint buffer, unsigned int flags )
- 注册 OpenGL 缓冲区对象。
- __host__ cudaError_t cudaGraphicsGLRegisterImage ( cudaGraphicsResource** resource, GLuint image, GLenum target, unsigned int flags )
- 注册 OpenGL 纹理或渲染缓冲区对象。
- __host__ cudaError_t cudaWGLGetDevice ( int* device, HGPUNV hGpu )
- 获取与 hGpu 关联的 CUDA 设备。
枚举
函数
- __host__ cudaError_t cudaGLGetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int cudaDeviceCount, cudaGLDeviceList deviceList )
-
获取与当前 OpenGL 上下文关联的 CUDA 设备。
参数
- pCudaDeviceCount
- - 返回的与当前 OpenGL 上下文对应的 CUDA 设备数量
- pCudaDevices
- - 返回的与当前 OpenGL 上下文对应的 CUDA 设备
- cudaDeviceCount
- - 输出设备数组的大小pCudaDevices
- deviceList
- - 要返回的设备集。此集合可以是 cudaGLDeviceListAll(用于所有设备)、cudaGLDeviceListCurrentFrame(用于渲染当前帧的设备,在 SLI 中)或 cudaGLDeviceListNextFrame(用于渲染下一帧的设备,在 SLI 中)。
返回值
cudaSuccess, cudaErrorNoDevice, cudaErrorInvalidGraphicsContext, cudaErrorOperatingSystem, cudaErrorUnknown
描述
在以下位置返回*pCudaDeviceCount与当前 OpenGL 上下文对应的 CUDA 兼容设备的数量。还在以下位置返回*pCudaDevices至多cudaDeviceCount与当前 OpenGL 上下文对应的 CUDA 兼容设备。如果当前 OpenGL 上下文使用的任何 GPU 不支持 CUDA,则调用将返回 cudaErrorNoDevice。
注意-
Mac OS X 不支持此功能。
-
请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsResourceGetMappedPointer, cuGLGetDevices
- __host__ cudaError_t cudaGraphicsGLRegisterBuffer ( cudaGraphicsResource** resource, GLuint buffer, unsigned int flags )
-
注册 OpenGL 缓冲区对象。
参数
- resource
- - 指向返回的对象句柄的指针
- buffer
- - 要注册的缓冲区对象的名称
- flags
- - 注册标志
返回值
cudaSuccess, cudaErrorInvalidDevice, cudaErrorInvalidValue, cudaErrorInvalidResourceHandle, cudaErrorOperatingSystem, cudaErrorUnknown
描述
注册由以下项指定的缓冲区对象buffer以供 CUDA 访问。已注册对象的句柄作为resource返回。注册标志flags指定预期用途,如下所示
-
cudaGraphicsRegisterFlagsNone:指定有关此资源将如何使用的任何提示。因此,假定 CUDA 将从此资源读取和写入。这是默认值。
-
cudaGraphicsRegisterFlagsReadOnly:指定 CUDA 不会写入此资源。
-
cudaGraphicsRegisterFlagsWriteDiscard:指定 CUDA 不会从此资源读取,并且将覆盖资源的全部内容,因此不会保留先前存储在资源中的任何数据。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsResourceGetMappedPointer, cuGraphicsGLRegisterBuffer
- __host__ cudaError_t cudaGraphicsGLRegisterImage ( cudaGraphicsResource** resource, GLuint image, GLenum target, unsigned int flags )
-
注册 OpenGL 纹理或渲染缓冲区对象。
参数
- resource
- - 指向返回的对象句柄的指针
- image
- - 要注册的纹理或渲染缓冲区对象的名称
- target
- - 标识由以下项指定的对象的类型image
- flags
- - 注册标志
返回值
cudaSuccess, cudaErrorInvalidDevice, cudaErrorInvalidValue, cudaErrorInvalidResourceHandle, cudaErrorOperatingSystem, cudaErrorUnknown
描述
注册由以下项指定的纹理或渲染缓冲区对象image以供 CUDA 访问。已注册对象的句柄作为resource.
target必须与对象的类型匹配,并且必须是 GL_TEXTURE_2D、GL_TEXTURE_RECTANGLE、GL_TEXTURE_CUBE_MAP、GL_TEXTURE_3D、GL_TEXTURE_2D_ARRAY 或 GL_RENDERBUFFER 之一。
注册标志flags指定预期用途,如下所示
-
cudaGraphicsRegisterFlagsNone:指定有关此资源将如何使用的任何提示。因此,假定 CUDA 将从此资源读取和写入。这是默认值。
-
cudaGraphicsRegisterFlagsReadOnly:指定 CUDA 不会写入此资源。
-
cudaGraphicsRegisterFlagsWriteDiscard:指定 CUDA 不会从此资源读取,并且将覆盖资源的全部内容,因此不会保留先前存储在资源中的任何数据。
-
cudaGraphicsRegisterFlagsSurfaceLoadStore:指定 CUDA 会将此资源绑定到表面引用。
-
cudaGraphicsRegisterFlagsTextureGather:指定 CUDA 将在此资源上执行纹理采集操作。
支持以下图像格式。为了简洁起见,列表已缩写。例如,{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}
当前不允许以下图像类
-
带有边框的纹理
-
多采样渲染缓冲区
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cuGraphicsGLRegisterImage
- __host__ cudaError_t cudaWGLGetDevice ( int* device, HGPUNV hGpu )
-
获取与 hGpu 关联的 CUDA 设备。
参数
- device
- - 返回与 hGpu 关联的设备,如果 hGpu 不是计算设备,则返回 -1。
- hGpu
- - GPU 的句柄,通过 WGL_NV_gpu_affinity 查询
返回值