On Wed, Jul 27, 2016 at 5:57 PM, Haixia Shi <[email protected]> wrote: > On android platform, the width and height of a native window surface may > be updated after initialization. It is therefore necessary to query android > framework for the current width and height. > > TEST=dEQP-EGL.functional.resize.surface_size#* on cyan-cheets > > Signed-off-by: Haixia Shi <[email protected]>
Reviewed-by: Kristian H. Kristensen <[email protected]> > --- > src/egl/drivers/dri2/egl_dri2.c | 13 +++++++++++++ > src/egl/drivers/dri2/egl_dri2.h | 4 ++++ > src/egl/drivers/dri2/platform_android.c | 27 +++++++++++++++++++++++++++ > 3 files changed, 44 insertions(+) > > diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c > index 030227d..7f63f55 100644 > --- a/src/egl/drivers/dri2/egl_dri2.c > +++ b/src/egl/drivers/dri2/egl_dri2.c > @@ -1745,6 +1745,16 @@ dri2_create_image_khr_texture(_EGLDisplay *disp, > _EGLContext *ctx, > return &dri2_img->base; > } > > +#ifdef HAVE_ANDROID_PLATFORM > +static EGLBoolean > +dri2_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, > + EGLint attribute, EGLint *value) > +{ > + struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy); > + return dri2_dpy->vtbl->query_surface(drv, dpy, surf, attribute, value); > +} > +#endif > + > static struct wl_buffer* > dri2_create_wayland_buffer_from_image(_EGLDriver *drv, _EGLDisplay *dpy, > _EGLImage *img) > @@ -2817,6 +2827,9 @@ _eglBuiltInDriverDRI2(const char *args) > dri2_drv->base.API.CreateImageKHR = dri2_create_image; > dri2_drv->base.API.DestroyImageKHR = dri2_destroy_image_khr; > dri2_drv->base.API.CreateWaylandBufferFromImageWL = > dri2_create_wayland_buffer_from_image; > +#ifdef HAVE_ANDROID_PLATFORM > + dri2_drv->base.API.QuerySurface = dri2_query_surface; > +#endif > #ifdef HAVE_LIBDRM > dri2_drv->base.API.CreateDRMImageMESA = dri2_create_drm_image_mesa; > dri2_drv->base.API.ExportDRMImageMESA = dri2_export_drm_image_mesa; > diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h > index 317de06..1a0ace7 100644 > --- a/src/egl/drivers/dri2/egl_dri2.h > +++ b/src/egl/drivers/dri2/egl_dri2.h > @@ -143,6 +143,10 @@ struct dri2_egl_display_vtbl { > EGLint (*query_buffer_age)(_EGLDriver *drv, _EGLDisplay *dpy, > _EGLSurface *surf); > > + EGLBoolean (*query_surface)(_EGLDriver *drv, _EGLDisplay *dpy, > + _EGLSurface *surf, EGLint attribute, > + EGLint *value); > + > struct wl_buffer* (*create_wayland_buffer_from_image)( > _EGLDriver *drv, _EGLDisplay *dpy, _EGLImage *img); > > diff --git a/src/egl/drivers/dri2/platform_android.c > b/src/egl/drivers/dri2/platform_android.c > index e3d5f0b..3038ca5 100644 > --- a/src/egl/drivers/dri2/platform_android.c > +++ b/src/egl/drivers/dri2/platform_android.c > @@ -467,6 +467,32 @@ droid_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, > _EGLSurface *draw) > return EGL_TRUE; > } > > +static EGLBoolean > +droid_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, > + EGLint attribute, EGLint *value) > +{ > + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); > + switch (attribute) { > + case EGL_WIDTH: > + if (dri2_surf->base.Type == EGL_WINDOW_BIT && dri2_surf->window) { > + dri2_surf->window->query(dri2_surf->window, > + NATIVE_WINDOW_DEFAULT_WIDTH, value); > + return EGL_TRUE; > + } > + break; > + case EGL_HEIGHT: > + if (dri2_surf->base.Type == EGL_WINDOW_BIT && dri2_surf->window) { > + dri2_surf->window->query(dri2_surf->window, > + NATIVE_WINDOW_DEFAULT_HEIGHT, value); > + return EGL_TRUE; > + } > + break; > + default: > + break; > + } > + return _eglQuerySurface(drv, dpy, surf, attribute, value); > +} > + > static _EGLImage * > dri2_create_image_android_native_buffer(_EGLDisplay *disp, > _EGLContext *ctx, > @@ -792,6 +818,7 @@ static struct dri2_egl_display_vtbl droid_display_vtbl = { > .post_sub_buffer = dri2_fallback_post_sub_buffer, > .copy_buffers = dri2_fallback_copy_buffers, > .query_buffer_age = dri2_fallback_query_buffer_age, > + .query_surface = droid_query_surface, > .create_wayland_buffer_from_image = > dri2_fallback_create_wayland_buffer_from_image, > .get_sync_values = dri2_fallback_get_sync_values, > .get_dri_drawable = dri2_surface_get_dri_drawable, > -- > 2.8.0.rc3.226.g39d4020 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
