aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/drm.c
diff options
context:
space:
mode:
authorScott Anderson <ascent12@hotmail.com>2017-05-03 21:28:44 +1200
committerScott Anderson <ascent12@hotmail.com>2017-05-03 21:28:44 +1200
commitd196a79b6c493d74d0057d74238353180d717255 (patch)
tree73e8cbe15779fa3b6a230750e04e0f7c252bb539 /backend/drm/drm.c
parent0002b8dd08fdab7da12127ad2f43238f376b1a7a (diff)
Changed backend to accept wl_display.
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r--backend/drm/drm.c29
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);