Bug 948 - NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Display via eglGetDisplay(..)
Summary: NVIDIA 331.38 (Linux X11) EGL impl. only supports _one_ EGL Display via eglGe...
Status: RESOLVED FIXED
Alias: None
Product: Jogl
Classification: JogAmp
Component: opengl (show other bugs)
Version: 2
Hardware: All all
: --- major
Assignee: Sven Gothel
URL:
Depends on:
Blocks:
 
Reported: 2014-01-23 05:51 CET by Sven Gothel
Modified: 2014-01-24 19:34 CET (History)
0 users

See Also:
Type: DEFECT
SCM Refs:
fbe00e6f5dca8043b40dd96f096fecc9424e0cc3 f1af72e1d93e8b928409c7bd8da0acb2b41cd345
Workaround: TRUE


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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)