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; }