summaryrefslogtreecommitdiffstats
path: root/meta-agl-drm-lease/dynamic-layers/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl/0001-waylandws_client-Ensure-that-supported-DMAbuf-format.patch
blob: 850099c859dd87cc4fc5eb2426ef5cc65a969931 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
From 5a0a17bc0dafe577ec02ad2205c25bc8acb2c5e6 Mon Sep 17 00:00:00 2001
From: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Date: Mon, 25 Oct 2021 18:26:34 +0900
Subject: [PATCH 1/3] waylandws_client: Ensure that supported DMAbuf formats
 are received

Explicitly check that the list of supported dmabuf formats have
been received from the server during initialization.  At least
one pixel format must be supported in order to complete initialization
successfully.
---
 src/waylandws_client.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/waylandws_client.c b/src/waylandws_client.c
index e917347..20bfac9 100644
--- a/src/waylandws_client.c
+++ b/src/waylandws_client.c
@@ -698,6 +698,20 @@ static bool setup_buffer_sharing(WLWSClientDisplay *display)
 	return authenticate_kms_device(display);
 }
 
+static bool ensure_supported_dmabuf_formats(WLWSClientDisplay *display)
+{
+	if (!display->zlinux_dmabuf)
+		return true;
+
+	if (wl_display_roundtrip_queue(display->wl_display, display->wl_queue) < 0 ||
+            !display->enable_formats) {
+		/* No supported dmabuf pixel formats */
+		return false;
+	}
+
+	return true;
+}
+
 /***********************************************************************************
  Function Name      : WSEGL_InitialiseDisplay
  Inputs             : hNativeDisplay
@@ -755,6 +769,12 @@ static WSEGLError WSEGLc_InitialiseDisplay(NativeDisplayType hNativeDisplay,
 		goto fail;
 	}
 
+	/* Get the list of supported pixel formats */
+	if (!ensure_supported_dmabuf_formats(display)) {
+		err = WSEGL_BAD_NATIVE_DISPLAY;
+		goto fail;
+	}
+
 	/* XXX: should we wrap this with wl_kms client code? */
 	if (kms_create(display->fd, &display->kms)) {
 		err = WSEGL_BAD_NATIVE_DISPLAY;
-- 
2.25.1