- Debian 8 Jessie, GNU/Linux, x86_64 - NVidia beta driver 355.06 The new beta driver claims to support OpenGL 3.0 surfaceless context, i.e. 'Added support to make an OpenGL 3.0 and above context current without making current to any drawable.' However, our probe crashes JOGL. +++ j jogamp.opengl.x11.glx.GLX.dispatch_glXMakeContextCurrent0(JJJJJ)Z+0 j jogamp.opengl.x11.glx.GLX.glXMakeContextCurrent(JJJJ)Z+45 j jogamp.opengl.x11.glx.X11GLXContext.glXMakeContextCurrent(JJJJ)Z+16 j jogamp.opengl.x11.glx.X11GLXContext.makeCurrentImpl()V+33 j jogamp.opengl.GLContextImpl.makeCurrentWithinLock(I)I+790 j jogamp.opengl.GLContextImpl.makeCurrent(Z)I+488 j jogamp.opengl.GLContextImpl.setGLDrawable(Lcom/jogamp/opengl/GLDrawable;Z)Lcom/jogamp/opengl/GLDrawable;+302 j jogamp.opengl.GLDrawableFactoryImpl.probeSurfacelessCtx(Lcom/jogamp/opengl/GLContext;Z)Z+93 j jogamp.opengl.x11.glx.X11GLXDrawableFactory.access$300(Ljogamp/opengl/x11/glx/X11GLXDrawableFactory;Lcom/jogamp/opengl/GLContext;Z)Z+3 j jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(Lcom/jogamp/nativewindow/AbstractGraphicsDevice;)Ljogamp/opengl/Sh +++
Thx to Xerxes for finding this issue and reporting via IIRC.
- Probing passes for EGL/ES 1.1 and 3.1 context. - Probing crashes for GLX/GL 4.5 context at 'context.setGLDrawable(zeroDrawable, false)' at 1st 'res = makeCurrent(true); // implicit: associateDrawable(true)' i.e. glXMakeContextCurrent does not seem to handle the zero drawable! +++ XXX-1: X11GLXContext [Version 4.5 (Compat profile, arb, compat[ES2, ES3, ES31], FBO, hardware) - 4.5.0 NVIDIA 355.06 [GL 4.5.0, vendor 355.6.0 (NVIDIA 355.06)], options 0x3c03, this 0x222884cd, handle 0x7f51f035e270, isShared false, jogamp.opengl.gl4.GL4bcImpl@20483fa4, quirks: [], Drawable: X11OnscreenGLXDrawable[Realized true, Factory jogamp.opengl.x11.glx.X11GLXDrawableFactory@83dd33, Handle 0x4200002, Surface WrappedSurface[ displayHandle 0x7f51f00013d0 , surfaceHandle 0x4200002 , size 64x64 , UOB[ OWNS_SURFACE | WINDOW_INVISIBLE ] , X11GLXGraphicsConfiguration[X11GraphicsScreen[X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x7f51f00013d0, owner true, ResourceToolkitLock[obj 0x ++
e88216bd03a41480b81345ed9afc45ddea5ecfcd: Since no known NVidia driver is know properly supporting surfaceless context, i.e. current context w/o drawable attached, we set quirk NoSurfacelessCtx for all NVidia drivers until a 'good one' is known!
(In reply to comment #3) > e88216bd03a41480b81345ed9afc45ddea5ecfcd: > > Since no known NVidia driver is know properly supporting surfaceless > context, > i.e. current context w/o drawable attached, we set quirk NoSurfacelessCtx > for all NVidia drivers until a 'good one' is known! I have a Nvidia GS somewhere, should I give it a try?
commit 17af6ed1d0f60c111079ff19c4114fefbfd025fc Bug 1200: Refine fix for crash on GNU/Linux x86_64 'NVidia beta driver 355.06' @ probeSurfacelessCtx Refine commit e88216bd03a41480b81345ed9afc45ddea5ecfcd, i.e. restrict new 'NoSurfacelessCtx' NVidia-Vendor criteria in GLContextImpl.setRendererQuirks(..) to - isX11 (new) - isDriverNVIDIAGeForce (kept) - !(adevice instanceof EGLGraphicsDevice) (new) Surfaceless context seems to work on NVidia 355.06 for EGL+[ES+GL]. It does not work for GLX+GL though! TODO: Validate changing a GLContext's GLDrawable from 'onscreen' or 'offscreen' to 'zero' (Surfaceless).
commit 4fe9e1dfa67f4e5d614f48c02ad88e4cdd1ed415 probeSurfacelessCtx works at least since NVIDIA 430.40. Added this version as the safe version to limit GLRendererQuirks.NoSurfacelessCtx setting.
bb3ee12b7aeef276a03f091333eacc68542e784b GLRendererQuirks.NoSurfacelessCtx still persists on Linux/X11 NVIDIA 440.36 using FBO Tested with com.jogamp.opengl.test.junit.jogl.tile.TestTiledPrintingGearsNewtAWT, which crashes in native makeCurrent of NV driver gl-core when using SurfacelessCtx. Therefor we had to revert the commit 4fe9e1dfa67f4e5d614f48c02ad88e4cdd1ed415 enabling SurfacelessCtx with NV driver >= 430.40.