diff --git a/src/backends/drm/drm_pipeline.h b/src/backends/drm/drm_pipeline.h index e024a36002..9ede68c249 100644 --- a/src/backends/drm/drm_pipeline.h +++ b/src/backends/drm/drm_pipeline.h @@ -151,6 +151,7 @@ private: // legacy only Error presentLegacy(); Error legacyModeset(); + Error setLegacyGamma(); Error applyPendingChangesLegacy(); bool setCursorLegacy(); static Error commitPipelinesLegacy(const QList &pipelines, CommitMode mode, const QList &unusedObjects); diff --git a/src/backends/drm/drm_pipeline_legacy.cpp b/src/backends/drm/drm_pipeline_legacy.cpp index 1415c02828..80a1afa7e3 100644 --- a/src/backends/drm/drm_pipeline_legacy.cpp +++ b/src/backends/drm/drm_pipeline_legacy.cpp @@ -42,6 +42,7 @@ DrmPipeline::Error DrmPipeline::presentLegacy() void DrmPipeline::forceLegacyModeset() { legacyModeset(); + setLegacyGamma(); } DrmPipeline::Error DrmPipeline::legacyModeset() @@ -132,12 +133,10 @@ DrmPipeline::Error DrmPipeline::applyPendingChangesLegacy() return err; } } - if (m_pending.gamma && m_currentLegacyGamma != m_pending.gamma) { - if (drmModeCrtcSetGamma(gpu()->fd(), m_pending.crtc->id(), m_pending.gamma->lut().size(), m_pending.gamma->lut().red(), m_pending.gamma->lut().green(), m_pending.gamma->lut().blue()) != 0) { - qCWarning(KWIN_DRM) << "Setting gamma failed!" << strerror(errno); - return errnoToError(); + if (m_pending.gamma != m_currentLegacyGamma) { + if (Error err = setLegacyGamma(); err != Error::None) { + return err; } - m_currentLegacyGamma = m_pending.gamma; } if (m_connector->contentType.isValid()) { m_connector->contentType.setEnumLegacy(m_pending.contentType); @@ -151,6 +150,18 @@ DrmPipeline::Error DrmPipeline::applyPendingChangesLegacy() return Error::None; } +DrmPipeline::Error DrmPipeline::setLegacyGamma() +{ + if (m_pending.gamma) { + if (drmModeCrtcSetGamma(gpu()->fd(), m_pending.crtc->id(), m_pending.gamma->lut().size(), m_pending.gamma->lut().red(), m_pending.gamma->lut().green(), m_pending.gamma->lut().blue()) != 0) { + qCWarning(KWIN_DRM) << "Setting gamma failed!" << strerror(errno); + return errnoToError(); + } + m_currentLegacyGamma = m_pending.gamma; + } + return DrmPipeline::Error::None; +} + bool DrmPipeline::setCursorLegacy() { const auto bo = cursorLayer()->currentBuffer();