1From 344919ec833d29e977cad74f1151f7a0a6b99b3d 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 37/95] 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 f998178..03e1b6d 100644
19--- a/libweston/backend-drm/drm-gbm.c
20+++ b/libweston/backend-drm/drm-gbm.c
21@@ -292,8 +292,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_device *device = output->device;
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@@ -305,8 +307,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, device, 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, device, 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 7760205..ed902e8 100644
47--- a/libweston/backend-drm/drm.c
48+++ b/libweston/backend-drm/drm.c
49@@ -1618,6 +1618,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