Exemple #1
0
static boolean
fbdev_display_init_screen(struct native_display *ndpy)
{
   struct fbdev_display *fbdpy = fbdev_display(ndpy);
   struct sw_winsys *ws;

   ws = fbdev_create_sw_winsys(fbdpy->fd);
   if (!ws)
      return FALSE;

   fbdpy->base.screen = fbdpy->event_handler->new_sw_screen(&fbdpy->base, ws);
   if (!fbdpy->base.screen) {
      if (ws->destroy)
         ws->destroy(ws);
      return FALSE;
   }

   if (!fbdpy->base.screen->is_format_supported(fbdpy->base.screen,
            fbdpy->config.color_format, PIPE_TEXTURE_2D, 0,
            PIPE_BIND_RENDER_TARGET)) {
      fbdpy->base.screen->destroy(fbdpy->base.screen);
      fbdpy->base.screen = NULL;
      return FALSE;
   }

   return TRUE;
}
static struct native_fbdev_screen *swrast_fbdev_create_screen(
                  const struct native_fbdev_driver *driver,
                  int fd,
                  struct native_display *display,
                  const struct native_event_handler *event_handler)
{
   struct swrast_fbdev_screen *fscreen = CALLOC_STRUCT(swrast_fbdev_screen);
   struct sw_winsys *ws;

   ws = fbdev_create_sw_winsys(fd);
   if (!ws)
      return FALSE;

   fscreen->fd = fd;
   fscreen->base.screen = event_handler->new_sw_screen(display, ws);
   if(!fscreen->base.screen)
   {
      FREE(fscreen);
      return NULL;
   }

   fscreen->base.destroy = swrast_fbdev_screen_destroy;
   fscreen->base.create_drawable = swrast_fbdev_create_drawable;
   fscreen->base.destroy_drawable = swrast_fbdev_destroy_drawable;
   fscreen->base.get_drawable_fence = swrast_fbdev_get_drawable_fence;
   return &fscreen->base;
}