diff options
Diffstat (limited to 'recipes-graphics/wayland/files/0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch')
-rw-r--r-- | recipes-graphics/wayland/files/0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/recipes-graphics/wayland/files/0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch b/recipes-graphics/wayland/files/0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch new file mode 100644 index 0000000..cbd2cd5 --- /dev/null +++ b/recipes-graphics/wayland/files/0001-compositor-drm-Add-new-gbm-struct-to-allow-for-a-sep.patch @@ -0,0 +1,181 @@ +From 0719ed96aa2c41afe342f4c3c19e4ca91f270be2 Mon Sep 17 00:00:00 2001 +From: James Thomas <james.thomas@codethink.co.uk> +Date: Fri, 20 Jun 2014 12:12:26 +0100 +Subject: [PATCH 1/6] compositor-drm: Add new gbm struct to allow for a + separate gbm device + +This is needed for devices like tegra jetson where the gbm device is not +the same as the drm device +--- + src/compositor-drm.c | 48 +++++++++++++++++++++++++++--------------------- + 1 file changed, 27 insertions(+), 21 deletions(-) + +diff --git a/src/compositor-drm.c b/src/compositor-drm.c +index 893877d..5db86dc 100644 +--- a/src/compositor-drm.c ++++ b/src/compositor-drm.c +@@ -90,8 +90,11 @@ struct drm_backend { + int fd; + char *filename; + } drm; +- struct gbm_device *gbm; +- uint32_t *crtcs; ++ struct { ++ int fd; ++ char *filename; ++ } gbm; ++ struct gbm_device *gbm_device; uint32_t *crtcs; + int num_crtcs; + uint32_t crtc_allocator; + uint32_t connector_allocator; +@@ -478,7 +481,7 @@ drm_output_prepare_scanout_view(struct drm_output *output, + + if (ev->geometry.x != output->base.x || + ev->geometry.y != output->base.y || +- buffer == NULL || b->gbm == NULL || ++ buffer == NULL || b->gbm_device == NULL || + buffer->width != output->base.current_mode->width || + buffer->height != output->base.current_mode->height || + output->base.transform != viewport->buffer.transform || +@@ -488,7 +491,7 @@ drm_output_prepare_scanout_view(struct drm_output *output, + if (ev->geometry.scissor_enabled) + return NULL; + +- bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_WL_BUFFER, ++ bo = gbm_bo_import(b->gbm_device, GBM_BO_IMPORT_WL_BUFFER, + buffer->resource, GBM_BO_USE_SCANOUT); + + /* Unable to use the buffer for scanout */ +@@ -923,7 +926,7 @@ drm_output_prepare_overlay_view(struct drm_output *output, + uint32_t format; + wl_fixed_t sx1, sy1, sx2, sy2; + +- if (b->gbm == NULL) ++ if (b->gbm_device == NULL) + return NULL; + + if (viewport->buffer.transform != output->base.transform) +@@ -985,13 +988,13 @@ drm_output_prepare_overlay_view(struct drm_output *output, + if (dmabuf->attributes.n_planes != 1 || dmabuf->attributes.offset[0] != 0) + return NULL; + +- bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_FD, &gbm_dmabuf, ++ bo = gbm_bo_import(b->gbm_device, GBM_BO_IMPORT_FD, &gbm_dmabuf, + GBM_BO_USE_SCANOUT); + #else + return NULL; + #endif + } else { +- bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_WL_BUFFER, ++ bo = gbm_bo_import(b->gbm_device, GBM_BO_IMPORT_WL_BUFFER, + buffer_resource, GBM_BO_USE_SCANOUT); + } + if (!bo) +@@ -1091,7 +1094,7 @@ drm_output_prepare_cursor_view(struct drm_output *output, + if (ev->transform.enabled && + (ev->transform.matrix.type > WESTON_MATRIX_TRANSFORM_TRANSLATE)) + return NULL; +- if (b->gbm == NULL) ++ if (b->gbm_device == NULL) + return NULL; + if (output->base.transform != WL_OUTPUT_TRANSFORM_NORMAL) + return NULL; +@@ -1493,6 +1496,9 @@ init_drm(struct drm_backend *b, struct udev_device *device) + b->drm.fd = fd; + b->drm.filename = strdup(filename); + ++ b->gbm.fd = fd; ++ b->gbm.filename = b->drm.filename; ++ + ret = drmGetCap(fd, DRM_CAP_TIMESTAMP_MONOTONIC, &cap); + if (ret == 0 && cap == 1) + clk_id = CLOCK_MONOTONIC; +@@ -1579,7 +1585,7 @@ drm_backend_create_gl_renderer(struct drm_backend *b) + n_formats = 3; + if (gl_renderer->create(b->compositor, + EGL_PLATFORM_GBM_KHR, +- (void *)b->gbm, ++ (void *)b->gbm_device, + gl_renderer->opaque_attribs, + format, + n_formats) < 0) { +@@ -1592,13 +1598,13 @@ drm_backend_create_gl_renderer(struct drm_backend *b) + static int + init_egl(struct drm_backend *b) + { +- b->gbm = create_gbm_device(b->drm.fd); ++ b->gbm_device = create_gbm_device(b->gbm.fd); + +- if (!b->gbm) ++ if (!b->gbm_device) + return -1; + + if (drm_backend_create_gl_renderer(b) < 0) { +- gbm_device_destroy(b->gbm); ++ gbm_device_destroy(b->gbm_device); + return -1; + } + +@@ -1831,7 +1837,7 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b) + }; + int i, flags, n_formats = 1; + +- output->gbm_surface = gbm_surface_create(b->gbm, ++ output->gbm_surface = gbm_surface_create(b->gbm_device, + output->base.current_mode->width, + output->base.current_mode->height, + format[0], +@@ -1862,7 +1868,7 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b) + continue; + + output->gbm_cursor_bo[i] = +- gbm_bo_create(b->gbm, b->cursor_width, b->cursor_height, ++ gbm_bo_create(b->gbm_device, b->cursor_width, b->cursor_height, + GBM_FORMAT_ARGB8888, flags); + } + +@@ -2703,8 +2709,8 @@ drm_destroy(struct weston_compositor *ec) + + weston_compositor_shutdown(ec); + +- if (b->gbm) +- gbm_device_destroy(b->gbm); ++ if (b->gbm_device) ++ gbm_device_destroy(b->gbm_device); + + weston_launcher_destroy(ec->launcher); + +@@ -2989,8 +2995,8 @@ switch_to_gl_renderer(struct drm_backend *b) + + weston_log("Switching to GL renderer\n"); + +- b->gbm = create_gbm_device(b->drm.fd); +- if (!b->gbm) { ++ b->gbm_device = create_gbm_device(b->drm.fd); ++ if (!b->gbm_device) { + weston_log("Failed to create gbm device. " + "Aborting renderer switch\n"); + return; +@@ -3002,7 +3008,7 @@ switch_to_gl_renderer(struct drm_backend *b) + b->compositor->renderer->destroy(b->compositor); + + if (drm_backend_create_gl_renderer(b) < 0) { +- gbm_device_destroy(b->gbm); ++ gbm_device_destroy(b->gbm_device); + weston_log("Failed to create GL renderer. Quitting.\n"); + /* FIXME: we need a function to shutdown cleanly */ + assert(0); +@@ -3191,8 +3197,8 @@ err_drm_source: + err_udev_input: + udev_input_destroy(&b->input); + err_sprite: +- if (b->gbm) +- gbm_device_destroy(b->gbm); ++ if (b->gbm_device) ++ gbm_device_destroy(b->gbm_device); + destroy_sprites(b); + err_udev_dev: + udev_device_unref(drm_device); +-- +2.9.3 + |