summaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch')
-rw-r--r--meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch158
1 files changed, 158 insertions, 0 deletions
diff --git a/meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch b/meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch
new file mode 100644
index 0000000000..dac2de4e62
--- /dev/null
+++ b/meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch
@@ -0,0 +1,158 @@
+From 7796c2c56c960ac55e49246f0349ac52539ada55 Mon Sep 17 00:00:00 2001
+From: Leandro Ribeiro <leandro.ribeiro@collabora.com>
+Date: Sun, 10 Apr 2022 22:54:36 -0300
+Subject: [PATCH] Revert "egl/wayland: deprecate drm_handle_format() and
+ drm_handle_capabilities()"
+
+Commit af1ee8e010441f8f2ed8c77065b159652a4ac9fe dropped support to
+wl_drm, as we thought that most compositors from active projects were
+already supporting zwp_linux_dmabuf_v1.
+
+But that's not true, so revert this commit in order to give these
+projects a longer transition period.
+
+Note that we didn't add back the support to GEM name API, and that was
+on purpose.
+
+Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
+Reviewed-by: Simon Ser <contact@emersion.fr>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15822>
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+Upstream-Status: Backport [https://gitlab.freedesktop.org/mesa/mesa/-/commit/c60fea8c228ae3f32e20d6b65c473d9f04871d20]
+---
+ src/egl/drivers/dri2/egl_dri2.h | 1 +
+ src/egl/drivers/dri2/platform_wayland.c | 59 +++++++++++++++++++------
+ 2 files changed, 47 insertions(+), 13 deletions(-)
+
+diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
+index c466ff83c53..eecb32a53fd 100644
+--- a/src/egl/drivers/dri2/egl_dri2.h
++++ b/src/egl/drivers/dri2/egl_dri2.h
+@@ -283,6 +283,7 @@ struct dri2_egl_display
+ struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback;
+ struct dmabuf_feedback_format_table format_table;
+ bool authenticated;
++ uint32_t capabilities;
+ char *device_name;
+ #endif
+
+diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
+index 5ff83cce08a..843434376a7 100644
+--- a/src/egl/drivers/dri2/platform_wayland.c
++++ b/src/egl/drivers/dri2/platform_wayland.c
+@@ -1343,7 +1343,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
+ struct dri2_egl_surface *dri2_surf,
+ __DRIimage *image)
+ {
+- struct wl_buffer *ret;
++ struct wl_buffer *ret = NULL;
+ EGLBoolean query;
+ int width, height, fourcc, num_planes;
+ uint64_t modifier = DRM_FORMAT_MOD_INVALID;
+@@ -1447,11 +1447,28 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
+ ret = zwp_linux_buffer_params_v1_create_immed(params, width, height,
+ fourcc, 0);
+ zwp_linux_buffer_params_v1_destroy(params);
++ } else {
++ struct wl_drm *wl_drm =
++ dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm;
++ int fd = -1, stride;
++
++ if (num_planes > 1)
++ return NULL;
++
++ query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd);
++ query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
++ if (!query) {
++ if (fd >= 0)
++ close(fd);
++ return NULL;
++ }
+
+- return ret;
++ ret = wl_drm_create_prime_buffer(wl_drm, fd, width, height, fourcc, 0,
++ stride, 0, 0, 0, 0);
++ close(fd);
+ }
+
+- return NULL;
++ return ret;
+ }
+
+ static EGLBoolean
+@@ -1698,16 +1715,21 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
+ static void
+ drm_handle_format(void *data, struct wl_drm *drm, uint32_t format)
+ {
+- /* deprecated, as compositors already support the dma-buf protocol extension
+- * and so we can rely on dmabuf_handle_modifier() to receive formats and
+- * modifiers */
++ struct dri2_egl_display *dri2_dpy = data;
++ int visual_idx = dri2_wl_visual_idx_from_fourcc(format);
++
++ if (visual_idx == -1)
++ return;
++
++ BITSET_SET(dri2_dpy->formats.formats_bitmap, visual_idx);
+ }
+
+ static void
+ drm_handle_capabilities(void *data, struct wl_drm *drm, uint32_t value)
+ {
+- /* deprecated, as compositors already support the dma-buf protocol extension
+- * and so we can rely on it to create wl_buffer's */
++ struct dri2_egl_display *dri2_dpy = data;
++
++ dri2_dpy->capabilities = value;
+ }
+
+ static void
+@@ -2075,13 +2097,12 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
+ wl_registry_add_listener(dri2_dpy->wl_registry,
+ &registry_listener_drm, dri2_dpy);
+
+- /* The compositor must expose the dma-buf interface. */
+- if (roundtrip(dri2_dpy) < 0 || dri2_dpy->wl_dmabuf == NULL)
++ if (roundtrip(dri2_dpy) < 0)
+ goto cleanup;
+
+ /* Get default dma-buf feedback */
+- if (zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
+- ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
++ if (dri2_dpy->wl_dmabuf && zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
++ ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
+ dmabuf_feedback_format_table_init(&dri2_dpy->format_table);
+ dri2_dpy->wl_dmabuf_feedback =
+ zwp_linux_dmabuf_v1_get_default_feedback(dri2_dpy->wl_dmabuf);
+@@ -2089,7 +2110,6 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
+ &dmabuf_feedback_listener, dri2_dpy);
+ }
+
+- /* Receive events from the interfaces */
+ if (roundtrip(dri2_dpy) < 0)
+ goto cleanup;
+
+@@ -2176,6 +2196,19 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
+
+ dri2_wl_setup_swap_interval(disp);
+
++ if (dri2_dpy->wl_drm) {
++ /* To use Prime, we must have _DRI_IMAGE v7 at least. createImageFromFds
++ * support indicates that Prime export/import is supported by the driver.
++ * We deprecated the support to GEM names API, so we bail out if the
++ * driver does not suport Prime. */
++ if (!(dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) ||
++ (dri2_dpy->image->base.version < 7) ||
++ (dri2_dpy->image->createImageFromFds == NULL)) {
++ _eglLog(_EGL_WARNING, "wayland-egl: display does not support prime");
++ goto cleanup;
++ }
++ }
++
+ if (dri2_dpy->is_different_gpu &&
+ (dri2_dpy->image->base.version < 9 ||
+ dri2_dpy->image->blitImage == NULL)) {
+--
+2.35.1
+