aboutsummaryrefslogtreecommitdiff
path: root/drm/DrmAtomicStateManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drm/DrmAtomicStateManager.cpp')
-rw-r--r--drm/DrmAtomicStateManager.cpp22
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;