1From d4c7770214227985ca61182ec5096b764bd1f1a8 Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Fri, 23 Oct 2020 17:37:04 +0800
4Subject: [PATCH 34/79] backend-drm: Support using ARGB8888 gbm_format
5
6Tested with:
7/etc/xdg/weston/weston.ini:
8[core]
9gbm-format=argb8888
10
11Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
12---
13 libweston/backend-drm/drm-gbm.c | 8 ++++++--
14 libweston/backend-drm/drm.c     | 3 +++
15 2 files changed, 9 insertions(+), 2 deletions(-)
16
17diff --git a/libweston/backend-drm/drm-gbm.c b/libweston/backend-drm/drm-gbm.c
18index ecc7a5f..bcc2b17 100644
19--- a/libweston/backend-drm/drm-gbm.c
20+++ b/libweston/backend-drm/drm-gbm.c
21@@ -282,8 +282,10 @@ drm_output_render_gl(struct drm_output_state *state, pixman_region32_t *damage)
22 {
23 	struct drm_output *output = state->output;
24 	struct drm_backend *b = to_drm_backend(output->base.compositor);
25+	const struct pixel_format_info *format;
26 	struct gbm_bo *bo;
27 	struct drm_fb *ret;
28+	bool is_opaque;
29
30 	output->base.compositor->renderer->repaint_output(&output->base,
31 							  damage);
32@@ -295,8 +297,10 @@ drm_output_render_gl(struct drm_output_state *state, pixman_region32_t *damage)
33 		return NULL;
34 	}
35
36-	/* The renderer always produces an opaque image. */
37-	ret = drm_fb_get_from_bo(bo, b, true, BUFFER_GBM_SURFACE);
38+	format = pixel_format_get_info(output->gbm_format);
39+	is_opaque = format && pixel_format_is_opaque(format);
40+
41+	ret = drm_fb_get_from_bo(bo, b, is_opaque, BUFFER_GBM_SURFACE);
42 	if (!ret) {
43 		weston_log("failed to get drm_fb for bo\n");
44 		gbm_surface_release_buffer(output->gbm_surface, bo);
45diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
46index 3667b8d..df9db5c 100644
47--- a/libweston/backend-drm/drm.c
48+++ b/libweston/backend-drm/drm.c
49@@ -1554,6 +1554,9 @@ drm_output_init_pixman(struct drm_output *output, struct drm_backend *b)
50 	};
51
52 	switch (format) {
53+		case DRM_FORMAT_ARGB8888:
54+			pixman_format = PIXMAN_a8r8g8b8;
55+			break;
56 		case DRM_FORMAT_XRGB8888:
57 			pixman_format = PIXMAN_x8r8g8b8;
58 			break;
59--
602.20.1
61
62