On Wed, Sep 27, 2017 at 1:55 PM, Sean Paul <seanpaul@xxxxxxxxxxxx> wrote: > 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) Your nit is a bug. :) We're checking for if a valid fd. I think this may be John's issue with needing a glFinish(). A fix is coming. Rob _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel