On Wed, Sep 27, 2017 at 7:58 AM, Robert Foss <robert.foss@xxxxxxxxxxxxx> 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> > + 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