From: Nataraj Deshpande Date: Fri, 10 Jan 2020 16:58:00 +0000 (-0800) Subject: egl/android: Restrict minimum triple buffering for android color_buffers X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=be08e6a4496aad219df1fd829fca3e4f7b322538 egl/android: Restrict minimum triple buffering for android color_buffers The patch restricts triple buffering as minimum at driver for android color_buffers in order to fix onscreen performance hit for T-Rex and Manhattan. v2: Update min_buffer check condition (Tapani Pälli) v3: further code cleanup (Eric Engestrom) Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2332 Fixes: 0661c357c60 ("egl/android: Update color_buffers querying for buffer age") Signed-off-by: Nataraj Deshpande Reviewed-by: Tapani Pälli Reviewed-by: Eric Engestrom Tested-by: Marge Bot Part-of: --- diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 6ed0b416cf8..d1b50a3fa72 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -375,6 +375,7 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, if (type == EGL_WINDOW_BIT) { int format; int buffer_count; + const int min_buffers = 3; if (window->common.magic != ANDROID_NATIVE_WINDOW_MAGIC) { _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface"); @@ -393,17 +394,20 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface"); goto cleanup_surface; } - if (native_window_set_buffer_count(window, buffer_count+1)) { + + if (buffer_count < min_buffers) + buffer_count = min_buffers; + if (native_window_set_buffer_count(window, buffer_count)) { _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface"); goto cleanup_surface; } - dri2_surf->color_buffers = calloc(buffer_count+1, + dri2_surf->color_buffers = calloc(buffer_count, sizeof(*dri2_surf->color_buffers)); if (!dri2_surf->color_buffers) { _eglError(EGL_BAD_ALLOC, "droid_create_surface"); goto cleanup_surface; } - dri2_surf->color_buffers_count = buffer_count+1; + dri2_surf->color_buffers_count = buffer_count; if (format != dri2_conf->base.NativeVisualID) { _eglLog(_EGL_WARNING, "Native format mismatch: 0x%x != 0x%x",