aboutsummaryrefslogtreecommitdiff
path: root/include/backend
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2019-01-29 12:04:12 +0100
committeremersion <contact@emersion.fr>2019-01-29 12:04:12 +0100
commitee293fab58da190943426a6d23380dd04200a4ff (patch)
treeac97a35fcc72b791dd4ed63ff55fcc2f375d3f88 /include/backend
parent018727b1fc41dcd739ab464c84581c44dd1497ca (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.h2
-rw-r--r--include/backend/drm/renderer.h2
-rw-r--r--include/backend/drm/util.h2
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 {