Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

wspear
Greetings. I'm trying to track down a fix for this. I tried updating to the latest stable build of jogl but the nature of the error didn't seem to change. We've only seen this on our arm64 test system, other platforms work fine. Is there anything else I could track down to help debug? glxgears works on this system but I don't know what jogl test code would exercise the path that leads to this error. The
NvRmMemInitNvmap failed with Permission denied
549: Memory Manager Not supported



****NvRmMemInit failed**** error type: 196626


*** NvRmMemInit failed NvRmMemConstructor

portion of the error also shows up in the etc/test.sh output from the jogamp-all-platforms package but whatever gets run there doesn't crash so that may be unrelated. Please let me know if any of the text output from that test script would be useful in diagnosing the issue.

NvRmMemInitNvmap failed with Permission denied
549: Memory Manager Not supported



****NvRmMemInit failed**** error type: 196626


*** NvRmMemInit failed NvRmMemConstructor
Caught handled GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection localhost:10.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x1a99560c, isOwner false, <300c08cd, e324157>[count 0, qsz 0, owner <NULL>]]] on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:306)
    [1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [2]: java.base/java.lang.Thread.run(Thread.java:833)
Caused[0] by GLException: AWT-EventQueue-0-SharedResourceRunner: Unable to create temp OpenGL context(1) on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:390)
    [1]: jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:794)
    [2]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:677)
    [3]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:615)
    [4]: jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:277)
    [5]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [6]: java.base/java.lang.Thread.run(Thread.java:833)
Exception in thread "AWT-EventQueue-0" com.jogamp.opengl.GLException: AWT-EventQueue-0: Unable to create temp OpenGL context(1)
        at jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:390)
        at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:794)
        at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:677)
        at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:615)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1279)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
        at com.jogamp.opengl.awt.GLCanvas$11.run(GLCanvas.java:1441)
        at com.jogamp.opengl.Threading.invoke(Threading.java:223)
        at com.jogamp.opengl.awt.GLCanvas.display(GLCanvas.java:500)
        at com.jogamp.opengl.awt.GLCanvas.paint(GLCanvas.java:554)
        at java.desktop/sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)
        at java.desktop/sun.awt.X11.XRepaintArea.paintComponent(XRepaintArea.java:66)
        at java.desktop/sun.awt.RepaintArea.paint(RepaintArea.java:240)
        at java.desktop/sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:555)
        at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5062)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
X11Util.Display: Shutdown (JVM shutdown: true, open (no close attempt): 2/2, reusable (open, marked uncloseable): 0, pending (open in creation order): 2)
X11Util: Open X11 Display Connections: 2
X11Util: Open[0]: NamedX11Display[localhost:10.0, 0xffff0c0ef8e0, refCount 1, unCloseable false]
X11Util: Open[1]: NamedX11Display[localhost:10.0, 0xffff14563aa0, refCount 1, unCloseable false]
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

gouessej
Administrator
Hello

If I were you, I would solve the permission problem first.
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

wspear
We were able to test on another system where the permission error did not occur. It looks like the same basic error still occurs, but the stacktrace is a little different in a way that might be helpful.

This is what is caught by our application's internal exception handler.

ParaProf Build: Fri Feb  2 11:47:32 PST 2018
com.jogamp.opengl.GLException: Profile GL_DEFAULT is not available on X11GraphicsDevice[type .x11, connection localhost:10.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x6da34ce8, isOwner false, <30944b11, 51f9bbdc>[count 0, qsz 0, owner <NULL>]]], but: []
	at com.jogamp.opengl.GLProfile.get(GLProfile.java:1009)
	at com.jogamp.opengl.GLProfile.getDefault(GLProfile.java:740)
	at com.jogamp.opengl.GLCapabilities.<init>(GLCapabilities.java:84)
	at edu.uoregon.tau.vis.VisCanvas.<init>(VisCanvas.java:35)
	at edu.uoregon.tau.paraprof.ThreeDeeWindow.<init>(ThreeDeeWindow.java:218)
	at edu.uoregon.tau.paraprof.ThreeDeeWindow.createThreeDeeWindow(ThreeDeeWindow.java:285)
	at edu.uoregon.tau.paraprof.ParaProfUtils.show3dVisualization(ParaProfUtils.java:453)
	at edu.uoregon.tau.paraprof.ParaProfUtils$4.actionPerformed(ParaProfUtils.java:522)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:369)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1020)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1064)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6400)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

And this is what gets sent to the console:

Caught handled GLException: EGLGLXDrawableFactory - Could not initialize shared resources for EGLGraphicsDevice[type .egl, v0.0.0, nativeDisplayID 0x0, connection localhost:10.0, unitID 0, handle 0x0, owner true, ResourceToolkitLock[obj 0xa07ecf5, isOwner true, <3592bdb8, 52aa4906>[count 1, qsz 0, owner <AWT-EventQueue-0-SharedResourceRunner>]]] on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:555)
    [1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [2]: java.base/java.lang.Thread.run(Thread.java:829)
Caused[0] by GLException: Failed to created/initialize EGL display incl. fallback default: native 0x0, error 0x3008/0x3000 on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.egl.EGLDisplayUtil.eglGetDisplayAndInitialize(EGLDisplayUtil.java:381)
    [1]: jogamp.opengl.egl.EGLDisplayUtil.access$300(EGLDisplayUtil.java:61)
    [2]: jogamp.opengl.egl.EGLDisplayUtil$1.eglGetAndInitDisplay(EGLDisplayUtil.java:404)
    [3]: com.jogamp.nativewindow.egl.EGLGraphicsDevice.open(EGLGraphicsDevice.java:228)
    [4]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createEGLSharedResourceImpl(EGLDrawableFactory.java:569)
    [5]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:553)
    [6]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [7]: java.base/java.lang.Thread.run(Thread.java:829)
Caught handled GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection localhost:10.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x6da34ce8, isOwner false, <30944b11, 51f9bbdc>[count 0, qsz 0, owner <NULL>]]] on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:306)
    [1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [2]: java.base/java.lang.Thread.run(Thread.java:829)
Caused[0] by GLException: AWT-EventQueue-0-SharedResourceRunner: Unable to create temp OpenGL context(1) on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:390)
    [1]: jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:794)
    [2]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:677)
    [3]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:615)
    [4]: jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:277)
    [5]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [6]: java.base/java.lang.Thread.run(Thread.java:829)
Caught handled GLException: EGLGLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection localhost:10.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x6da34ce8, isOwner true, <30944b11, 51f9bbdc>[count 1, qsz 0, owner <AWT-EventQueue-0-SharedResourceRunner>]]] on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:555)
    [1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [2]: java.base/java.lang.Thread.run(Thread.java:829)
Caused[0] by GLException: Failed to created/initialize EGL display incl. fallback default: native 0x0, error 0x3008/0x3000 on thread AWT-EventQueue-0-SharedResourceRunner
    [0]: jogamp.opengl.egl.EGLDisplayUtil.eglGetDisplayAndInitialize(EGLDisplayUtil.java:381)
    [1]: jogamp.opengl.egl.EGLDisplayUtil.access$300(EGLDisplayUtil.java:61)
    [2]: jogamp.opengl.egl.EGLDisplayUtil$1.eglGetAndInitDisplay(EGLDisplayUtil.java:404)
    [3]: com.jogamp.nativewindow.egl.EGLGraphicsDevice.open(EGLGraphicsDevice.java:228)
    [4]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createEGLSharedResourceImpl(EGLDrawableFactory.java:569)
    [5]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:553)
    [6]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
    [7]: java.base/java.lang.Thread.run(Thread.java:829)
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

gouessej
Administrator
0x3008 means EGL BAD DISPLAY. Maybe try to use "-Djogl.disable.opengles". DuckDuckGo finds a similar stack trace here:
https://github.com/VirtualGL/virtualgl/issues/56

The problem is that it's a weak workaround. If you have only OpenGL-ES (no OpenGL), it won't be able to display something :s

Have you tried to run "unset DISPLAY"?
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

wspear
The application won't launch without display set (localhost:10.0 and :10.0 have the same behavior). "-Djogl.disable.opengles" didn't help.

We're constructing our GLCapabilities with the default profile (new GLCapabilities()). Should we set a profile explicitly? I checked out the docs (https://jogamp.org/deployment/v2.1.4/javadoc/jogl/javadoc/javax/media/opengl/GLProfile.html) but I'm not clear on which, if any of these, would be more likely to work for X11 on Arm64... or if this is a even a potential fix.
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

gouessej
Administrator
JOGL 2.1.4 is obsolete, please use JOGL 2.5.0.

I suspect that JOGL is not to blame. Do you succeed in running glxgears?
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

gouessej
Administrator
If glxgears doesn't work, you'll have to look for the root cause in your configuration or maybe the OpenGL-ES driver has a serious problem. Otherwise, please report a bug against JOGL, send me an email if you don't have a bugzilla account. You'll have to provide a lot more information about your operating system, your hardware, etc:
https://forum.jogamp.org/Bugreport-How-to-report-a-bug-td4042945.html
Julien Gouesse | Personal blog | Website
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

wspear
Since glxgears does work on this system I was trying to bundle up a small test case to submit to the tracker. But the mini-test worked every time. Turns out our application's launch script was setting LIBGL_ALWAYS_INDIRECT when it detected arm64. Apparently that was needed at some point in the past, but now, somehow, it causes this fault. Our visualization works when we don't set that variable. So I guess we're all good. Thanks very much for taking a look at this.
Reply | Threaded
Open this post in threaded view
|

Re: Error on arm64 linux: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice

gouessej
Administrator
Thank you for the valuable feedback. LIBGL_ALWAYS_INDIRECT works with Mesa but not with Nvidia (you have to use another flag), it is intended to enable indirect rendering through GLX. Indirect rendering is generally less capable than direct rendering, use it only when you really need it.
Julien Gouesse | Personal blog | Website