Implement per-display EGLConfig and configless EGLContext
Bug: 12230666
Change-Id: Icca608b108cbdcab9cf01a9236d8cdbda000a836
Signed-off-by: Jesse Hall <jessehall@google.com>
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 800137b..0d0f98d 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -53,6 +53,7 @@
const sp<SurfaceFlinger>& flinger,
DisplayType type,
int32_t hwcId,
+ int format,
bool isSecure,
const wp<IBinder>& displayToken,
const sp<DisplaySurface>& displaySurface,
@@ -76,9 +77,6 @@
mNativeWindow = new Surface(producer, false);
ANativeWindow* const window = mNativeWindow.get();
- int format;
- window->query(window, NATIVE_WINDOW_FORMAT, &format);
-
// Make sure that composition can never be stalled by a virtual display
// consumer that isn't processing buffers fast enough. We have to do this
// in two places:
@@ -96,6 +94,9 @@
EGLSurface surface;
EGLint w, h;
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ if (config == EGL_NO_CONFIG) {
+ config = RenderEngine::chooseEglConfig(display, format);
+ }
surface = eglCreateWindowSurface(display, config, window, NULL);
eglQuerySurface(display, surface, EGL_WIDTH, &mDisplayWidth);
eglQuerySurface(display, surface, EGL_HEIGHT, &mDisplayHeight);