From acf125ed3aa64a1f62c1372b01e8274b50fc081a Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Mon, 8 May 2017 18:39:12 +0100 Subject: [PATCH] egl/android: use the image_driver alongside the image_loader MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit They are meant to be used together. Otherwise we'll need workarounds like egl/wayland. Namely register an image_loader_extension even thought we should be using only DRI2. v2: Add missing the bracket to fix the build (Tapani). Signed-off-by: Emil Velikov Reviewed-by: Tapani Pälli --- src/egl/drivers/dri2/platform_android.c | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index a16a3809a31..5da81edc6a7 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -315,6 +315,7 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, _EGLConfig *conf, void *native_window, const EGLint *attrib_list) { + __DRIcreateNewDrawableFunc createNewDrawable; struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); struct dri2_egl_surface *dri2_surf; @@ -356,11 +357,15 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, if (!config) goto cleanup_surface; - dri2_surf->dri_drawable = - dri2_dpy->dri2->createNewDrawable(dri2_dpy->dri_screen, config, - dri2_surf); + if (dri2_dpy->image_driver) + createNewDrawable = dri2_dpy->image_driver->createNewDrawable; + else + createNewDrawable = dri2_dpy->dri2->createNewDrawable; + + dri2_surf->dri_drawable = (*createNewDrawable)(dri2_dpy->dri_screen, config, + dri2_surf); if (dri2_surf->dri_drawable == NULL) { - _eglError(EGL_BAD_ALLOC, "dri2->createNewDrawable"); + _eglError(EGL_BAD_ALLOC, "createNewDrawable"); goto cleanup_surface; } @@ -1134,19 +1139,23 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy) goto cleanup; } - if (!dri2_load_driver(dpy)) { - err = "DRI2: failed to load driver"; - goto cleanup; - } - dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER; /* render nodes cannot use Gem names, and thus do not support * the __DRI_DRI2_LOADER extension */ - if (!dri2_dpy->is_render_node) + if (!dri2_dpy->is_render_node) { dri2_dpy->loader_extensions = droid_dri2_loader_extensions; - else + if (!dri2_load_driver(dpy)) { + err = "DRI2: failed to load driver"; + goto cleanup; + } + } else { dri2_dpy->loader_extensions = droid_image_loader_extensions; + if (!dri2_load_driver_dri3(dpy)) { + err = "DRI3: failed to load driver"; + goto cleanup; + } + } if (!dri2_create_screen(dpy)) { err = "DRI2: failed to create screen"; -- 2.30.2