diff options
Diffstat (limited to 'drm/DrmAtomicStateManager.cpp')
-rw-r--r-- | drm/DrmAtomicStateManager.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drm/DrmAtomicStateManager.cpp b/drm/DrmAtomicStateManager.cpp index 4ff16e2..b1f8257 100644 --- a/drm/DrmAtomicStateManager.cpp +++ b/drm/DrmAtomicStateManager.cpp @@ -79,8 +79,26 @@ auto DrmAtomicStateManager::CommitFrame(AtomicCommitArgs &args) -> int { } int out_fence = -1; - if (!crtc->GetOutFencePtrProperty().AtomicSet(*pset, uint64_t(&out_fence))) { - return -EINVAL; + if (!args.writeback_fb) { + if (!crtc->GetOutFencePtrProperty(). // + AtomicSet(*pset, uint64_t(&out_fence))) { + return -EINVAL; + } + } else { + if (!connector->GetWritebackOutFenceProperty(). // + AtomicSet(*pset, uint64_t(&out_fence))) { + return -EINVAL; + } + + if (!connector->GetWritebackFbIdProperty(). // + AtomicSet(*pset, args.writeback_fb->GetFbId())) { + return -EINVAL; + } + + if (args.writeback_release_fence) { + sync_wait(*args.writeback_release_fence, -1); + args.writeback_release_fence.reset(); + } } bool nonblock = true; |