diff options
author | Scott Anderson <ascent12@hotmail.com> | 2017-05-03 21:28:44 +1200 |
---|---|---|
committer | Scott Anderson <ascent12@hotmail.com> | 2017-05-03 21:28:44 +1200 |
commit | d196a79b6c493d74d0057d74238353180d717255 (patch) | |
tree | 73e8cbe15779fa3b6a230750e04e0f7c252bb539 /backend/drm/drm.c | |
parent | 0002b8dd08fdab7da12127ad2f43238f376b1a7a (diff) |
Changed backend to accept wl_display.
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r-- | backend/drm/drm.c | 29 |
1 files changed, 6 insertions, 23 deletions
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); |