summaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/mesa
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2022-06-15 22:21:08 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-06-17 17:57:44 +0100
commit72706c7aab1927475d8dda084ba5c8765a0cfe19 (patch)
treef38af3ca862486f18a1a307bfde6f71e2622c873 /meta/recipes-graphics/mesa
parentfb733514623bfb3df274feb043cc677868b55219 (diff)
downloadpoky-72706c7aab1927475d8dda084ba5c8765a0cfe19.tar.gz
mesa: backport a patch to support compositors without zwp_linux_dmabuf_v1 again
* the same will be needed for kirkstone (From OE-Core rev: 3857066550d77c2c8134326f7e9b28d0f4d78b7a) Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-graphics/mesa')
-rw-r--r--meta/recipes-graphics/mesa/files/0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch158
-rw-r--r--meta/recipes-graphics/mesa/mesa.inc1
2 files changed, 159 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 @@
1From 7796c2c56c960ac55e49246f0349ac52539ada55 Mon Sep 17 00:00:00 2001
2From: Leandro Ribeiro <leandro.ribeiro@collabora.com>
3Date: Sun, 10 Apr 2022 22:54:36 -0300
4Subject: [PATCH] Revert "egl/wayland: deprecate drm_handle_format() and
5 drm_handle_capabilities()"
6
7Commit af1ee8e010441f8f2ed8c77065b159652a4ac9fe dropped support to
8wl_drm, as we thought that most compositors from active projects were
9already supporting zwp_linux_dmabuf_v1.
10
11But that's not true, so revert this commit in order to give these
12projects a longer transition period.
13
14Note that we didn't add back the support to GEM name API, and that was
15on purpose.
16
17Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
18Reviewed-by: Simon Ser <contact@emersion.fr>
19Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15822>
20
21Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
22Upstream-Status: Backport [https://gitlab.freedesktop.org/mesa/mesa/-/commit/c60fea8c228ae3f32e20d6b65c473d9f04871d20]
23---
24 src/egl/drivers/dri2/egl_dri2.h | 1 +
25 src/egl/drivers/dri2/platform_wayland.c | 59 +++++++++++++++++++------
26 2 files changed, 47 insertions(+), 13 deletions(-)
27
28diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
29index c466ff83c53..eecb32a53fd 100644
30--- a/src/egl/drivers/dri2/egl_dri2.h
31+++ b/src/egl/drivers/dri2/egl_dri2.h
32@@ -283,6 +283,7 @@ struct dri2_egl_display
33 struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback;
34 struct dmabuf_feedback_format_table format_table;
35 bool authenticated;
36+ uint32_t capabilities;
37 char *device_name;
38 #endif
39
40diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
41index 5ff83cce08a..843434376a7 100644
42--- a/src/egl/drivers/dri2/platform_wayland.c
43+++ b/src/egl/drivers/dri2/platform_wayland.c
44@@ -1343,7 +1343,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
45 struct dri2_egl_surface *dri2_surf,
46 __DRIimage *image)
47 {
48- struct wl_buffer *ret;
49+ struct wl_buffer *ret = NULL;
50 EGLBoolean query;
51 int width, height, fourcc, num_planes;
52 uint64_t modifier = DRM_FORMAT_MOD_INVALID;
53@@ -1447,11 +1447,28 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
54 ret = zwp_linux_buffer_params_v1_create_immed(params, width, height,
55 fourcc, 0);
56 zwp_linux_buffer_params_v1_destroy(params);
57+ } else {
58+ struct wl_drm *wl_drm =
59+ dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm;
60+ int fd = -1, stride;
61+
62+ if (num_planes > 1)
63+ return NULL;
64+
65+ query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd);
66+ query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
67+ if (!query) {
68+ if (fd >= 0)
69+ close(fd);
70+ return NULL;
71+ }
72
73- return ret;
74+ ret = wl_drm_create_prime_buffer(wl_drm, fd, width, height, fourcc, 0,
75+ stride, 0, 0, 0, 0);
76+ close(fd);
77 }
78
79- return NULL;
80+ return ret;
81 }
82
83 static EGLBoolean
84@@ -1698,16 +1715,21 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
85 static void
86 drm_handle_format(void *data, struct wl_drm *drm, uint32_t format)
87 {
88- /* deprecated, as compositors already support the dma-buf protocol extension
89- * and so we can rely on dmabuf_handle_modifier() to receive formats and
90- * modifiers */
91+ struct dri2_egl_display *dri2_dpy = data;
92+ int visual_idx = dri2_wl_visual_idx_from_fourcc(format);
93+
94+ if (visual_idx == -1)
95+ return;
96+
97+ BITSET_SET(dri2_dpy->formats.formats_bitmap, visual_idx);
98 }
99
100 static void
101 drm_handle_capabilities(void *data, struct wl_drm *drm, uint32_t value)
102 {
103- /* deprecated, as compositors already support the dma-buf protocol extension
104- * and so we can rely on it to create wl_buffer's */
105+ struct dri2_egl_display *dri2_dpy = data;
106+
107+ dri2_dpy->capabilities = value;
108 }
109
110 static void
111@@ -2075,13 +2097,12 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
112 wl_registry_add_listener(dri2_dpy->wl_registry,
113 &registry_listener_drm, dri2_dpy);
114
115- /* The compositor must expose the dma-buf interface. */
116- if (roundtrip(dri2_dpy) < 0 || dri2_dpy->wl_dmabuf == NULL)
117+ if (roundtrip(dri2_dpy) < 0)
118 goto cleanup;
119
120 /* Get default dma-buf feedback */
121- if (zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
122- ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
123+ if (dri2_dpy->wl_dmabuf && zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
124+ ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
125 dmabuf_feedback_format_table_init(&dri2_dpy->format_table);
126 dri2_dpy->wl_dmabuf_feedback =
127 zwp_linux_dmabuf_v1_get_default_feedback(dri2_dpy->wl_dmabuf);
128@@ -2089,7 +2110,6 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
129 &dmabuf_feedback_listener, dri2_dpy);
130 }
131
132- /* Receive events from the interfaces */
133 if (roundtrip(dri2_dpy) < 0)
134 goto cleanup;
135
136@@ -2176,6 +2196,19 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
137
138 dri2_wl_setup_swap_interval(disp);
139
140+ if (dri2_dpy->wl_drm) {
141+ /* To use Prime, we must have _DRI_IMAGE v7 at least. createImageFromFds
142+ * support indicates that Prime export/import is supported by the driver.
143+ * We deprecated the support to GEM names API, so we bail out if the
144+ * driver does not suport Prime. */
145+ if (!(dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) ||
146+ (dri2_dpy->image->base.version < 7) ||
147+ (dri2_dpy->image->createImageFromFds == NULL)) {
148+ _eglLog(_EGL_WARNING, "wayland-egl: display does not support prime");
149+ goto cleanup;
150+ }
151+ }
152+
153 if (dri2_dpy->is_different_gpu &&
154 (dri2_dpy->image->base.version < 9 ||
155 dri2_dpy->image->blitImage == NULL)) {
156--
1572.35.1
158
diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc
index a5de6f9dbf..3c26b23ed5 100644
--- a/meta/recipes-graphics/mesa/mesa.inc
+++ b/meta/recipes-graphics/mesa/mesa.inc
@@ -20,6 +20,7 @@ SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
20 file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \ 20 file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
21 file://0001-futex.h-Define-__NR_futex-if-it-does-not-exist.patch \ 21 file://0001-futex.h-Define-__NR_futex-if-it-does-not-exist.patch \
22 file://0001-util-format-Check-for-NEON-before-using-it.patch \ 22 file://0001-util-format-Check-for-NEON-before-using-it.patch \
23 file://0001-Revert-egl-wayland-deprecate-drm_handle_format-and-d.patch \
23 " 24 "
24 25
25SRC_URI[sha256sum] = "9f2b30f5276a9abaf71aafc6979685e2636189de1a87aea2c9e69744a6d0ebb9" 26SRC_URI[sha256sum] = "9f2b30f5276a9abaf71aafc6979685e2636189de1a87aea2c9e69744a6d0ebb9"