Merge "libgui: enable EGL_fence_sync usage for exynos5" into jb-mr1-dev
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 0a633f0..b8506ee 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -39,8 +39,6 @@
#include <cutils/log.h>
#include <cutils/properties.h>
-#include <EGL/egl.h>
-
#include "Layer.h" // needed only for debugging
#include "LayerBase.h"
#include "HWComposer.h"
@@ -108,7 +106,6 @@
: mFlinger(flinger),
mModule(0), mHwc(0), mList(0), mCapacity(0),
mNumOVLayers(0), mNumFBLayers(0),
- mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE),
mCBContext(new cb_context),
mEventHandler(handler),
mRefreshPeriod(refreshPeriod),
@@ -207,11 +204,6 @@
}
}
-void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
- mDpy = (hwc_display_t)dpy;
- mSur = (hwc_surface_t)sur;
-}
-
status_t HWComposer::createWorkList(size_t numLayers) {
if (mHwc) {
if (!mList || mCapacity < numLayers) {
@@ -270,15 +262,13 @@
return 0;
}
-status_t HWComposer::commit() const {
+status_t HWComposer::commit(void* fbDisplay, void* fbSurface) const {
int err = NO_ERROR;
if (mHwc) {
- err = mHwc->set(mHwc, mDpy, mSur, mList);
+ err = mHwc->set(mHwc, fbDisplay, fbSurface, mList);
if (mList) {
mList->flags &= ~HWC_GEOMETRY_CHANGED;
}
- } else {
- eglSwapBuffers(mDpy, mSur);
}
return (status_t)err;
}
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index c2fff4f..ca41bd3 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -20,8 +20,6 @@
#include <stdint.h>
#include <sys/types.h>
-#include <EGL/egl.h>
-
#include <hardware/hwcomposer_defs.h>
#include <utils/Condition.h>
@@ -63,9 +61,6 @@
status_t initCheck() const;
- // tells the HAL what the framebuffer is
- void setFrameBuffer(EGLDisplay dpy, EGLSurface sur);
-
// Asks the HAL what it can do
status_t prepare() const;
@@ -73,7 +68,7 @@
status_t disable();
// commits the list
- status_t commit() const;
+ status_t commit(void* fbDisplay, void* fbSurface) const;
// release hardware resources and blank screen
status_t release() const;
@@ -234,8 +229,6 @@
size_t mCapacity;
mutable size_t mNumOVLayers;
mutable size_t mNumFBLayers;
- EGLDisplay mDpy;
- EGLSurface mSur;
cb_context* mCBContext;
EventHandler& mEventHandler;
nsecs_t mRefreshPeriod;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 192378f..6cf1128 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -363,8 +363,8 @@
"Initializing graphics H/W...");
// initialize EGL
- EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- eglInitialize(display, NULL, NULL);
+ mEGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ eglInitialize(mEGLDisplay, NULL, NULL);
// Initialize the main display
// create native window to main display
@@ -378,8 +378,8 @@
// initialize the config and context
int format;
window->query(window, NATIVE_WINDOW_FORMAT, &format);
- mEGLConfig = selectEGLConfig(display, format);
- mEGLContext = createGLContext(display, mEGLConfig);
+ mEGLConfig = selectEGLConfig(mEGLDisplay, format);
+ mEGLContext = createGLContext(mEGLDisplay, mEGLConfig);
// initialize our main display hardware
DisplayHardware* const hw = new DisplayHardware(this, 0, anw, mEGLConfig);
@@ -387,7 +387,7 @@
// initialize OpenGL ES
EGLSurface surface = hw->getEGLSurface();
- initializeGL(display, surface);
+ initializeGL(mEGLDisplay, surface);
// start the EventThread
mEventThread = new EventThread(this);
@@ -397,9 +397,6 @@
mHwc = new HWComposer(this,
*static_cast<HWComposer::EventHandler *>(this),
hw->getRefreshPeriod());
- if (mHwc->initCheck() == NO_ERROR) {
- mHwc->setFrameBuffer(display, surface);
- }
// We're now ready to accept clients...
mReadyToRunBarrier.open();
@@ -733,15 +730,16 @@
}
hw.flip(mSwapRegion);
- hwc.commit();
if (hwc.initCheck() == NO_ERROR) {
+ hwc.commit(mEGLDisplay, hw.getEGLSurface());
HWComposer::LayerListIterator cur = hwc.begin();
const HWComposer::LayerListIterator end = hwc.end();
for (size_t i = 0; cur != end && i < numLayers; ++i, ++cur) {
layers[i]->onLayerDisplayed(&*cur);
}
} else {
+ eglSwapBuffers(mEGLDisplay, hw.getEGLSurface());
for (size_t i = 0; i < numLayers; i++) {
layers[i]->onLayerDisplayed(NULL);
}
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index c33f1a3..a3d8538 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -390,6 +390,7 @@
GLint mMaxTextureSize;
EGLContext mEGLContext;
EGLConfig mEGLConfig;
+ EGLDisplay mEGLDisplay;
// Can only accessed from the main thread, these members
// don't need synchronization