On 18 January 2018 at 17:43, Eric Engestrom <e...@engestrom.ch> wrote:
> On Thursday, 2018-01-18 07:52:42 +0000, Zhongmin Wu wrote:
>> Implement the eglSwapinterval for Android platform to
>> enable the async mode for some GFX benchmarks such as
>> Daimler C217, CityBench.
>>
>> Signed-off-by: Zhongmin Wu <zhongmin...@intel.com>
>> ---
>>  src/egl/drivers/dri2/platform_android.c | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/src/egl/drivers/dri2/platform_android.c 
>> b/src/egl/drivers/dri2/platform_android.c
>> index f6a24cd..3a64689 100644
>> --- a/src/egl/drivers/dri2/platform_android.c
>> +++ b/src/egl/drivers/dri2/platform_android.c
>> @@ -476,6 +476,20 @@ droid_destroy_surface(_EGLDriver *drv, _EGLDisplay 
>> *disp, _EGLSurface *surf)
>>     return EGL_TRUE;
>>  }
>>
>> +static EGLBoolean
>> +droid_swap_interval(_EGLDriver *drv, _EGLDisplay *dpy,
>> +                   _EGLSurface *surf, EGLint interval)
>> +{
>> +   struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
>> +   struct ANativeWindow *window = dri2_surf->window;
>> +
>> +   if (window->setSwapInterval(window, interval))
>> +      return EGL_FALSE;
>> +
>> +   surf->SwapInterval = interval;
>> +   return EGL_TRUE;
>> +}
>> +
>>  static int
>>  update_buffers(struct dri2_egl_surface *dri2_surf)
>>  {
>> @@ -1300,6 +1314,7 @@ static const struct dri2_egl_display_vtbl 
>> droid_display_vtbl = {
>>     .swap_buffers = droid_swap_buffers,
>>     .swap_buffers_with_damage = dri2_fallback_swap_buffers_with_damage, /* 
>> Android implements the function */
>>     .swap_buffers_region = dri2_fallback_swap_buffers_region,
>> +   .swap_interval = droid_swap_interval,
>>  #if ANDROID_API_LEVEL >= 23
>>     .set_damage_region = droid_set_damage_region,
>>  #else
>> @@ -1443,6 +1458,12 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay 
>> *dpy)
>>
>>     dri2_setup_screen(dpy);
>>
>> +   /* we set the maximum swap interval as 1 for Android platform, Since
>> +   it is the maximum value supported by Android according to the
>> +   value of ANativeWindow::maxSwapInterval.
>> +   */
>> +   dri2_setup_swap_interval(dpy, 1);
>
> My C<->C++ interaction skills are more than rusty, but is it possible to
> use `ANativeWindow.maxSwapInterval` or something like this?
>
> Given that the dEQP tests all pass, whether with the current comment or
> the class field directly used in the code, this patch is:
> Reviewed-by: Eric Engestrom <e...@engestrom.ch>
>
> I'll push it for you in a couple days if no one objects :)
>
My current checkout shows the struct is nicely separated for inclusion
in both C and C++ sources.
The C++ vfuncs are wrapped in a ifdef _cplusplus block, so the ABI
should be identical across both.

I'm suspecting that maxSwapInterval > 1 will require additional
changes, so I'd keep it as-is (nit the comment style and adding dEQP
stats in the commit message).
Reviewed-by: Emil Velikov <emil.veli...@collabora.com>

-Emil
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to