From d870703d5566490cfdfb389d9336b2b8d3c6cc7a Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 18 Sep 2012 01:21:55 -0700 Subject: [PATCH] fix external displays we were not calling eglSwapBuffers() on external displays because they can't use HWC which caused us to think they didn't have GLES composition. Change-Id: I6cef4ae40b138412d2e6f2acda33c9d222b03a83 --- services/surfaceflinger/DisplayDevice.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 72f73f78a..2708a900a 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -179,7 +179,7 @@ void DisplayDevice::flip(const Region& dirty) const b.left, b.top, b.width(), b.height()); } #endif - + mPageFlipCount++; } @@ -188,14 +188,21 @@ void DisplayDevice::swapBuffers(HWComposer& hwc) const { // no HWC, we call eglSwapBuffers() eglSwapBuffers(mDisplay, mSurface); } else { - if (hwc.hasGlesComposition(mType)) { - if (hwc.supportsFramebufferTarget() || - mType >= DisplayDevice::DISPLAY_VIRTUAL) { - // as of hwc 1.1 we always call eglSwapBuffers, however, - // on older versions of HWC, we need to call it only on - // virtual displays + // We have a valid HWC, but not all displays can use it, in particular + // the virtual displays are on their own. + // TODO: HWC 1.2 will allow virtual displays + if (mType >= DisplayDevice::DISPLAY_VIRTUAL) { + // always call eglSwapBuffers() for virtual displays + eglSwapBuffers(mDisplay, mSurface); + } else if (hwc.supportsFramebufferTarget()) { + // as of hwc 1.1 we always call eglSwapBuffers if we have some + // GLES layers + if (hwc.hasGlesComposition(mType)) { eglSwapBuffers(mDisplay, mSurface); } + } else { + // HWC doesn't have the framebuffer target, we don't call + // eglSwapBuffers(), since this is handled by HWComposer::commit(). } } }