<table><tr><td style="">bshah added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D24112">View Revision</a></tr></table><br /><div><div><p>Also one of my initial suspicion was that we are not setting transformation wl_output in case commit fails:</p>
<p>So I tried following but it didn't make any difference.</p>
<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="diff" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);"><span style="color: #000080">diff --git a/plugins/platforms/drm/drm_output.cpp b/plugins/platforms/drm/drm_output.cpp</span>
<span style="color: #000080">index bfc9d4026..3e5afb9a6 100644</span>
<span style="color: #a00000">--- a/plugins/platforms/drm/drm_output.cpp</span>
<span style="color: #00a000">+++ b/plugins/platforms/drm/drm_output.cpp</span>
<span style="color: #800080">@@ -849,6 +849,8 @@ bool DrmOutput::presentAtomically(DrmBuffer *buffer)</span>
m_primaryPlane->setNext(buffer);
m_nextPlanesFlipList << m_primaryPlane;
<span style="color: #00a000">+ </span>
<span style="color: #00a000">+ auto wlOutput = waylandOutput();</span>
if (!doAtomicCommit(AtomicCommitMode::Test)) {
//TODO: When we use planes for layered rendering, fallback to renderer instead. Also for direct scanout?
<span style="color: #800080">@@ -862,6 +864,9 @@ bool DrmOutput::presentAtomically(DrmBuffer *buffer)</span>
if (m_primaryPlane) {
m_primaryPlane->setTransformation(m_lastWorkingState.planeTransformations);
}
<span style="color: #00a000">+ if (wlOutput) {</span>
<span style="color: #00a000">+ wlOutput->setTransform(m_lastWorkingState.outputTransformation);</span>
<span style="color: #00a000">+ }</span>
m_modesetRequested = true;
// the cursor might need to get rotated
updateCursor();
<span style="color: #800080">@@ -886,6 +891,9 @@ bool DrmOutput::presentAtomically(DrmBuffer *buffer)</span>
if (m_primaryPlane) {
m_lastWorkingState.planeTransformations = m_primaryPlane->transformation();
}
<span style="color: #00a000">+ if (wlOutput) {</span>
<span style="color: #00a000">+ m_lastWorkingState.outputTransformation = wlOutput->transform();</span>
<span style="color: #00a000">+ }</span>
m_lastWorkingState.valid = true;
}
m_pageFlipPending = true;
<span style="color: #000080">diff --git a/plugins/platforms/drm/drm_output.h b/plugins/platforms/drm/drm_output.h</span>
<span style="color: #000080">index a8ec22e54..62b6aa58b 100644</span>
<span style="color: #a00000">--- a/plugins/platforms/drm/drm_output.h</span>
<span style="color: #00a000">+++ b/plugins/platforms/drm/drm_output.h</span>
<span style="color: #800080">@@ -153,6 +153,7 @@ private:</span>
Qt::ScreenOrientation orientation;
drmModeModeInfo mode;
DrmPlane::Transformations planeTransformations;
<span style="color: #00a000">+ KWayland::Server::OutputInterface::Transform outputTransformation;</span>
QPoint globalPos;
bool valid = false;
} m_lastWorkingState;</pre></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R108 KWin</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D24112">https://phabricator.kde.org/D24112</a></div></div><br /><div><strong>To: </strong>romangg, KWin<br /><strong>Cc: </strong>bshah, zzag, apol, kwin, LeGast00n, The-Feren-OS-Dev, sbergeron, jraleigh, fbampaloukas, GB_2, mkulinski, ragreen, jackyalcine, iodelay, crozbo, bwowk, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, hardening, romangg, jensreuterberg, abetts, sebas, mart<br /></div>