diff options
author | emersion <contact@emersion.fr> | 2019-01-29 12:04:12 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-01-29 12:04:12 +0100 |
commit | ee293fab58da190943426a6d23380dd04200a4ff (patch) | |
tree | ac97a35fcc72b791dd4ed63ff55fcc2f375d3f88 /include/backend | |
parent | 018727b1fc41dcd739ab464c84581c44dd1497ca (diff) |
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
Diffstat (limited to 'include/backend')
-rw-r--r-- | include/backend/drm/drm.h | 2 | ||||
-rw-r--r-- | include/backend/drm/renderer.h | 2 | ||||
-rw-r--r-- | include/backend/drm/util.h | 2 |
3 files changed, 5 insertions, 1 deletions
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 { |