From ee293fab58da190943426a6d23380dd04200a4ff Mon Sep 17 00:00:00 2001 From: emersion Date: Tue, 29 Jan 2019 12:04:12 +0100 Subject: backend/drm: fix GBM format mismatch We create the EGL config with GBM_FORMAT_ARGB8888, but then initialize GBM BOs with GBM_FORMAT_XRGB8888. This mismatch confuses Mesa. Instead, we can always use GBM_FORMAT_ARGB8888, and use DRM_FORMAT_XRGB8888 when calling drmModeAddFB2. Fixes https://github.com/swaywm/wlroots/issues/1438 --- include/backend/drm/drm.h | 2 ++ include/backend/drm/renderer.h | 2 ++ include/backend/drm/util.h | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) (limited to 'include/backend') diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h index de5212d3..37d9828f 100644 --- a/include/backend/drm/drm.h +++ b/include/backend/drm/drm.h @@ -26,6 +26,8 @@ struct wlr_drm_plane { struct wlr_drm_surface surf; struct wlr_drm_surface mgpu_surf; + uint32_t drm_format; // ARGB8888 or XRGB8888 + // Only used by cursor float matrix[9]; struct gbm_bo *cursor_bo; diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 575758de..25b07b97 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -16,6 +16,8 @@ struct wlr_drm_renderer { struct gbm_device *gbm; struct wlr_egl egl; + uint32_t gbm_format; + struct wlr_renderer *wlr_rend; }; diff --git a/include/backend/drm/util.h b/include/backend/drm/util.h index e159d716..2491e703 100644 --- a/include/backend/drm/util.h +++ b/include/backend/drm/util.h @@ -14,7 +14,7 @@ void parse_edid(struct wlr_output *restrict output, size_t len, // Returns the string representation of a DRM output type const char *conn_get_name(uint32_t type_id); // Returns the DRM framebuffer id for a gbm_bo -uint32_t get_fb_for_bo(struct gbm_bo *bo); +uint32_t get_fb_for_bo(struct gbm_bo *bo, uint32_t drm_format); // Part of match_obj enum { -- cgit v1.2.3