summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2012-09-19 22:30:55 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-19 22:30:56 -0700
commit1887af43a5dd5181f4582a6090ae25c7aa17fa4a (patch)
tree17034472dfd405f1a0902487aad30eae089f4559
parent2a60824abcbfc2c5b936d3711d6d32318c489e88 (diff)
parentf21cffa7d707dad10b2974c58c91482f7ca689ac (diff)
downloadframeworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.zip
frameworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.tar.gz
frameworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.tar.bz2
Merge "Allow 16-bit color EGLConfigs" into jb-mr1-dev
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp38
1 files changed, 27 insertions, 11 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index a1e72a4..c99f250 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -268,25 +268,41 @@ EGLConfig SurfaceFlinger::selectEGLConfig(EGLDisplay display, EGLint nativeVisua
EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ // The rest of the attributes must be in this order and at the end
+ // of the list; we rely on that for fallback searches below.
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
- // EGL_RECORDABLE_ANDROID must be last so that we can retry
- // without it easily (see below)
EGL_RECORDABLE_ANDROID, EGL_TRUE,
EGL_NONE
};
err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config);
- if (err) {
- // maybe we failed because of EGL_RECORDABLE_ANDROID
- ALOGW("couldn't find an EGLConfig with EGL_RECORDABLE_ANDROID");
- attribs[NELEM(attribs) - 3] = EGL_NONE;
- err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config);
- }
- ALOGE_IF(err, "couldn't find an EGLConfig matching the screen format");
- if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy) == EGL_TRUE) {
+ if (!err)
+ goto success;
+
+ // maybe we failed because of EGL_RECORDABLE_ANDROID
+ ALOGW("no suitable EGLConfig found, trying without EGL_RECORDABLE_ANDROID");
+ attribs[NELEM(attribs) - 3] = EGL_NONE;
+ err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config);
+ if (!err)
+ goto success;
+
+ // allow less than 24-bit color; the non-gpu-accelerated emulator only
+ // supports 16-bit color
+ ALOGW("no suitable EGLConfig found, trying with 16-bit color allowed");
+ attribs[NELEM(attribs) - 9] = EGL_NONE;
+ err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config);
+ if (!err)
+ goto success;
+
+ // this EGL is too lame for Android
+ ALOGE("no suitable EGLConfig found, giving up");
+
+ return 0;
+
+success:
+ if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy))
ALOGW_IF(dummy == EGL_SLOW_CONFIG, "EGL_SLOW_CONFIG selected!");
- }
return config;
}