static boolean dri2_display_bind_wayland_display(struct native_display *ndpy, struct wl_display *wl_dpy) { struct dri2_display *dri2dpy = dri2_display(ndpy); if (dri2dpy->wl_server_drm) return FALSE; dri2dpy->wl_server_drm = wayland_drm_init(wl_dpy, x11_screen_get_device_name(dri2dpy->xscr), &wl_drm_callbacks, ndpy, 0); if (!dri2dpy->wl_server_drm) return FALSE; return TRUE; }
/** * Initialize DRI2 and pipe screen. */ static boolean dri2_display_init_screen(struct native_display *ndpy) { struct dri2_display *dri2dpy = dri2_display(ndpy); int fd; if (!x11_screen_support(dri2dpy->xscr, X11_SCREEN_EXTENSION_DRI2) || !x11_screen_support(dri2dpy->xscr, X11_SCREEN_EXTENSION_GLX)) { _eglLog(_EGL_WARNING, "GLX/DRI2 is not supported"); return FALSE; } dri2dpy->dri_driver = x11_screen_probe_dri2(dri2dpy->xscr, &dri2dpy->dri_major, &dri2dpy->dri_minor); fd = x11_screen_enable_dri2(dri2dpy->xscr, dri2_display_invalidate_buffers, &dri2dpy->base); if (fd < 0) return FALSE; dri2dpy->base.screen = dri2dpy->event_handler->new_drm_screen(&dri2dpy->base, dri2dpy->dri_driver, fd); if (!dri2dpy->base.screen) { _eglLog(_EGL_DEBUG, "failed to create DRM screen"); return FALSE; } #ifdef HAVE_WAYLAND_BACKEND dri2dpy->base.wayland_bufmgr = wayland_drm_bufmgr_create( dri2_display_authenticate, dri2dpy, x11_screen_get_device_name(dri2dpy->xscr)); #endif return TRUE; }