From ae4dd73e996574f6b9c4ef2c98ff77272ffc4fba Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Sat, 1 Oct 2022 23:46:34 +0200 Subject: [PATCH] backends/drm: use linear buffers for multi gpu where necessary --- src/backends/drm/drm_egl_layer_surface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backends/drm/drm_egl_layer_surface.cpp b/src/backends/drm/drm_egl_layer_surface.cpp index dd143c299b..ceb101fbf4 100644 --- a/src/backends/drm/drm_egl_layer_surface.cpp +++ b/src/backends/drm/drm_egl_layer_surface.cpp @@ -32,6 +32,8 @@ namespace KWin { +static const QVector linearModifier = {DRM_FORMAT_MOD_LINEAR}; + EglGbmLayerSurface::EglGbmLayerSurface(DrmGpu *gpu, EglGbmBackend *eglBackend) : m_gpu(gpu) , m_eglBackend(eglBackend) @@ -149,6 +151,7 @@ std::optional, QRegion>> EglGbmLayerS bool EglGbmLayerSurface::checkGbmSurface(const QSize &bufferSize, const QMap> &formats, bool forceLinear) { + forceLinear |= m_importMode == MultiGpuImportMode::DumbBuffer || m_importMode == MultiGpuImportMode::DumbBufferXrgb8888; if (doesGbmSurfaceFit(m_gbmSurface.get(), bufferSize, formats)) { m_oldGbmSurface.reset(); } else { @@ -181,7 +184,7 @@ bool EglGbmLayerSurface::createGbmSurface(const QSize &size, uint32_t format, co } if (allowModifiers) { - const auto ret = GbmSurface::createSurface(m_eglBackend, size, format, modifiers, config); + const auto ret = GbmSurface::createSurface(m_eglBackend, size, format, forceLinear ? linearModifier : modifiers, config); if (const auto surface = std::get_if>(&ret)) { m_oldGbmSurface = m_gbmSurface; m_gbmSurface = *surface;