Merge "opengl: EGL: special case for GLES emulation"

This commit is contained in:
David Turner 2011-09-03 03:44:18 -07:00 committed by Android (Google) Code Review
commit 1da4606786

View File

@ -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