backends/drm: remove m_current

It's not needed and just adds overhead
master
Xaver Hugl 11 months ago
parent ff2bc0798f
commit ba3a70e8a8

@ -94,7 +94,7 @@ DrmPipeline::Error DrmPipeline::present()
if (m_pending.needsModesetProperties && !prepareAtomicModeset(primaryPlaneUpdate.get())) { if (m_pending.needsModesetProperties && !prepareAtomicModeset(primaryPlaneUpdate.get())) {
return Error::InvalidArguments; return Error::InvalidArguments;
} }
atomicCommitSuccessful(); m_next.needsModesetProperties = m_pending.needsModesetProperties = false;
m_commitThread->addCommit(std::move(primaryPlaneUpdate)); m_commitThread->addCommit(std::move(primaryPlaneUpdate));
return Error::None; return Error::None;
} else { } else {
@ -168,7 +168,9 @@ DrmPipeline::Error DrmPipeline::commitPipelinesAtomic(const QList<DrmPipeline *>
qCCritical(KWIN_DRM) << "Atomic modeset commit failed!" << strerror(errno); qCCritical(KWIN_DRM) << "Atomic modeset commit failed!" << strerror(errno);
return errnoToError(); return errnoToError();
} }
std::for_each(pipelines.begin(), pipelines.end(), std::mem_fn(&DrmPipeline::atomicCommitSuccessful)); for (const auto pipeline : pipelines) {
pipeline->m_next.needsModeset = pipeline->m_pending.needsModeset = false;
}
commit->pageFlipped(std::chrono::steady_clock::now().time_since_epoch()); commit->pageFlipped(std::chrono::steady_clock::now().time_since_epoch());
return Error::None; return Error::None;
} }
@ -375,23 +377,13 @@ DrmPipeline::Error DrmPipeline::errnoToError()
} }
} }
void DrmPipeline::atomicCommitSuccessful()
{
m_pending.needsModeset = false;
m_pending.needsModesetProperties = false;
m_current = m_pending;
}
bool DrmPipeline::updateCursor() bool DrmPipeline::updateCursor()
{ {
if (!m_pending.crtc) { if (needsModeset() || !m_pending.crtc || !m_pending.active) {
return false; return false;
} }
// explicitly check for the cursor plane and not for AMS, as we might not always have one // explicitly check for the cursor plane and not for AMS, as we might not always have one
if (m_pending.crtc->cursorPlane()) { if (m_pending.crtc->cursorPlane()) {
if (needsModeset() || !m_current.active) {
return false;
}
// test the full state, to take pending commits into account // test the full state, to take pending commits into account
auto fullState = std::make_unique<DrmAtomicCommit>(QList<DrmPipeline *>{this}); auto fullState = std::make_unique<DrmAtomicCommit>(QList<DrmPipeline *>{this});
if (prepareAtomicPresentation(fullState.get()) != Error::None) { if (prepareAtomicPresentation(fullState.get()) != Error::None) {
@ -510,11 +502,6 @@ void DrmPipeline::resetModesetPresentPending()
m_modesetPresentPending = false; m_modesetPresentPending = false;
} }
DrmCrtc *DrmPipeline::currentCrtc() const
{
return m_current.crtc;
}
DrmGammaRamp::DrmGammaRamp(DrmCrtc *crtc, const std::shared_ptr<ColorTransformation> &transformation) DrmGammaRamp::DrmGammaRamp(DrmCrtc *crtc, const std::shared_ptr<ColorTransformation> &transformation)
: m_lut(transformation, crtc->gammaRampSize()) : m_lut(transformation, crtc->gammaRampSize())
{ {

@ -81,7 +81,6 @@ public:
bool updateCursor(); bool updateCursor();
DrmConnector *connector() const; DrmConnector *connector() const;
DrmCrtc *currentCrtc() const;
DrmGpu *gpu() const; DrmGpu *gpu() const;
enum class PageflipType { enum class PageflipType {
@ -156,7 +155,6 @@ private:
static Error commitPipelinesLegacy(const QList<DrmPipeline *> &pipelines, CommitMode mode); static Error commitPipelinesLegacy(const QList<DrmPipeline *> &pipelines, CommitMode mode);
// atomic modesetting only // atomic modesetting only
void atomicCommitSuccessful();
Error prepareAtomicCommit(DrmAtomicCommit *commit, CommitMode mode); Error prepareAtomicCommit(DrmAtomicCommit *commit, CommitMode mode);
bool prepareAtomicModeset(DrmAtomicCommit *commit); bool prepareAtomicModeset(DrmAtomicCommit *commit);
Error prepareAtomicPresentation(DrmAtomicCommit *commit); Error prepareAtomicPresentation(DrmAtomicCommit *commit);
@ -200,8 +198,6 @@ private:
State m_pending; State m_pending;
// the state that will be applied at the next real atomic commit // the state that will be applied at the next real atomic commit
State m_next; State m_next;
// the state that is already committed
State m_current;
std::unique_ptr<DrmCommitThread> m_commitThread; std::unique_ptr<DrmCommitThread> m_commitThread;
std::shared_ptr<DrmPipelineLayer> m_primaryLayer; std::shared_ptr<DrmPipelineLayer> m_primaryLayer;

@ -83,7 +83,6 @@ DrmPipeline::Error DrmPipeline::commitPipelinesLegacy(const QList<DrmPipeline *>
} else { } else {
for (const auto &pipeline : pipelines) { for (const auto &pipeline : pipelines) {
pipeline->applyPendingChanges(); pipeline->applyPendingChanges();
pipeline->m_current = pipeline->m_pending;
if (mode == CommitMode::CommitModeset && pipeline->activePending()) { if (mode == CommitMode::CommitModeset && pipeline->activePending()) {
pipeline->pageFlipped(std::chrono::steady_clock::now().time_since_epoch(), PageflipType::Normal); pipeline->pageFlipped(std::chrono::steady_clock::now().time_since_epoch(), PageflipType::Normal);
} }
@ -117,7 +116,7 @@ DrmPipeline::Error DrmPipeline::applyPendingChangesLegacy()
if (m_connector->scalingMode.isValid() && m_connector->scalingMode.hasEnum(DrmConnector::ScalingMode::None)) { if (m_connector->scalingMode.isValid() && m_connector->scalingMode.hasEnum(DrmConnector::ScalingMode::None)) {
m_connector->scalingMode.setEnumLegacy(DrmConnector::ScalingMode::None); m_connector->scalingMode.setEnumLegacy(DrmConnector::ScalingMode::None);
} }
if (m_pending.crtc != m_current.crtc || m_pending.mode != m_current.mode) { if (m_pending.crtc != m_next.crtc || m_pending.mode != m_next.mode) {
Error err = legacyModeset(); Error err = legacyModeset();
if (err != Error::None) { if (err != Error::None) {
return err; return err;

Loading…
Cancel
Save