Контекст
- 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]