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.
This commit is contained in:
committed by
Android Git Automerger
commit
be49703e82
@@ -23,6 +23,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#include <cutils/log.h>
|
#include <cutils/log.h>
|
||||||
|
#include <cutils/properties.h>
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
@@ -45,6 +46,39 @@ namespace android {
|
|||||||
|
|
||||||
ANDROID_SINGLETON_STATIC_INSTANCE( Loader )
|
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)
|
Loader::driver_t::driver_t(void* gles)
|
||||||
@@ -94,6 +128,15 @@ Loader::Loader()
|
|||||||
{
|
{
|
||||||
char line[256];
|
char line[256];
|
||||||
char tag[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");
|
FILE* cfg = fopen("/system/lib/egl/egl.cfg", "r");
|
||||||
if (cfg == NULL) {
|
if (cfg == NULL) {
|
||||||
// default config
|
// default config
|
||||||
|
|||||||
Reference in New Issue
Block a user