backends/drm: don't set gamma with legacy unless really necessary

It seems to have a pretty large performance impact
wilder/Plasma/6.2
Xaver Hugl 2 years ago
parent 568f9fb666
commit d1bc39a6ea
  1. 1
      src/backends/drm/drm_pipeline.h
  2. 9
      src/backends/drm/drm_pipeline_legacy.cpp

@ -168,6 +168,7 @@ private:
bool m_modesetPresentPending = false;
bool m_didLegacyScanoutHack = false;
std::shared_ptr<DrmGammaRamp> m_currentLegacyGamma;
struct State
{

@ -132,9 +132,12 @@ DrmPipeline::Error DrmPipeline::applyPendingChangesLegacy()
return err;
}
}
if (m_pending.gamma && 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 != 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;
}
if (m_connector->contentType.isValid()) {
m_connector->contentType.setEnumLegacy(m_pending.contentType);

Loading…
Cancel
Save