Beispiel #1
0
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;
}
Beispiel #2
0
/**
 * 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;
}