Hey Sean, On Wed, 2017-09-27 at 14:55 -0400, Sean Paul wrote: > On Wed, Sep 27, 2017 at 7:58 AM, Robert Foss <robert.foss@collabora.c > om> wrote: > > Add support for in-fences through the IN_FENCE_FD property. In- > > fences signal > > when their associated buffer may be read by DRM/KMS. > > > > Signed-off-by: Robert Foss <robert.foss@xxxxxxxxxxxxx> > > --- > > drmdisplaycompositor.cpp | 35 ++++++++++++++++------------------- > > 1 file changed, 16 insertions(+), 19 deletions(-) > > > > diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp > > index bd670cf..71c0451 100644 > > --- a/drmdisplaycompositor.cpp > > +++ b/drmdisplaycompositor.cpp > > @@ -529,6 +529,7 @@ int > > DrmDisplayCompositor::CommitFrame(DrmDisplayComposition > > *display_comp, > > std::vector<size_t> &source_layers = > > comp_plane.source_layers(); > > > > int fb_id = -1; > > + int fence_fd = -1; > > DrmHwcRect<int> display_frame; > > DrmHwcRect<float> source_crop; > > uint64_t rotation = 0; > > @@ -547,30 +548,12 @@ int > > DrmDisplayCompositor::CommitFrame(DrmDisplayComposition > > *display_comp, > > break; > > } > > DrmHwcLayer &layer = layers[source_layers.front()]; > > - if (!test_only && layer.acquire_fence.get() >= 0) { > > - int acquire_fence = layer.acquire_fence.get(); > > - int total_fence_timeout = 0; > > - for (int i = 0; i < kAcquireWaitTries; ++i) { > > - int fence_timeout = kAcquireWaitTimeoutMs * (1 << i); > > - total_fence_timeout += fence_timeout; > > - ret = sync_wait(acquire_fence, fence_timeout); > > - if (ret) > > - ALOGW("Acquire fence %d wait %d failed (%d). Total > > time %d", > > - acquire_fence, i, ret, total_fence_timeout); > > - else > > - break; > > - } > > - if (ret) { > > - ALOGE("Failed to wait for acquire %d/%d", acquire_fence, > > ret); > > - break; > > - } > > - layer.acquire_fence.Close(); > > - } > > if (!layer.buffer) { > > ALOGE("Expected a valid framebuffer for pset"); > > break; > > } > > fb_id = layer.buffer->fb_id; > > + fence_fd = layer.acquire_fence.get(); > > display_frame = layer.display_frame; > > source_crop = layer.source_crop; > > if (layer.blending == DrmHwcBlending::kPreMult) > > @@ -587,7 +570,21 @@ int > > DrmDisplayCompositor::CommitFrame(DrmDisplayComposition > > *display_comp, > > rotation |= 1 << DRM_ROTATE_180; > > else if (layer.transform & DrmHwcTransform::kRotate270) > > rotation |= 1 << DRM_ROTATE_270; > > + > > + if (fence_fd != -1) { > > nit: if (fence_fd < 0) > > With that fixed: > > Reviewed-by: Sean Paul <seanpaul@xxxxxxxxxxxx> Ack. Submitting a fix in v3 tomorrow. > > > + int prop_id = plane->in_fence_fd_property().id(); > > + if (prop_id == 0) { > > + ALOGE("Failed to get IN_FENCE_FD property id"); > > + break; > > + } > > + ret = drmModeAtomicAddProperty(pset, plane->id(), prop_id, > > fence_fd); > > + if (ret < 0) { > > + ALOGE("Failed to add IN_FENCE_FD property to pset: %d", > > ret); > > + break; > > + } > > + } > > } > > + > > // Disable the plane if there's no framebuffer > > if (fb_id < 0) { > > ret = drmModeAtomicAddProperty(pset, plane->id(), > > -- > > 2.11.0 > > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel