diff options
Diffstat (limited to 'libs/surfaceflinger/Layer.cpp')
| -rw-r--r-- | libs/surfaceflinger/Layer.cpp | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index c0805137f2..7ca7875366 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -156,7 +156,11 @@ void Layer::reloadTexture(const Region& dirty)      if (mFlags & DisplayHardware::DIRECT_TEXTURE) {          if (buffer->usage & GraphicBuffer::USAGE_HW_TEXTURE) {              if (mTextures[index].dirty) { -                initializeEglImage(buffer, &mTextures[index]); +                if (initializeEglImage(buffer, &mTextures[index]) != NO_ERROR) { +                    // not sure what we can do here... +                    mFlags &= ~DisplayHardware::DIRECT_TEXTURE; +                    goto slowpath; +                }              }          } else {              if (mHybridBuffer==0 || (mHybridBuffer->width != buffer->width || @@ -166,8 +170,13 @@ void Layer::reloadTexture(const Region& dirty)                          buffer->width, buffer->height, buffer->format,                          GraphicBuffer::USAGE_SW_WRITE_OFTEN |                          GraphicBuffer::USAGE_HW_TEXTURE); -                initializeEglImage( -                        mHybridBuffer, &mTextures[0]); +                if (initializeEglImage( +                        mHybridBuffer, &mTextures[0]) != NO_ERROR) { +                    // not sure what we can do here... +                    mFlags &= ~DisplayHardware::DIRECT_TEXTURE; +                    mHybridBuffer.clear(); +                    goto slowpath; +                }              }              GGLSurface t; @@ -236,6 +245,7 @@ void Layer::reloadTexture(const Region& dirty)      } else  #endif      { +slowpath:          for (size_t i=0 ; i<NUM_BUFFERS ; i++) {              mTextures[i].image = EGL_NO_IMAGE_KHR;          }  |