renderer: allow tearing with DS with invisible cursors (#13155)

This commit is contained in:
UjinT34 2026-02-07 15:38:01 +03:00 committed by GitHub
parent cfbbfb591a
commit 9f9dbb0dc5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 27 additions and 22 deletions

View file

@ -1724,6 +1724,10 @@ uint8_t CMonitor::isTearingBlocked(bool full) {
}
}
// TODO: remove this when kernel allows tearing + hw cursor updated
if (g_pPointerManager->hasVisibleHWCursor(m_self.lock()))
reasons |= TC_HW_CURSOR;
if (m_solitaryClient.expired()) {
reasons |= TC_CANDIDATE;
return reasons;
@ -1765,12 +1769,6 @@ uint16_t CMonitor::isDSBlocked(bool full) {
}
}
if (m_tearingState.activelyTearing) {
reasons |= DS_BLOCK_TEARING;
if (!full)
return reasons;
}
if (!m_mirrors.empty() || isMirror()) {
reasons |= DS_BLOCK_MIRROR;
if (!full)
@ -1862,7 +1860,7 @@ bool CMonitor::attemptDirectScanout() {
}
//#TODO this entire bit is bootleg deluxe, above bit is to not make vrr go down the drain, returning early here means fifo gets forever locked.
if (PSURFACE->m_fifo && *PSAMEFIFO)
if (PSURFACE->m_fifo && !m_tearingState.activelyTearing && *PSAMEFIFO)
PSURFACE->m_stateQueue.unlockFirst(LOCK_REASON_FIFO);
return true;