backend/drm: don't clear pending cursor FB on failed commit
The previous fix tried to side-step cursor->pending_fb completely. However that messes up our buffer locking mechanism. Instead, stop clearing the pending cursor FB on a failed commit. The pending cursor FB will remain for the next commit. Fixes:6c3d080e25
("backend/drm: populate cursor plane's current_fb") (cherry picked from commit4dee7a2f6f
)
This commit is contained in:
parent
b213d2b81f
commit
1100f3a40b
|
@ -355,9 +355,12 @@ static bool drm_crtc_commit(struct wlr_drm_connector *conn,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
drm_fb_clear(&crtc->primary->pending_fb);
|
drm_fb_clear(&crtc->primary->pending_fb);
|
||||||
if (crtc->cursor != NULL) {
|
// The set_cursor() hook is a bit special: it's not really synchronized
|
||||||
drm_fb_clear(&crtc->cursor->pending_fb);
|
// to commit() or test(). Once set_cursor() returns true, the new
|
||||||
}
|
// cursor is effectively committed. So don't roll it back here, or we
|
||||||
|
// risk ending up in a state where we don't have a cursor FB but
|
||||||
|
// wlr_drm_connector.cursor_enabled is true.
|
||||||
|
// TODO: fix our output interface to avoid this issue.
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue