Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a5b4f30 authored by David 'Digit' Turner's avatar David 'Digit' Turner Committed by Android Git Automerger
Browse files

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.
parents 4ede4f74 5ca449d5
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -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