From 1583b2c717100dad87c95e1b9db607550ec5af33 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Tue, 6 Feb 2024 14:21:23 +0100 Subject: [PATCH] backends/drm: fix EglGbmLayerSurface::doesSurfaceFit with multi gpu CCBUG: 478921 --- src/backends/drm/drm_egl_layer_surface.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/backends/drm/drm_egl_layer_surface.cpp b/src/backends/drm/drm_egl_layer_surface.cpp index 6cae292c23..c70d31b4fc 100644 --- a/src/backends/drm/drm_egl_layer_surface.cpp +++ b/src/backends/drm/drm_egl_layer_surface.cpp @@ -284,14 +284,24 @@ bool EglGbmLayerSurface::checkSurface(const QSize &size, const QMap> &formats) const { - if (!surface) { + if (!surface || !surface->gbmSwapchain || surface->gbmSwapchain->size() != size) { return false; } - const auto &swapchain = surface->gbmSwapchain; - return swapchain - && swapchain->size() == size - && formats.contains(swapchain->format()) - && (surface->forceLinear || swapchain->modifier() == DRM_FORMAT_MOD_INVALID || formats[swapchain->format()].contains(swapchain->modifier())); + switch (surface->importMode) { + case MultiGpuImportMode::None: + case MultiGpuImportMode::Dmabuf: + case MultiGpuImportMode::LinearDmabuf: { + const auto format = surface->gbmSwapchain->format(); + return formats.contains(format) && (surface->gbmSwapchain->modifier() == DRM_FORMAT_MOD_INVALID || formats[format].contains(surface->gbmSwapchain->modifier())); + } + case MultiGpuImportMode::DumbBuffer: + return formats.contains(surface->importDumbSwapchain->format()); + case MultiGpuImportMode::Egl: { + const auto format = surface->importGbmSwapchain->format(); + return formats.contains(format) && (surface->importGbmSwapchain->modifier() == DRM_FORMAT_MOD_INVALID || formats[format].contains(surface->importGbmSwapchain->modifier())); + } + } + Q_UNREACHABLE(); } std::unique_ptr EglGbmLayerSurface::createSurface(const QSize &size, const QMap> &formats) const