From 22a99f0fc2884227b9d7e46959fcbe6270667efb Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Tue, 20 Aug 2013 16:04:47 -0700 Subject: [PATCH] Fix virtual displays for HWC 1.0 We weren't swapping the buffers. Bug 10366404 Change-Id: I43eb7648231bedf24899da6fc0d9acc09e0b047e --- services/surfaceflinger/DisplayDevice.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 79b6689c8..ad63cac1c 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -218,13 +218,15 @@ status_t DisplayDevice::prepareFrame(const HWComposer& hwc) const { } void DisplayDevice::swapBuffers(HWComposer& hwc) const { - // We need to call eglSwapBuffers() unless: - // (a) there was no GLES composition this frame, or - // (b) we're using a legacy HWC with no framebuffer target support (in - // which case HWComposer::commit() handles things). + // We need to call eglSwapBuffers() if: + // (1) we don't have a hardware composer, or + // (2) we did GLES composition this frame, and either + // (a) we have framebuffer target support (not present on legacy + // devices, where HWComposer::commit() handles things); or + // (b) this is a virtual display if (hwc.initCheck() != NO_ERROR || (hwc.hasGlesComposition(mHwcDisplayId) && - hwc.supportsFramebufferTarget())) { + (hwc.supportsFramebufferTarget() || mType >= DISPLAY_VIRTUAL))) { EGLBoolean success = eglSwapBuffers(mDisplay, mSurface); if (!success) { EGLint error = eglGetError();