aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/drm/backend.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/backend/drm/backend.c b/backend/drm/backend.c
index b9e7274b..267bbfb2 100644
--- a/backend/drm/backend.c
+++ b/backend/drm/backend.c
@@ -275,15 +275,17 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display,
goto error_mgpu_renderer;
}
- // Force a linear layout. In case explicit modifiers aren't supported,
- // the meaning of implicit modifiers changes from one GPU to the other.
- // In case explicit modifiers are supported, we still have no guarantee
- // that the buffer producer will support these, so they might fallback
- // to implicit modifiers.
+ // Forbid implicit modifiers, because their meaning changes from one
+ // GPU to another.
for (size_t i = 0; i < texture_formats->len; i++) {
const struct wlr_drm_format *fmt = texture_formats->formats[i];
- wlr_drm_format_set_add(&drm->mgpu_formats, fmt->format,
- DRM_FORMAT_MOD_LINEAR);
+ for (size_t j = 0; j < fmt->len; j++) {
+ uint64_t mod = fmt->modifiers[j];
+ if (mod == DRM_FORMAT_MOD_INVALID) {
+ continue;
+ }
+ wlr_drm_format_set_add(&drm->mgpu_formats, fmt->format, mod);
+ }
}
}