static struct pipe_screen * pipe_loader_sw_create_screen(struct pipe_loader_device *dev, const char *library_paths) { struct pipe_loader_sw_device *sdev = pipe_loader_sw_device(dev); struct pipe_screen *(*init)(struct sw_winsys *); if (!sdev->lib) sdev->lib = pipe_loader_find_module(dev, library_paths); if (!sdev->lib) return NULL; init = (void *)util_dl_get_proc_address(sdev->lib, "swrast_create_screen"); if (!init) return NULL; return init(sdev->ws); }
static struct pipe_screen * pipe_loader_drm_create_screen(struct pipe_loader_device *dev, const char *library_paths) { struct pipe_loader_drm_device *ddev = pipe_loader_drm_device(dev); const struct drm_driver_descriptor *dd; if (!ddev->lib) ddev->lib = pipe_loader_find_module(dev, library_paths); if (!ddev->lib) return NULL; dd = (const struct drm_driver_descriptor *) util_dl_get_proc_address(ddev->lib, "driver_descriptor"); /* sanity check on the name */ if (!dd || strcmp(dd->name, ddev->base.driver_name) != 0) return NULL; return dd->create_screen(ddev->fd); }