Ошибка CL_INVALID_PROPERTY на платформе Linux - OpenCL - PullRequest
0 голосов
/ 12 марта 2020

Контекст

  • Ubuntu 16 LTS
  • Gnome и X11
  • Mesa DRI Intel версии 18.0
  • OpenGL 4.0
  • Использование JOGL / JOCL библиотек для проекта
  • JOGL версия 2.3.2
  • gluegen -rt версия 2.3.2
  • JOCL версия 2.0.1

Вот вывод glxinfo, чтобы быть уверенным:

Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) Haswell Desktop  (0x412)
    Version: 18.0.5
    Accelerated: yes
    Video memory: 1536MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 3.0

Проблема

В настоящее время сталкивается с этой проблемой. Я провел много поисков и обнаружил, что указанные c свойства через cl_context_properties должны быть переданы для создания контекста свойства openCL, в зависимости от операционной системы, в которой вы работаете.

Вот способ, которым я создаю cl_context_properties специально для Linux платформы. Я следовал по этой ссылке , чтобы создать функцию.

private fun createLinuxOpenClContextProperties(val gl: GL4, val platform: cl_platform_id) : cl_context_properties {
        val cp = cl_context_properties()

        val glContextImpl: GLContextImpl = gl.context as GLContextImpl
        val glDrawableImpl = glContextImpl.drawableImpl
        val nativeSurface = glDrawableImpl.nativeSurface

        cp.addProperty(CL.CL_GL_CONTEXT_KHR.toLong(), gl.context.handle)
        cp.addProperty(CL.CL_GLX_DISPLAY_KHR.toLong(), nativeSurface.displayHandle)
        cp.addProperty(CL.CL_CONTEXT_PLATFORM.toLong(), platform)

        return cp
}

Объект gl был ранее выбран таким образом из GLEventListener 'init function:

// Into GLEventListener inheriting class
init {
        ...
        val capabilities = GLCapabilities(GLProfile.get(GLProfile.GL4))
        glComponent = GLCanvas(capabilities)
        glComponent.isFocusable = true
        glComponent.addGLEventListener(this)
        ...
}

override fun init(drawable: GLAutoDrawable?) {
    gl = drawable.gl.gL4
    ...
}

При вызове CL.clCreateContext() появляется ошибка CL_INVALID_PROPERTY времени выполнения.

val props = createLinuxOpenClContextProperties(gl, platform)
ctx = CL.clCreateContext(props, 1, Array(1) { device }, null, null, null) <== CL_INVALID_PROPERTY

Этот пример работает на Windows машине, но не на Linux машине. Я нашел много примеров прохождения свойств этого пути для машины Linux, но в настоящее время она не работает в этой среде. Любая идея?


Вот вывод ctx из OpenCL, когда я печатаю переменную ctx, это может помочь. Мы можем получить эту информацию из профиля gl

X11GLXContext [Version 4.5 (Core profile, arb, compat[ES2, ES3, ES31], FBO, hardware) - 4.5 (Core Profile) Mesa 18.0.5 [GL 4.5.0, vendor 18.0.5 ((Core Profile) Mesa 18.0.5)], options 0x5c05, this 0x3ea21aaf, handle 0x7f1818706a10, isShared false, jogamp.opengl.gl4.GL4bcImpl@4a242d29,
        quirks: [NoDoubleBufferedPBuffer, NoSetSwapIntervalPostRetarget, GLSharedContextBuggy],
        Drawable: X11OnscreenGLXDrawable[Realized true,
        Factory   jogamp.opengl.x11.glx.X11GLXDrawableFactory@5aedfb01,
        Handle    0x9600021,
        Surface   JAWTWindow[0x75752abc][JVM version: 1.8.0_181 (1.8.0 update 181)
        JAWT version: 0x10004, CA_LAYER: false, isLayeredSurface false, bounds [ 0 / 0  800 x 800 ], insets [ l 0, r 0 - t 0, b 0 - 0x0], pixelScale 1.0x1.0, shallUseOffscreenLayer false, isOffscreenLayerSurface false, attachedSurfaceLayer 0x0, windowHandle 0x9600021, surfaceHandle 0x9600021, bounds [ 0 / 0  800 x 800 ], insets [ l 0, r 0 - t 0, b 0 - 0x0], window [0/0 800x800], pixels[scale 1.0, 1.0 -> 800x800], visible true, lockedExt false,
        config AWTGraphicsConfiguration[AWTGraphicsScreen[AWTGraphicsDevice[type .awt, connection :0.0, unitID 0, awtDevice X11GraphicsDevice[screen=0], handle 0x0], idx 0],
        chosen    GLCaps[glx vid 0x10c, fbc 0xb5: rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/8/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        requested GLCaps[rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        X11GraphicsConfig[dev=X11GraphicsDevice[screen=0],vis=0x10c],
        encapsulated X11GLXGraphicsConfiguration[X11GraphicsScreen[X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x7f18185b97b0, owner true, JAWTToolkitLock[obj 0x324348a6, isOwner true, <59e576a2, 6ce5bb6c>[count 1, qsz 0, owner <AWT-EventQueue-0>]]], idx 0], visualID 0x10c, fbConfigID 0xb5,
        requested GLCaps[rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        chosen    GLCaps[glx vid 0x10c, fbc 0xb5: rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/8/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]]]],
        awtComponent AWT-GLCanvas[Realized true,
        jogamp.opengl.x11.glx.X11OnscreenGLXDrawable,
        Factory   jogamp.opengl.x11.glx.X11GLXDrawableFactory@5aedfb01,
        handle    0x9600021,
        Drawable size 800x800 surface[800x800],
        AWT[pos 0/0, size 800x800,
        visible true, displayable true, showing true,
        AWTGraphicsConfiguration[AWTGraphicsScreen[AWTGraphicsDevice[type .awt, connection :0.0, unitID 0, awtDevice X11GraphicsDevice[screen=0], handle 0x0], idx 0],
        chosen    GLCaps[glx vid 0x10c, fbc 0xb5: rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/8/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        requested GLCaps[rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        X11GraphicsConfig[dev=X11GraphicsDevice[screen=0],vis=0x10c],
        encapsulated X11GLXGraphicsConfiguration[X11GraphicsScreen[X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x7f18185b97b0, owner true, JAWTToolkitLock[obj 0x324348a6, isOwner true, <59e576a2, 6ce5bb6c>[count 1, qsz 0, owner <AWT-EventQueue-0>]]], idx 0], visualID 0x10c, fbConfigID 0xb5,
        requested GLCaps[rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]],
        chosen    GLCaps[glx vid 0x10c, fbc 0xb5: rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/8/0, dbl, mono  , hw, GLProfile[GL4/GL4.hw], on-scr[.]]]]]],
        surfaceLock <30995c86, 1837244b>[count 1, qsz 0, owner <AWT-EventQueue-0>]]], direct true]
...