drm: reimport cursor fb on multigpu

This commit is contained in:
Vaxry 2024-07-08 21:22:56 +02:00
parent 157f067cf8
commit 3c118519e6

View file

@ -1325,6 +1325,8 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) {
if (connector->crtc->pendingCursor) if (connector->crtc->pendingCursor)
data.cursorFB = connector->crtc->pendingCursor; data.cursorFB = connector->crtc->pendingCursor;
else
data.cursorFB = connector->crtc->cursor->front;
if (data.cursorFB) { if (data.cursorFB) {
// verify cursor format. This might be wrong on NVIDIA where linear buffers // verify cursor format. This might be wrong on NVIDIA where linear buffers
@ -1369,7 +1371,8 @@ bool Aquamarine::CDRMOutput::setCursor(SP<IBuffer> buffer, const Vector2D& hotsp
setCursorVisible(false); setCursorVisible(false);
else { else {
cursorHotspot = hotspot; cursorHotspot = hotspot;
auto fb = CDRMFB::create(buffer, backend); bool isNew = false;
auto fb = CDRMFB::create(buffer, backend, &isNew);
if (!fb) { if (!fb) {
backend->backend->log(AQ_LOG_ERROR, "drm: Cursor buffer failed to import to KMS"); backend->backend->log(AQ_LOG_ERROR, "drm: Cursor buffer failed to import to KMS");
return false; return false;
@ -1380,6 +1383,13 @@ bool Aquamarine::CDRMOutput::setCursor(SP<IBuffer> buffer, const Vector2D& hotsp
connector->crtc->pendingCursor = fb; connector->crtc->pendingCursor = fb;
cursorVisible = true; cursorVisible = true;
if (!isNew && backend->primary) {
// this is not a new buffer, and we are not on a primary GPU, which means
// this buffer lives on the primary. We need to re-import it to update
// the contents that have possibly (probably) changed
fb->reimport();
}
} }
needsFrame = true; needsFrame = true;