Bug 948

Summary: NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Display via eglGetDisplay(..)
Product: [JogAmp] Jogl Reporter: Sven Gothel <sgothel>
Component: openglAssignee: Sven Gothel <sgothel>
Status: RESOLVED FIXED    
Severity: major    
Priority: ---    
Version: 2   
Hardware: All   
OS: all   
Type: DEFECT SCM Refs:
fbe00e6f5dca8043b40dd96f096fecc9424e0cc3 f1af72e1d93e8b928409c7bd8da0acb2b41cd345
Workaround: TRUE

Description Sven Gothel 2014-01-23 05:51:30 CET

    
Comment 1 Sven Gothel 2014-01-23 05:55:39 CET
NV proprietary driver 331.38 for GNU/Linux contains 
a 32bit libEGL and libGLES* libs.

They seem not to operate w/ an X11 graphics device, only w/ the default EGL device.

Currently we assume a functional driver w/ teh desktop-device,
if the EGL device test was successful.

Hence we shall test whether ES[1-3] is operational on desktop-device.
Comment 2 Sven Gothel 2014-01-23 18:42:13 CET
NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Device via eglGetDevice.

- Subsequent eglGetDevice(..) calls fail.

- Using the same 'global' egl-device does work though

Remedy: Add 'GLRendererQuirks.SingletonEGLDeviceOnly'
Comment 3 Sven Gothel 2014-01-23 18:45:07 CET
(In reply to comment #2)
> NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Device via
> eglGetDevice.
> 
> - Subsequent eglGetDevice(..) calls fail.
> 
> - Using the same 'global' egl-device does work though
> 
> Remedy: Add 'GLRendererQuirks.SingletonEGLDeviceOnly'

NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Device 
via eglGetDisplay.

  - Subsequent eglGetDisplay(..) calls fail.

  - Using the same 'global' egl-display does work though

Remedy: Add 'GLRendererQuirks.SingletonEGLDisplayOnly'
Comment 4 Sven Gothel 2014-01-24 05:16:35 CET
fbe00e6f5dca8043b40dd96f096fecc9424e0cc3

    Detection of quirk is done as usual in GLContextImpl.setRendererQuirks(..),
    and EGLDrawableFactory passes the quirk, if detected, down to EGLDisplayUtil.
    The latter implements the singleton eglDisplay handle.
    
    EGLDisplayUtil: Cleaned up ..
      - EGLDisplayRef employs the reference handling incl. eglInitialize(..) and eglTerminate(),
        as well as the new singleton quirk.
    
      - Mark all internal methods 'private',
        to remove possible [untested] sideffects.
Comment 5 Sven Gothel 2014-01-24 19:34:25 CET
f1af72e1d93e8b928409c7bd8da0acb2b41cd345
    Refines commit fbe00e6f5dca8043b40dd96f096fecc9424e0cc3
    
    Instead of querying driver artifacts (vendor, platform, version ..)
    we simply can autodetect this quirk by trying to get a second egl-display handle
    when initializing the EGLDrawablFactory's default device:
      EGL.eglGetDisplay(EGL.EGL_DEFAULT_DISPLAY)