From d0a9e907164dc4a9174047a13cb9ddd6878b1fd4 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Sat, 4 Nov 2023 15:11:40 +0100 Subject: [PATCH] platformsupport/scenes/opengl: fix format filtering We support formats that are neither 10 nor 8 bits per color, so the filtering needs to reflect that --- .../scenes/opengl/abstract_egl_backend.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp b/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp index 55b963347a..a244de9c70 100644 --- a/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp +++ b/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp @@ -149,14 +149,21 @@ void AbstractEglBackend::initWayland() } } - auto filterFormats = [this](uint32_t bpc) { + auto filterFormats = [this](std::optional bpc) { const auto formats = m_display->supportedDrmFormats(); QHash> set; for (auto it = formats.constBegin(); it != formats.constEnd(); it++) { const auto info = formatInfo(it.key()); - if (info && info->bitsPerColor == bpc) { - set.insert(it.key(), it.value()); + if (!info || (bpc && bpc != info->bitsPerColor)) { + continue; } + const bool duplicate = std::any_of(m_tranches.begin(), m_tranches.end(), [fmt = it.key()](const auto &tranche) { + return tranche.formatTable.contains(fmt); + }); + if (duplicate) { + continue; + } + set.insert(it.key(), it.value()); } return set; }; @@ -175,7 +182,7 @@ void AbstractEglBackend::initWayland() m_tranches.append({ .device = deviceId(), .flags = {}, - .formatTable = filterFormats(-1), + .formatTable = filterFormats(std::nullopt), }); LinuxDmaBufV1ClientBufferIntegration *dmabuf = waylandServer()->linuxDmabuf();