确定 CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR 的确切原因

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 文档,此错误代码可能意味着许多不同的事情(逐字复制):

  1. CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR在属性中指定无效的 OpenGL 上下文或共享组对象句柄时(仅当cl_khr_gl_sharing启用了扩展时)。

  2. CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR如果在赋予 clCreateContext 的属性列表中未指定 OpenGL 或 OpenGL ES 上下文或共享组,则调用第 9.7 节中的任何命令。(如果cl_khr_gl_sharing启用了扩展)

  3. 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_KHRCL_GLX_DISPLAY_KHR.
    • 通过设置属性CL_GL_CONTEXT_KHRCL_WGL_HDC_KHR.

    并且符合以下任何条件:

    • 指定的显示和上下文属性无法识别有效的 OpenGL 或 OpenGL ES 上下文。
    • 指定的上下文不支持缓冲区和渲染缓冲区对象。
    • 指定的上下文与正在创建的 OpenCL 上下文不兼容(例如,它存在于物理上不同的地址空间中,例如另一个硬件设备,或者由于实现限制不支持与 OpenCL 共享数据)。
  4. 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+ 可能原因中的哪一个?