aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/drm/util.c')
-rw-r--r--backend/drm/util.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/backend/drm/util.c b/backend/drm/util.c
index 2fa948f5..263f5a92 100644
--- a/backend/drm/util.c
+++ b/backend/drm/util.c
@@ -178,7 +178,8 @@ static void free_fb(struct gbm_bo *bo, void *data) {
}
}
-uint32_t get_fb_for_bo(struct gbm_bo *bo, uint32_t drm_format) {
+uint32_t get_fb_for_bo(struct gbm_bo *bo, uint32_t drm_format,
+ bool with_modifiers) {
uint32_t id = (uintptr_t)gbm_bo_get_user_data(bo);
if (id) {
return id;
@@ -192,11 +193,18 @@ uint32_t get_fb_for_bo(struct gbm_bo *bo, uint32_t drm_format) {
uint32_t handles[4] = {gbm_bo_get_handle(bo).u32};
uint32_t strides[4] = {gbm_bo_get_stride(bo)};
uint32_t offsets[4] = {gbm_bo_get_offset(bo, 0)};
- uint64_t modifiers[4] = {gbm_bo_get_modifier(bo)};
- if (drmModeAddFB2WithModifiers(fd, width, height, drm_format,
- handles, strides, offsets, modifiers, &id, DRM_MODE_FB_MODIFIERS)) {
- wlr_log_errno(WLR_ERROR, "Unable to add DRM framebuffer");
+ if (with_modifiers && gbm_bo_get_modifier(bo) != DRM_FORMAT_MOD_INVALID) {
+ uint64_t modifiers[4] = {gbm_bo_get_modifier(bo)};
+ if (drmModeAddFB2WithModifiers(fd, width, height, drm_format, handles,
+ strides, offsets, modifiers, &id, DRM_MODE_FB_MODIFIERS)) {
+ wlr_log_errno(WLR_ERROR, "Unable to add DRM framebuffer");
+ }
+ } else {
+ if (drmModeAddFB2(fd, width, height, drm_format, handles, strides,
+ offsets, &id, 0)) {
+ wlr_log_errno(WLR_ERROR, "Unable to add DRM framebuffer");
+ }
}
gbm_bo_set_user_data(bo, (void *)(uintptr_t)id, free_fb);