glamor: Trust eglGetPlatformDisplayEXT if it exists
If the libEGL we are using has eglGetPlatformDisplayEXT, yet it still returns NULL, then this very likely means that it does not support the type (e.g. EGL_PLATFORM_GBM_MESA) passed in, and then returning NULL is the right thing to do. This avoids falling back to an eglGetDisplay() implementation which does not understands the passed in gbm handle, treats it as a pointer to something else completely, followed by a crash sooner or later. Specifically this fixes using the nvidia binary driver, with nvidia's libEGL + the modesetting driver on a secondary GPU crashing inside glamor_egl_init() sometimes. Cc: Eric Anholt <eric@anholt.net> Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
5b74e260e0
commit
05e1964425
|
@ -769,6 +769,10 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd)
|
|||
|
||||
glamor_egl->display = glamor_egl_get_display(EGL_PLATFORM_GBM_MESA,
|
||||
glamor_egl->gbm);
|
||||
if (!glamor_egl->display) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglGetDisplay() failed\n");
|
||||
goto error;
|
||||
}
|
||||
#else
|
||||
glamor_egl->display = eglGetDisplay((EGLNativeDisplayType) (intptr_t) fd);
|
||||
#endif
|
||||
|
|
|
@ -67,9 +67,7 @@ glamor_egl_get_display(EGLint type, void *native)
|
|||
PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplayEXT =
|
||||
(void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
|
||||
if (getPlatformDisplayEXT)
|
||||
dpy = getPlatformDisplayEXT(type, native, NULL);
|
||||
if (dpy)
|
||||
return dpy;
|
||||
return getPlatformDisplayEXT(type, native, NULL);
|
||||
}
|
||||
|
||||
/* Welp, everything is awful. */
|
||||
|
|
Loading…
Reference in New Issue
Block a user