1From 1968953a171df9e09854b54b4ecc407c393983a9 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/93] 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 5528ef6..a936e9b 100644 47--- a/libweston/backend-drm/drm.c 48+++ b/libweston/backend-drm/drm.c 49@@ -1611,6 +1611,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