[Mesa-dev] [PATCH] egl: fix _eglQuerySurface in EGL_BUFFER_AGE_EXT case

Eric Engestrom eric.engestrom at imgtec.com
Thu Jun 8 13:12:58 UTC 2017


On Thursday, 2017-06-08 13:10:58 +0300, Tapani Pälli wrote:
> 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>
> ---
>  src/egl/drivers/dri2/platform_android.c | 4 ++--
>  src/egl/drivers/dri2/platform_drm.c     | 2 +-
>  src/egl/main/eglsurface.c               | 6 +++++-
>  3 files changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
> index 48ecb9f..4c97935 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;

Nit: this could be a separate commit.

Regardless, as one or two commits it all gets:
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
Cc: mesa-stable at lists.freedesktop.org

>  }
>  
>  static EGLBoolean
> diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
> index 2f04589..36c89fc 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/main/eglsurface.c b/src/egl/main/eglsurface.c
> index e935c83..5b3e83e 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");
> -- 
> 2.9.4
> 


More information about the mesa-dev mailing list