diff --git a/src/backends/drm/egl_gbm_backend.cpp b/src/backends/drm/egl_gbm_backend.cpp index 895e7b5a10..c159281ad2 100644 --- a/src/backends/drm/egl_gbm_backend.cpp +++ b/src/backends/drm/egl_gbm_backend.cpp @@ -155,7 +155,6 @@ bool EglGbmBackend::resetOutput(Output &output) qCCritical(KWIN_DRM) << "Could not find a suitable format for output" << output.output; return false; } - output.current.format = gbmFormat.value(); uint32_t format = gbmFormat.value().drmFormat; QVector modifiers = output.output->supportedModifiers(format); const QSize size = output.output->bufferSize(); @@ -193,6 +192,7 @@ bool EglGbmBackend::resetOutput(Output &output) cleanupRenderData(output.old); output.old = output.current; output.current = {}; + output.current.format = gbmFormat.value(); output.current.gbmSurface = gbmSurface; if (!output.output->needsSoftwareTransformation()) { @@ -349,6 +349,7 @@ QSharedPointer EglGbmBackend::importFramebuffer(Output &output, const qCWarning(KWIN_DRM) << "all imports failed on output" << output.output; // try again with XRGB8888, the most universally supported basic format output.forceXrgb8888 = true; + renderingBackend()->setForceXrgb8888(output.output); return nullptr; } @@ -862,6 +863,11 @@ bool EglGbmBackend::prefer10bpc() const return !ok || preferred == 30; } +void EglGbmBackend::setForceXrgb8888(DrmAbstractOutput *output) { + auto &o = m_outputs[output]; + o.forceXrgb8888 = true; +} + bool operator==(const GbmFormat &lhs, const GbmFormat &rhs) { return lhs.drmFormat == rhs.drmFormat; diff --git a/src/backends/drm/egl_gbm_backend.h b/src/backends/drm/egl_gbm_backend.h index f24b57ef10..5b4773e861 100644 --- a/src/backends/drm/egl_gbm_backend.h +++ b/src/backends/drm/egl_gbm_backend.h @@ -141,6 +141,8 @@ private: static EglGbmBackend *renderingBackend(); + void setForceXrgb8888(DrmAbstractOutput *output); + friend class EglGbmTexture; };