From a15c327718dafb1b7b7f1213c8878187b6351dba Mon Sep 17 00:00:00 2001
From: Simon Ser <contact@emersion.fr>
Date: Wed, 3 Nov 2021 16:44:42 +0100
Subject: 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 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

(limited to 'backend/drm')

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);
-- 
cgit v1.2.3