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