diff options
author | Emil Velikov <[email protected]> | 2017-05-08 18:39:12 +0100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2017-05-29 16:59:39 +0100 |
commit | acf125ed3aa64a1f62c1372b01e8274b50fc081a (patch) | |
tree | 2ed60bd8c12d06f418437fc04bacc28b3e22e772 /src/egl/drivers/dri2 | |
parent | 6b46854269ed50f405faeb0f1f7e484b11dca2b4 (diff) |
egl/android: use the image_driver alongside the image_loader
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 <[email protected]>
Reviewed-by: Tapani Pälli <[email protected]>
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r-- | src/egl/drivers/dri2/platform_android.c | 31 |
1 files 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"; |