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