Len*_*and 5 opengl debugging interop runtime-error opencl
在尝试执行 OpenGL + OpenCL 互操作时,我CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR
在调用时收到错误返回代码cl::CommandQueue::enqueueNDRangeKernel()
(使用 OpenCL 的官方 C++ 包装器)。
根据官方 OpenCL 1.2 文档,此错误代码可能意味着许多不同的事情(逐字复制):
CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR
在属性中指定无效的 OpenGL 上下文或共享组对象句柄时(仅当cl_khr_gl_sharing
启用了扩展时)。
CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR
如果在赋予 clCreateContext 的属性列表中未指定 OpenGL 或 OpenGL ES 上下文或共享组,则调用第 9.7 节中的任何命令。(如果cl_khr_gl_sharing
启用了扩展)
CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR
如果cl_khr_gl_sharing
启用了扩展并且上下文是通过以下任何一种方式指定的:
- 通过设置属性
CL_GL_CONTEXT_KHR
和 为基于 EGL 的 OpenGL ES 或 OpenGL 实现指定的上下文CL_EGL_DISPLAY_KHR
。- 通过设置属性
CL_GL_CONTEXT_KHR
和CL_GLX_DISPLAY_KHR
.- 通过设置属性
CL_GL_CONTEXT_KHR
和CL_WGL_HDC_KHR
.并且符合以下任何条件:
- 指定的显示和上下文属性无法识别有效的 OpenGL 或 OpenGL ES 上下文。
- 指定的上下文不支持缓冲区和渲染缓冲区对象。
- 指定的上下文与正在创建的 OpenCL 上下文不兼容(例如,它存在于物理上不同的地址空间中,例如另一个硬件设备,或者由于实现限制不支持与 OpenCL 共享数据)。
CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR
如果通过设置属性 CL_CGL_SHAREGROUP_KHR 为基于 CGL 的 OpenGL 实现指定了共享组,并且指定的共享组未标识有效的 CGL 共享组对象(如果cl_khr_gl_sharing
启用了 扩展)。
就我而言,我使用的是使用 GLX 的 Ubuntu Linux,并且我已经使用CL_GL_CONTEXT_KHR
+CL_GLX_DISPLAY_KHR
选项仔细准备了我的 OpenCL 上下文。我还检查了我的设备以确保它们都支持cl_khr_gl_sharing
扩展。
我还仔细地将初始 OpenGL 上下文设置为尽可能对 OpenCL 友好。
我仍然收到此错误。我现在要问的是,鉴于这种情况,我如何才能追踪此返回码的实际原因?
有什么方法可以找出在我的情况下导致它的 7+ 可能原因中的哪一个?