diff options
author | David 'Digit' Turner <digit@google.com> | 2011-09-23 02:52:50 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-09-23 02:52:50 -0700 |
commit | be49703e8229f67c3124a58be86577ce1e4d9a3c (patch) | |
tree | 1b66e515f1fcb53e7fb466cfda436da3ac570eb7 | |
parent | e4f0da706a6706e3aaa3363d4de94551f30a3d22 (diff) | |
parent | d51ecafa6875e182346a825ce098e7c5e0b09038 (diff) | |
download | frameworks_base-be49703e8229f67c3124a58be86577ce1e4d9a3c.zip frameworks_base-be49703e8229f67c3124a58be86577ce1e4d9a3c.tar.gz frameworks_base-be49703e8229f67c3124a58be86577ce1e4d9a3c.tar.bz2 |
am d51ecafa: opengl: Ensure we only load the GLES emulation library when the emulator supports it.
* commit 'd51ecafa6875e182346a825ce098e7c5e0b09038':
opengl: Ensure we only load the GLES emulation library when the emulator supports it.
-rw-r--r-- | opengl/libs/EGL/Loader.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 747c829..e16efe3 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -23,6 +23,7 @@ #include <limits.h> #include <cutils/log.h> +#include <cutils/properties.h> #include <EGL/egl.h> @@ -45,6 +46,39 @@ namespace android { ANDROID_SINGLETON_STATIC_INSTANCE( Loader ) +/* This function is called to check whether we run inside the emulator, + * and if this is the case whether GLES GPU emulation is supported. + * + * Returned values are: + * -1 -> not running inside the emulator + * 0 -> running inside the emulator, but GPU emulation not supported + * 1 -> running inside the emulator, GPU emulation is supported + * through the "emulation" config. + */ +static int +checkGlesEmulationStatus(void) +{ + /* We're going to check for the following kernel parameters: + * + * qemu=1 -> tells us that we run inside the emulator + * android.qemu.gles=<number> -> tells us the GLES GPU emulation status + * + * Note that we will return <number> if we find it. This let us support + * more additionnal emulation modes in the future. + */ + char prop[PROPERTY_VALUE_MAX]; + int result = -1; + + /* First, check for qemu=1 */ + property_get("ro.kernel.qemu",prop,"0"); + if (atoi(prop) != 1) + return -1; + + /* We are in the emulator, get GPU status value */ + property_get("ro.kernel.qemu.gles",prop,"0"); + return atoi(prop); +} + // ---------------------------------------------------------------------------- Loader::driver_t::driver_t(void* gles) @@ -94,6 +128,15 @@ Loader::Loader() { char line[256]; char tag[256]; + + /* Special case for GLES emulation */ + if (checkGlesEmulationStatus() == 0) { + LOGD("Emulator without GPU support detected. Fallback to software renderer."); + gConfig.add( entry_t(0, 0, "android") ); + return; + } + + /* Otherwise, use egl.cfg */ FILE* cfg = fopen("/system/lib/egl/egl.cfg", "r"); if (cfg == NULL) { // default config |