From d196a79b6c493d74d0057d74238353180d717255 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Wed, 3 May 2017 21:28:44 +1200 Subject: Changed backend to accept wl_display. --- backend/drm/drm.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) (limited to 'backend/drm/drm.c') diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 13971687..f636c42c 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -41,7 +41,7 @@ static void page_flip_handler(int fd, unsigned seq, unsigned tv_sec, unsigned tv void *user) { struct wlr_drm_output *out = user; - struct wlr_drm_backend *backend = out->renderer->backend; + struct wlr_drm_backend *backend = wl_container_of(out->renderer, backend, renderer); out->pageflip_pending = true; if (!out->cleanup) { @@ -49,7 +49,7 @@ static void page_flip_handler(int fd, unsigned seq, unsigned tv_sec, unsigned tv } } -static int drm_event(int fd, uint32_t mask, void *data) { +int wlr_drm_event(int fd, uint32_t mask, void *data) { drmEventContext event = { .version = DRM_EVENT_CONTEXT_VERSION, .page_flip_handler = page_flip_handler, @@ -60,8 +60,7 @@ static int drm_event(int fd, uint32_t mask, void *data) { return 1; } -bool wlr_drm_renderer_init(struct wlr_drm_renderer *renderer, - struct wlr_drm_backend *backend, int fd) { +bool wlr_drm_renderer_init(struct wlr_drm_renderer *renderer, int fd) { renderer->gbm = gbm_create_device(fd); if (!renderer->gbm) { @@ -70,28 +69,12 @@ bool wlr_drm_renderer_init(struct wlr_drm_renderer *renderer, } if (!wlr_egl_init(&renderer->egl, EGL_PLATFORM_GBM_MESA, renderer->gbm)) { - goto error_gbm; - } - - backend->event_src.drm = wl_event_loop_add_fd(backend->event_loop, - backend->fd, WL_EVENT_READABLE, drm_event, NULL); - if (!backend->event_src.drm) { - wlr_log(L_ERROR, "Failed to create DRM event source"); - goto error_egl; + gbm_device_destroy(renderer->gbm); + return false; } renderer->fd = fd; - renderer->backend = backend; - return true; - -error_egl: - wlr_egl_free(&renderer->egl); - -error_gbm: - gbm_device_destroy(renderer->gbm); - - return false; } void wlr_drm_renderer_free(struct wlr_drm_renderer *renderer) { @@ -296,7 +279,7 @@ static drmModeModeInfo *select_mode(size_t num_modes, drmModeModeInfo modes[stat } bool wlr_drm_output_modeset(struct wlr_drm_output *out, const char *str) { - struct wlr_drm_backend *backend = out->renderer->backend; + struct wlr_drm_backend *backend = wl_container_of(out->renderer, backend, renderer); wlr_log(L_INFO, "Modesetting %s with '%s'", out->name, str); drmModeConnector *conn = drmModeGetConnector(backend->fd, out->connector); -- cgit v1.2.3