Mesa (master): egl: fix _eglQuerySurface in EGL_BUFFER_AGE_EXT case
Tapani Pälli
tpalli at kemper.freedesktop.org
Fri Jun 9 06:43:09 UTC 2017
Module: Mesa
Branch: master
Commit: 8fac894f9b8e4e2cb93061fdd25f3aecbfb3bbb7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8fac894f9b8e4e2cb93061fdd25f3aecbfb3bbb7
Author: Tapani Pälli <tapani.palli at intel.com>
Date: Thu Jun 8 12:24:24 2017 +0300
egl: fix _eglQuerySurface in EGL_BUFFER_AGE_EXT case
Specification states that in case of error, value should not be
written, patch changes buffer age queries to return -1 in case of
error so that we can skip changing the value.
In addition, small change to droid_query_buffer_age to return 0
in case buffer does not have a back buffer available.
Fixes:
dEQP-EGL.functional.negative_partial_update.not_postable_surface
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
Reviewed-by: Chad Versace <chadversary at chromium.org>
Cc: mesa-stable at lists.freedesktop.org
---
src/egl/drivers/dri2/platform_android.c | 4 ++--
src/egl/drivers/dri2/platform_drm.c | 2 +-
src/egl/drivers/dri2/platform_wayland.c | 2 +-
src/egl/main/eglsurface.c | 6 +++++-
4 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
index 48ecb9fd40..4c97935119 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -614,10 +614,10 @@ droid_query_buffer_age(_EGLDriver *drv,
if (update_buffers(dri2_surf) < 0) {
_eglError(EGL_BAD_ALLOC, "droid_query_buffer_age");
- return 0;
+ return -1;
}
- return dri2_surf->back->age;
+ return dri2_surf->back ? dri2_surf->back->age : 0;
}
static EGLBoolean
diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
index 2f04589426..36c89fc832 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -464,7 +464,7 @@ dri2_drm_query_buffer_age(_EGLDriver *drv,
if (get_back_bo(dri2_surf) < 0) {
_eglError(EGL_BAD_ALLOC, "dri2_query_buffer_age");
- return 0;
+ return -1;
}
return dri2_surf->back->age;
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index e447aa6729..15cc597111 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -810,7 +810,7 @@ dri2_wl_query_buffer_age(_EGLDriver *drv,
if (get_back_bo(dri2_surf) < 0) {
_eglError(EGL_BAD_ALLOC, "dri2_query_buffer_age");
- return 0;
+ return -1;
}
return dri2_surf->back->age;
diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c
index e935c83271..5b3e83ee92 100644
--- a/src/egl/main/eglsurface.c
+++ b/src/egl/main/eglsurface.c
@@ -409,7 +409,11 @@ _eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surface,
_eglError(EGL_BAD_ATTRIBUTE, "eglQuerySurface");
return EGL_FALSE;
}
- *value = drv->API.QueryBufferAge(drv, dpy, surface);
+ EGLint result = drv->API.QueryBufferAge(drv, dpy, surface);
+ /* error happened */
+ if (result < 0)
+ return EGL_FALSE;
+ *value = result;
break;
default:
_eglError(EGL_BAD_ATTRIBUTE, "eglQuerySurface");
More information about the mesa-commit
mailing list