From a15c327718dafb1b7b7f1213c8878187b6351dba Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 3 Nov 2021 16:44:42 +0100 Subject: [PATCH] backend/drm: use drmModeFormatModifierBlobIterNext This avoids open-coding our own logic. The resulting code is more readable. References: https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/146 --- backend/drm/drm.c | 14 +++----------- meson.build | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 1a46b495..43de54e5 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -142,17 +142,9 @@ static bool add_plane(struct wlr_drm_backend *drm, goto error; } - struct drm_format_modifier_blob *data = blob->data; - uint32_t *fmts = (uint32_t *)((char *)data + data->formats_offset); - struct drm_format_modifier *mods = (struct drm_format_modifier *) - ((char *)data + data->modifiers_offset); - for (uint32_t i = 0; i < data->count_modifiers; ++i) { - for (int j = 0; j < 64; ++j) { - if (mods[i].formats & ((uint64_t)1 << j)) { - wlr_drm_format_set_add(&p->formats, - fmts[j + mods[i].offset], mods[i].modifier); - } - } + drmModeFormatModifierIterator iter = {0}; + while (drmModeFormatModifierBlobIterNext(blob, &iter)) { + wlr_drm_format_set_add(&p->formats, iter.fmt, iter.mod); } drmModeFreePropertyBlob(blob); diff --git a/meson.build b/meson.build index a84f3df7..bdb6df19 100644 --- a/meson.build +++ b/meson.build @@ -104,7 +104,7 @@ wayland_server = dependency('wayland-server', default_options: wayland_project_options, ) -drm = dependency('libdrm', version: '>=2.4.105') +drm = dependency('libdrm', version: '>=2.4.108') gbm = dependency('gbm', version: '>=17.1.0') xkbcommon = dependency('xkbcommon') udev = dependency('libudev')