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: 0661c357c6
("egl/android: Update color_buffers querying for buffer age")
Signed-off-by: Nataraj Deshpande <nataraj.deshpande@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3384>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3384>
This commit is contained in:
parent
a014105498
commit
be08e6a449
|
@ -375,6 +375,7 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
|
||||||
if (type == EGL_WINDOW_BIT) {
|
if (type == EGL_WINDOW_BIT) {
|
||||||
int format;
|
int format;
|
||||||
int buffer_count;
|
int buffer_count;
|
||||||
|
const int min_buffers = 3;
|
||||||
|
|
||||||
if (window->common.magic != ANDROID_NATIVE_WINDOW_MAGIC) {
|
if (window->common.magic != ANDROID_NATIVE_WINDOW_MAGIC) {
|
||||||
_eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
|
_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");
|
_eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
|
||||||
goto cleanup_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");
|
_eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
|
||||||
goto cleanup_surface;
|
goto cleanup_surface;
|
||||||
}
|
}
|
||||||
dri2_surf->color_buffers = calloc(buffer_count+1,
|
dri2_surf->color_buffers = calloc(buffer_count,
|
||||||
sizeof(*dri2_surf->color_buffers));
|
sizeof(*dri2_surf->color_buffers));
|
||||||
if (!dri2_surf->color_buffers) {
|
if (!dri2_surf->color_buffers) {
|
||||||
_eglError(EGL_BAD_ALLOC, "droid_create_surface");
|
_eglError(EGL_BAD_ALLOC, "droid_create_surface");
|
||||||
goto cleanup_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) {
|
if (format != dri2_conf->base.NativeVisualID) {
|
||||||
_eglLog(_EGL_WARNING, "Native format mismatch: 0x%x != 0x%x",
|
_eglLog(_EGL_WARNING, "Native format mismatch: 0x%x != 0x%x",
|
||||||
|
|
Loading…
Reference in New Issue