Signed-off-by: Robert Foss <robert.f...@collabora.com> --- src/egl/drivers/dri2/egl_dri2.c | 29 +++++++++++++++---- src/egl/drivers/dri2/platform_android.c | 27 +++++++++++++---- src/egl/main/egldriver.c | 8 ++++- src/gallium/auxiliary/Android.mk | 5 ++++ src/gallium/winsys/sw/kms-dri/Android.mk | 6 ++++ .../winsys/sw/kms-dri/kms_dri_sw_winsys.c | 6 ++-- 6 files changed, 67 insertions(+), 14 deletions(-)
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 45d0c7275c5..64b65042fda 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -65,6 +65,10 @@ #include "util/u_vector.h" #include "mapi/glapi/glapi.h" +#define ATRACE_TAG ATRACE_TAG_GRAPHICS +#define LOG_TAG "egl-dri2" +#include <cutils/log.h> + /* The kernel header drm_fourcc.h defines the DRM formats below. We duplicate * some of the definitions here so that building Mesa won't bleeding-edge * kernel headers. @@ -511,7 +515,7 @@ dri2_open_driver(_EGLDisplay *disp) char path[PATH_MAX], *search_paths, *next, *end; char *get_extensions_name; const __DRIextension **(*get_extensions)(void); - + ALOGE("%s() 1 driver_name=%s", __func__, dri2_dpy->driver_name); search_paths = NULL; if (geteuid() == getuid()) { /* don't allow setuid apps to use LIBGL_DRIVERS_PATH */ @@ -523,6 +527,7 @@ dri2_open_driver(_EGLDisplay *disp) dri2_dpy->driver = NULL; end = search_paths + strlen(search_paths); for (char *p = search_paths; p < end; p = next + 1) { + ALOGE("%s() 1.1 driver path: %s", __func__, p); int len; next = strchr(p, ':'); if (next == NULL) @@ -532,14 +537,19 @@ dri2_open_driver(_EGLDisplay *disp) #if GLX_USE_TLS snprintf(path, sizeof path, "%.*s/tls/%s_dri.so", len, p, dri2_dpy->driver_name); + ALOGE("%s() 2 .so path: %s", __func__, path); + dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL); #endif if (dri2_dpy->driver == NULL) { snprintf(path, sizeof path, "%.*s/%s_dri.so", len, p, dri2_dpy->driver_name); + ALOGE("%s() 3 .so path: %s", __func__, path); dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL); - if (dri2_dpy->driver == NULL) + if (dri2_dpy->driver == NULL){ _eglLog(_EGL_DEBUG, "failed to open %s: %s\n", path, dlerror()); + ALOGE("%s() failed to open %s: %s\n", __func__, path, dlerror()); + } } /* not need continue to loop all paths once the driver is found */ if (dri2_dpy->driver != NULL) @@ -550,6 +560,8 @@ dri2_open_driver(_EGLDisplay *disp) _eglLog(_EGL_WARNING, "DRI2: failed to open %s (search paths %s)", dri2_dpy->driver_name, search_paths); + ALOGE("%s() DRI2: failed to open %s (search paths %s)", + __func__, dri2_dpy->driver_name, search_paths); return NULL; } @@ -821,8 +833,9 @@ EGLBoolean dri2_create_screen(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - + ALOGE("%s() 1", __func__); if (dri2_dpy->image_driver) { + ALOGE("%s() 1 1 image_driver", __func__); dri2_dpy->dri_screen = dri2_dpy->image_driver->createNewScreen2(0, dri2_dpy->fd, dri2_dpy->loader_extensions, @@ -830,19 +843,23 @@ dri2_create_screen(_EGLDisplay *disp) &dri2_dpy->driver_configs, disp); } else if (dri2_dpy->dri2) { + ALOGE("%s() 1 2 dri2", __func__); if (dri2_dpy->dri2->base.version >= 4) { + ALOGE("%s() 1 2 1 dri2", __func__); dri2_dpy->dri_screen = dri2_dpy->dri2->createNewScreen2(0, dri2_dpy->fd, dri2_dpy->loader_extensions, dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, disp); } else { + ALOGE("%s() 1 2 2 !dri2", __func__); dri2_dpy->dri_screen = dri2_dpy->dri2->createNewScreen(0, dri2_dpy->fd, dri2_dpy->loader_extensions, &dri2_dpy->driver_configs, disp); } } else { + ALOGE("%s() 1 3 1 swrast", __func__); assert(dri2_dpy->swrast); if (dri2_dpy->swrast->base.version >= 4) { dri2_dpy->dri_screen = @@ -850,17 +867,19 @@ dri2_create_screen(_EGLDisplay *disp) dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, disp); } else { + ALOGE("%s() 1 3 2 swrast", __func__); dri2_dpy->dri_screen = dri2_dpy->swrast->createNewScreen(0, dri2_dpy->loader_extensions, &dri2_dpy->driver_configs, disp); } } - +ALOGE("%s() 2", __func__); if (dri2_dpy->dri_screen == NULL) { +ALOGE("%s() 2 1 DRI2: failed to create dri screen", __func__); _eglLog(_EGL_WARNING, "DRI2: failed to create dri screen"); return EGL_FALSE; } - +ALOGE("%s() 3 returning", __func__); dri2_dpy->own_dri_screen = true; return EGL_TRUE; } diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index bc644c25bf9..7a61e333153 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -27,6 +27,10 @@ * DEALINGS IN THE SOFTWARE. */ +#define ATRACE_TAG ATRACE_TAG_GRAPHICS +#define LOG_TAG "mesa-platform" +#include <cutils/log.h> + #include <cutils/properties.h> #include <errno.h> #include <dirent.h> @@ -1197,7 +1201,7 @@ droid_load_driver(_EGLDisplay *disp, EGLBoolean force_software) { struct dri2_egl_display *dri2_dpy = disp->DriverData; const char *err; - + ALOGE("%s() 1", __func__); if (force_software) { dri2_dpy->driver_name = strdup("kms_swrast"); } else { @@ -1206,10 +1210,13 @@ droid_load_driver(_EGLDisplay *disp, EGLBoolean force_software) if (dri2_dpy->driver_name == NULL) return false; + ALOGE("%s() 2 driver_name=%s", __func__, dri2_dpy->driver_name); dri2_dpy->is_render_node = drmGetNodeTypeFromFd(dri2_dpy->fd) == DRM_NODE_RENDER; if (!dri2_dpy->is_render_node) { #ifdef HAVE_DRM_GRALLOC + ALOGE("%s() 2.1 ", __func__, dri2_dpy->driver_name); + /* Handle control nodes using __DRI_DRI2_LOADER extension and GEM names * for backwards compatibility with drm_gralloc. (Do not use on new * systems.) */ @@ -1219,10 +1226,14 @@ droid_load_driver(_EGLDisplay *disp, EGLBoolean force_software) goto error; } #else + ALOGE("%s() 2.2", __func__); + err = "DRI2: handle is not for a render node"; goto error; #endif } else { + ALOGE("%s() 2.3", __func__); + dri2_dpy->loader_extensions = droid_image_loader_extensions; if (!dri2_load_driver_dri3(disp)) { err = "DRI3: failed to load driver"; @@ -1233,6 +1244,7 @@ droid_load_driver(_EGLDisplay *disp, EGLBoolean force_software) return true; error: + ALOGE("%s() 3 error: %s", __func__, err); free(dri2_dpy->driver_name); dri2_dpy->driver_name = NULL; return false; @@ -1367,10 +1379,6 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp) const char *err; int ret; - /* Not supported yet */ - if (disp->Options.ForceSoftware) - return EGL_FALSE; - loader_set_logger(_eglLog); dri2_dpy = calloc(1, sizeof(*dri2_dpy)); @@ -1387,22 +1395,27 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp) disp->DriverData = (void *) dri2_dpy; + ALOGE("%s() 1 force_software=%d", __func__, force_software); dri2_dpy->fd = droid_open_device(disp); if (dri2_dpy->fd < 0) { + ALOGE("%s() 1.1 failed to open device, trying software device", __func__); err = "DRI2: failed to open device, trying software device"; } load_driver: + ALOGE("%s() 2 load_driver force_software=%s", __func__, force_software?"true":"false"); if (!droid_load_driver(disp, force_software)) { if (force_software) { + ALOGE("%s() 2.1 failed to load software driver", __func__); err = "DRI2: failed to load driver"; goto cleanup; } else { + ALOGE("%s() 2.2 failed to load hardware driver, retrying software", __func__); force_software = true; goto load_driver; } } - + ALOGE("%s() 3 loaded _some_ driver", __func__); if (!dri2_create_screen(disp)) { err = "DRI2: failed to create screen"; goto cleanup; @@ -1443,6 +1456,8 @@ load_driver: return EGL_TRUE; cleanup: + ALOGE("%s() cleanup", __func__); + dri2_display_destroy(disp); return _eglError(EGL_NOT_INITIALIZED, err); } diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index bb9e90c157d..5dd71b0c12e 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -50,6 +50,10 @@ #include "util/debug.h" +#define ATRACE_TAG ATRACE_TAG_GRAPHICS +#define LOG_TAG "egldriver" +#include <cutils/log.h> + static mtx_t _eglModuleMutex = _MTX_INITIALIZER_NP; static _EGLDriver *_eglDriver; @@ -93,7 +97,9 @@ _eglMatchDriver(_EGLDisplay *dpy) #ifdef HAVE_ANDROID_PLATFORM char prop_val[PROPERTY_VALUE_MAX]; - property_get("drm.gpu.force_software", prop_val, "0"); + //property_get("drm.gpu.force_software", prop_val, "0"); + property_get("drm.gpu.force_software", prop_val, "1"); + ALOGE("%s() drm.gpu.force_software=\"%s\"", __func__, prop_val); dpy->Options.ForceSoftware |= strncmp(prop_val, "0", PROPERTY_VALUE_MAX); #endif diff --git a/src/gallium/auxiliary/Android.mk b/src/gallium/auxiliary/Android.mk index acd243b8346..08aaacdc40f 100644 --- a/src/gallium/auxiliary/Android.mk +++ b/src/gallium/auxiliary/Android.mk @@ -50,6 +50,11 @@ LOCAL_CPPFLAGS += -std=c++11 LOCAL_MODULE := libmesa_gallium LOCAL_STATIC_LIBRARIES += libmesa_nir +LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libcutils + LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures LOCAL_CFLAGS += -DHAS_ANDROID_CPUFEATURES diff --git a/src/gallium/winsys/sw/kms-dri/Android.mk b/src/gallium/winsys/sw/kms-dri/Android.mk index f5c1ccab12a..f7ff90ba4a1 100644 --- a/src/gallium/winsys/sw/kms-dri/Android.mk +++ b/src/gallium/winsys/sw/kms-dri/Android.mk @@ -29,5 +29,11 @@ LOCAL_SRC_FILES := $(C_SOURCES) LOCAL_MODULE := libmesa_winsys_sw_kms_dri + + include $(GALLIUM_COMMON_MK) include $(BUILD_STATIC_LIBRARY) + +LOCAL_STATIC_LIBRARIES := \ + liblog \ + libcutils diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c index d842fe3257a..6d7828fca78 100644 --- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c +++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c @@ -53,6 +53,10 @@ #include "state_tracker/drm_driver.h" #include "kms_dri_sw_winsys.h" +#define ATRACE_TAG ATRACE_TAG_GRAPHICS +#define LOG_TAG "kms_dri_sw_winsys" +#include <cutils/log.h> + #ifdef DEBUG #define DEBUG_PRINT(msg, ...) fprintf(stderr, msg, __VA_ARGS__) #else @@ -474,7 +478,6 @@ struct sw_winsys * kms_dri_create_winsys(int fd) { struct kms_sw_winsys *ws; - ws = CALLOC_STRUCT(kms_sw_winsys); if (!ws) return NULL; @@ -497,7 +500,6 @@ kms_dri_create_winsys(int fd) ws->base.displaytarget_unmap = kms_sw_displaytarget_unmap; ws->base.displaytarget_display = kms_sw_displaytarget_display; - return &ws->base; } -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev