summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Figa <tfiga@chromium.org>2016-11-10 16:55:52 +0900
committerEmil Velikov <emil.l.velikov@gmail.com>2016-11-21 13:27:41 +0000
commit859d0b01217a0241a12a75899dcfb8263787f1ad (patch)
tree1d7099ff142404e109435c6b854e0eeb5f9aa328
parent925ff0b5341e0df494b647f02fbc136757fdd48e (diff)
egl/android: Get gralloc module in dri2_initialize_android() (v2)
Currently droid_open_device() gets a reference to the gralloc module only for its own use and does not store it anywhere. To make it possible to call gralloc methods from code added in further patches, let's refactor current code to get gralloc module in dri2_initialize_android() and store it in dri2_dpy. v2: fixes from Emil's review: a) remove duplicate initialization of 'err'. Signed-off-by: Tomasz Figa <tfiga@chromium.org> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
-rw-r--r--src/egl/drivers/dri2/egl_dri2.h4
-rw-r--r--src/egl/drivers/dri2/platform_android.c27
2 files changed, 19 insertions, 12 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index c039b64cb2c..fd4e87bb078 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -219,6 +219,10 @@ struct dri2_egl_display
char *device_name;
#endif
+#ifdef HAVE_ANDROID_PLATFORM
+ const gralloc_module_t *gralloc;
+#endif
+
int is_render_node;
int is_different_gpu;
};
diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
index f62a0386d9b..fc499327d63 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -856,19 +856,14 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
}
static int
-droid_open_device(void)
+droid_open_device(struct dri2_egl_display *dri2_dpy)
{
- const hw_module_t *mod;
- int fd = -1, err;
+ int fd = -1, err = -EINVAL;
- err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &mod);
- if (!err) {
- const gralloc_module_t *gr = (gralloc_module_t *) mod;
-
- err = -EINVAL;
- if (gr->perform)
- err = gr->perform(gr, GRALLOC_MODULE_PERFORM_GET_DRM_FD, &fd);
- }
+ if (dri2_dpy->gralloc->perform)
+ err = dri2_dpy->gralloc->perform(dri2_dpy->gralloc,
+ GRALLOC_MODULE_PERFORM_GET_DRM_FD,
+ &fd);
if (err || fd < 0) {
_eglLog(_EGL_WARNING, "fail to get drm fd");
fd = -1;
@@ -963,6 +958,7 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
{
struct dri2_egl_display *dri2_dpy;
const char *err;
+ int ret;
_eglSetLogProc(droid_log);
@@ -972,9 +968,16 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
if (!dri2_dpy)
return _eglError(EGL_BAD_ALLOC, "eglInitialize");
+ ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID,
+ (const hw_module_t **)&dri2_dpy->gralloc);
+ if (ret) {
+ err = "DRI2: failed to get gralloc module";
+ goto cleanup_display;
+ }
+
dpy->DriverData = (void *) dri2_dpy;
- dri2_dpy->fd = droid_open_device();
+ dri2_dpy->fd = droid_open_device(dri2_dpy);
if (dri2_dpy->fd < 0) {
err = "DRI2: failed to open device";
goto cleanup_display;