To share common get and create dri_image_front code. In preparation to adding of new platform which uses this helper.
v2: - Remove unneeded ifdef magic - Fixes from Eric's review: a) Split out series of refactor for helpers to a separate series. b) Add the new helper function and use them to replace the old code in the same patch. v3: Fixes from Emil and Gurchetan's review - Follow the naming convention which prevents too verbose name of functions. a) use a dri2_surface_$action_$object naming convention b) change a first argument type "struct dri2_egl_surface" to "_EGLSurface". Signed-off-by: Mun Gwan-gyeong <elong...@gmail.com> Reviewed-by: Emil Velikov <emil.veli...@collabora.com> --- src/egl/drivers/dri2/egl_dri2.c | 33 +++++++++++++++++++++++++++++++ src/egl/drivers/dri2/egl_dri2.h | 3 +++ src/egl/drivers/dri2/platform_android.c | 35 +-------------------------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index ed0fff199d..e4ecd4ec09 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1166,6 +1166,39 @@ dri2_surface_destroy_front_image(_EGLSurface *surf) } } +int +dri2_surface_get_front_image(_EGLSurface *surf, unsigned int format) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(surf->Resource.Display); + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); + + if (dri2_surf->dri_image_front) + return 0; + + if (surf->Type == EGL_WINDOW_BIT) { + /* According current EGL spec, front buffer rendering + * for window surface is not supported now. + * and mesa doesn't have the implementation of this case. + * Add warning message, but not treat it as error. + */ + _eglLog(_EGL_DEBUG, "DRI driver requested unsupported front buffer for window surface"); + } else if (surf->Type == EGL_PBUFFER_BIT) { + dri2_surf->dri_image_front = + dri2_dpy->image->createImage(dri2_dpy->dri_screen, + surf->Width, + surf->Height, + format, + 0, + dri2_surf); + if (!dri2_surf->dri_image_front) { + _eglLog(_EGL_WARNING, "dri2_image_front allocation failed"); + return -1; + } + } + + return 0; +} + /** * Called via eglTerminate(), drv->API.Terminate(). * diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 6415fb22e6..26d0ee986e 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -467,6 +467,9 @@ dri2_surface_destroy_back_image(_EGLSurface *surf); void dri2_surface_destroy_front_image(_EGLSurface *surf); +int +dri2_surface_get_front_image(_EGLSurface *surf, unsigned int format); + EGLBoolean dri2_init_surface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, _EGLConfig *conf, const EGLint *attrib_list, EGLBoolean enable_out_fence); diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 0b84f7221d..3bb85ab4cd 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -386,39 +386,6 @@ update_buffers(struct dri2_egl_surface *dri2_surf) return 0; } -static int -get_front_bo(struct dri2_egl_surface *dri2_surf, unsigned int format) -{ - struct dri2_egl_display *dri2_dpy = - dri2_egl_display(dri2_surf->base.Resource.Display); - - if (dri2_surf->dri_image_front) - return 0; - - if (dri2_surf->base.Type == EGL_WINDOW_BIT) { - /* According current EGL spec, front buffer rendering - * for window surface is not supported now. - * and mesa doesn't have the implementation of this case. - * Add warning message, but not treat it as error. - */ - _eglLog(_EGL_DEBUG, "DRI driver requested unsupported front buffer for window surface"); - } else if (dri2_surf->base.Type == EGL_PBUFFER_BIT) { - dri2_surf->dri_image_front = - dri2_dpy->image->createImage(dri2_dpy->dri_screen, - dri2_surf->base.Width, - dri2_surf->base.Height, - format, - 0, - dri2_surf); - if (!dri2_surf->dri_image_front) { - _eglLog(_EGL_WARNING, "dri2_image_front allocation failed"); - return -1; - } - } - - return 0; -} - static int get_back_bo(struct dri2_egl_surface *dri2_surf) { @@ -510,7 +477,7 @@ droid_image_get_buffers(__DRIdrawable *driDrawable, return 0; if (buffer_mask & __DRI_IMAGE_BUFFER_FRONT) { - if (get_front_bo(dri2_surf, format) < 0) + if (dri2_surface_get_front_image(&dri2_surf->base, format) < 0) return 0; if (dri2_surf->dri_image_front) { -- 2.14.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev