mirror of
https://github.com/hyprwm/aquamarine.git
synced 2024-12-22 20:39:49 +01:00
drm: reimport cursor fb on multigpu
This commit is contained in:
parent
157f067cf8
commit
3c118519e6
1 changed files with 11 additions and 1 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue