1*4882a593SmuzhiyunFrom 344919ec833d29e977cad74f1151f7a0a6b99b3d Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Fri, 23 Oct 2020 17:37:04 +0800 4*4882a593SmuzhiyunSubject: [PATCH 37/95] backend-drm: Support using ARGB8888 gbm_format 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunTested with: 7*4882a593Smuzhiyun/etc/xdg/weston/weston.ini: 8*4882a593Smuzhiyun[core] 9*4882a593Smuzhiyungbm-format=argb8888 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 12*4882a593Smuzhiyun--- 13*4882a593Smuzhiyun libweston/backend-drm/drm-gbm.c | 8 ++++++-- 14*4882a593Smuzhiyun libweston/backend-drm/drm.c | 3 +++ 15*4882a593Smuzhiyun 2 files changed, 9 insertions(+), 2 deletions(-) 16*4882a593Smuzhiyun 17*4882a593Smuzhiyundiff --git a/libweston/backend-drm/drm-gbm.c b/libweston/backend-drm/drm-gbm.c 18*4882a593Smuzhiyunindex f998178..03e1b6d 100644 19*4882a593Smuzhiyun--- a/libweston/backend-drm/drm-gbm.c 20*4882a593Smuzhiyun+++ b/libweston/backend-drm/drm-gbm.c 21*4882a593Smuzhiyun@@ -292,8 +292,10 @@ drm_output_render_gl(struct drm_output_state *state, pixman_region32_t *damage) 22*4882a593Smuzhiyun { 23*4882a593Smuzhiyun struct drm_output *output = state->output; 24*4882a593Smuzhiyun struct drm_device *device = output->device; 25*4882a593Smuzhiyun+ const struct pixel_format_info *format; 26*4882a593Smuzhiyun struct gbm_bo *bo; 27*4882a593Smuzhiyun struct drm_fb *ret; 28*4882a593Smuzhiyun+ bool is_opaque; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun output->base.compositor->renderer->repaint_output(&output->base, 31*4882a593Smuzhiyun damage); 32*4882a593Smuzhiyun@@ -305,8 +307,10 @@ drm_output_render_gl(struct drm_output_state *state, pixman_region32_t *damage) 33*4882a593Smuzhiyun return NULL; 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun- /* The renderer always produces an opaque image. */ 37*4882a593Smuzhiyun- ret = drm_fb_get_from_bo(bo, device, true, BUFFER_GBM_SURFACE); 38*4882a593Smuzhiyun+ format = pixel_format_get_info(output->gbm_format); 39*4882a593Smuzhiyun+ is_opaque = format && pixel_format_is_opaque(format); 40*4882a593Smuzhiyun+ 41*4882a593Smuzhiyun+ ret = drm_fb_get_from_bo(bo, device, is_opaque, BUFFER_GBM_SURFACE); 42*4882a593Smuzhiyun if (!ret) { 43*4882a593Smuzhiyun weston_log("failed to get drm_fb for bo\n"); 44*4882a593Smuzhiyun gbm_surface_release_buffer(output->gbm_surface, bo); 45*4882a593Smuzhiyundiff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c 46*4882a593Smuzhiyunindex 7760205..ed902e8 100644 47*4882a593Smuzhiyun--- a/libweston/backend-drm/drm.c 48*4882a593Smuzhiyun+++ b/libweston/backend-drm/drm.c 49*4882a593Smuzhiyun@@ -1618,6 +1618,9 @@ drm_output_init_pixman(struct drm_output *output, struct drm_backend *b) 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun switch (format) { 53*4882a593Smuzhiyun+ case DRM_FORMAT_ARGB8888: 54*4882a593Smuzhiyun+ pixman_format = PIXMAN_a8r8g8b8; 55*4882a593Smuzhiyun+ break; 56*4882a593Smuzhiyun case DRM_FORMAT_XRGB8888: 57*4882a593Smuzhiyun pixman_format = PIXMAN_x8r8g8b8; 58*4882a593Smuzhiyun break; 59*4882a593Smuzhiyun-- 60*4882a593Smuzhiyun2.20.1 61*4882a593Smuzhiyun 62