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
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 72f73f7..2708a90 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -179,7 +179,7 @@
                 b.left, b.top, b.width(), b.height());
     } 
 #endif
-    
+
     mPageFlipCount++;
 }
 
@@ -188,14 +188,21 @@
         // 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().
         }
     }
 }