Re: [PATCH hwc v2 3/6] drm_hwcomposer: Submit in-fence to DRM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux