确定CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR的确切原因

时间:2017-03-10 03:59:09

标签: debugging opengl runtime-error interop opencl

尝试执行OpenGL + OpenCL互操作时,在调用CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR时(使用OpenCL的官方C ++包装器),我收到错误返回码cl::CommandQueue::enqueueNDRangeKernel()

根据official OpenCL 1.2 documentation,此错误代码可能意味着许多不同的东西(逐字复制):

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

  2.   
  3. CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR如果在给定的属性列表中未指定OpenGL或OpenGL ES上下文或共享组   调用clCreateContext和第9.7节中的任何命令。 (如果   已启用cl_khr_gl_sharing扩展程序)

  4.   
  5. 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共享数据)。
    •   
  6.   
  7. CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR如果通过设置为基于CGL的OpenGL实现指定了共享组   属性CL_CGL_SHAREGROUP_KHR,指定的共享组   不识别有效的CGL共享组对象(如果是   已启用cl_khr_gl_sharing扩展名。)

  8.   

就我而言,我使用的是使用GLX的Ubuntu Linux,并且我已经使用CL_GL_CONTEXT_KHR + CL_GLX_DISPLAY_KHR选项仔细准备了我的OpenCL上下文。我还检查了我的设备,以确保它们都支持cl_khr_gl_sharing扩展名。

我还仔细设置了初始OpenGL上下文,尽可能使OpenCL友好。

我仍然收到此错误。我现在要问的是,鉴于这种情况,如何追踪此返回代码的实际原因

在我的案例中,是否有某种方法可以找出造成它的7个可能原因中的哪一个?

0 个答案:

没有答案