Merge "When eglMakeCurrent fails we need to fix the egl state." into lmp-dev
This commit is contained in:
commit
db57cfbd6f
@ -1743,7 +1743,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CC_LIKELY(!mDaltonize && !mHasColorMatrix)) {
|
if (CC_LIKELY(!mDaltonize && !mHasColorMatrix)) {
|
||||||
doComposeSurfaces(hw, dirtyRegion);
|
if (!doComposeSurfaces(hw, dirtyRegion)) return;
|
||||||
} else {
|
} else {
|
||||||
RenderEngine& engine(getRenderEngine());
|
RenderEngine& engine(getRenderEngine());
|
||||||
mat4 colorMatrix = mColorMatrix;
|
mat4 colorMatrix = mColorMatrix;
|
||||||
@ -1762,7 +1762,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
|
|||||||
hw->swapBuffers(getHwComposer());
|
hw->swapBuffers(getHwComposer());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty)
|
bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty)
|
||||||
{
|
{
|
||||||
RenderEngine& engine(getRenderEngine());
|
RenderEngine& engine(getRenderEngine());
|
||||||
const int32_t id = hw->getHwcDisplayId();
|
const int32_t id = hw->getHwcDisplayId();
|
||||||
@ -1775,7 +1775,11 @@ void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const
|
|||||||
if (!hw->makeCurrent(mEGLDisplay, mEGLContext)) {
|
if (!hw->makeCurrent(mEGLDisplay, mEGLContext)) {
|
||||||
ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
|
ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
|
||||||
hw->getDisplayName().string());
|
hw->getDisplayName().string());
|
||||||
return;
|
eglMakeCurrent(mEGLDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||||
|
if(!getDefaultDisplayDevice()->makeCurrent(mEGLDisplay, mEGLContext)) {
|
||||||
|
ALOGE("DisplayDevice::makeCurrent on default display failed. Aborting.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Never touch the framebuffer if we don't have any framebuffer layers
|
// Never touch the framebuffer if we don't have any framebuffer layers
|
||||||
@ -1883,6 +1887,7 @@ void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const
|
|||||||
|
|
||||||
// disable scissor at the end of the frame
|
// disable scissor at the end of the frame
|
||||||
engine.disableScissor();
|
engine.disableScissor();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceFlinger::drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const {
|
void SurfaceFlinger::drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const {
|
||||||
|
@ -377,7 +377,10 @@ private:
|
|||||||
void doComposition();
|
void doComposition();
|
||||||
void doDebugFlashRegions();
|
void doDebugFlashRegions();
|
||||||
void doDisplayComposition(const sp<const DisplayDevice>& hw, const Region& dirtyRegion);
|
void doDisplayComposition(const sp<const DisplayDevice>& hw, const Region& dirtyRegion);
|
||||||
void doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty);
|
|
||||||
|
// compose surfaces for display hw. this fails if using GL and the surface
|
||||||
|
// has been destroyed and is no longer valid.
|
||||||
|
bool doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty);
|
||||||
|
|
||||||
void postFramebuffer();
|
void postFramebuffer();
|
||||||
void drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const;
|
void drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user