[Mesa-dev] [PATCH v3 08/22] egl/tizen: add support of dri2_loader (v2)

Emil Velikov emil.l.velikov at gmail.com
Wed Oct 4 18:47:41 UTC 2017


On 4 October 2017 at 15:28, Rob Herring <robh at kernel.org> wrote:
> On Wed, Oct 4, 2017 at 1:50 AM, Gwan-gyeong Mun <elongbug at gmail.com> wrote:
>> It adds support of dri2_loader to egl dri2 tizen backend.
>>   - referenced a basic buffer flow and management implementation from android.
>>
>> And it implements a query buffer age extesion for tizen and turn on
>> swap_buffers_with_damage extension.
>>   - it add color buffer related member variables to dri_egl_surface for a
>>     management of color buffers.
>>
>> v2: Fixes from Emil's review:
>>    a) Remove a temporary variable and return directly on get_format_bpp()
>>    b) Remove unneeded compiler pragma
>>    c) Follow coding style
>>    d) Rename get_pitch() to get_stride() for using of consistent naming
>>    e) Remove mis-referencing from android implementation on treatment of buffer
>>       age.
>>       reference: https://lists.freedesktop.org/archives/mesa-dev/2017-June/158409.html
>>    f) Use dri2_egl_surface_free_outdated_buffers_and_update_size() helper
>>    g) Use dri2_egl_surface_record_buffers_and_update_back_buffer() helper
>>    h) Use add dri2_egl_surface_update_buffer_age() helper
>>    i) Use env_var_as_boolean for hw_accel variable on dri2_initialize_tizen()
>>    j) Remove getting of the device name and opening of the device node on dri2_initialize_tizen()
>>       And add duplicating of tbm_bufmgr_fd. As tbm_bufmgr_fd is managed by tbm_bufmgr,
>>       if mesa use this fd then we should duplicate it.
>>    k) Add comments why we can not drop the dri2 codepath on dri2_initialize_tizen()
>>       As some kernels ported for tizen don't support render node feature yet,
>>       currently we cannot drop the dri2 codepath.
>>
>> Signed-off-by: Mun Gwan-gyeong <elongbug at gmail.com>
>> ---
>>  src/egl/drivers/dri2/egl_dri2.h       |   9 ++
>>  src/egl/drivers/dri2/platform_tizen.c | 257 ++++++++++++++++++++++++++++++++--
>>  2 files changed, 252 insertions(+), 14 deletions(-)
>>
>> diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
>> index 6f9d936ca5..7d047bf5dd 100644
>> --- a/src/egl/drivers/dri2/egl_dri2.h
>> +++ b/src/egl/drivers/dri2/egl_dri2.h
>> @@ -340,6 +340,15 @@ struct dri2_egl_surface
>>     tpl_surface_t         *tpl_surface;
>>     tbm_surface_h          tbm_surface;
>>     tbm_format             tbm_format;
>> +
>> +   /* Used to record all the tbm_surface created by tpl_surface and their ages.
>> +    * Usually Tizen uses at most triple buffers in tpl_surface (tbm_surface_queue)
>> +    * so hardcode the number of color_buffers to 3.
>> +    */
>> +   struct {
>> +      tbm_surface_h       buffer;
>> +      int                 age;
>> +   } color_buffers[3], *back;
>
> dri2_egl_surface is quite the mess of ifdefery.
>
> So now we have 3 instances of color_buffer and *back. This struct
> really needs some refactoring to separate out the common and platform
> specific bits. I'm not saying it has to be done as part of this series
> though.
>
The helpers refactoring was meant to address a bit of it. Namely:

   struct {
     void *native_buffer; // aka wl_buffer//gbm_bo/ANativeWindowBuffer
     __DRIimage         *dri_image;
     /* for is_different_gpu case. NULL else */
     __DRIimage         *linear_copy;
     /* for swrast */
     void *data;
     int data_size;
     bool                locked; // can we reuse it for android/tizen ?
     int                 age;
  } color_buffers[4], *back, *current;

Side note: The 4 buffers thing is a bit strange. The Wayland commit
that introduces it is sparse on details why does so.

With above in mind there will be the odd cast in the platform_foo.c
but the helpers will be perfectly fine.
Aka there should be no new ifdef magic.

-Emil


More information about the mesa-dev mailing list