diff options
| author | Mathias Agopian <mathias@google.com> | 2009-10-05 18:20:39 -0700 |
|---|---|---|
| committer | Mathias Agopian <mathias@google.com> | 2009-10-06 17:24:26 -0700 |
| commit | 351a7073fb60eb3534ec8c69ab263f057a124500 (patch) | |
| tree | a054ba17c87524486ec48c6ac70854a5a5f64240 /libs/surfaceflinger/Layer.cpp | |
| parent | 6f5f5a095a5a4d42fc656cf8c1e6d0f67594f88d (diff) | |
| download | frameworks_base-351a7073fb60eb3534ec8c69ab263f057a124500.zip frameworks_base-351a7073fb60eb3534ec8c69ab263f057a124500.tar.gz frameworks_base-351a7073fb60eb3534ec8c69ab263f057a124500.tar.bz2 | |
fix [2168528] enable glTexImage2D code path in SF for software-only buffers
Diffstat (limited to 'libs/surfaceflinger/Layer.cpp')
| -rw-r--r-- | libs/surfaceflinger/Layer.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index c1f7f27..eb0614f 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -51,6 +51,7 @@ Layer::Layer(SurfaceFlinger* flinger, DisplayID display, const sp<Client>& c, int32_t i) : LayerBaseClient(flinger, display, c, i), mSecure(false), + mNoEGLImageForSwBuffers(false), mNeedsBlending(true), mNeedsDithering(false) { @@ -108,13 +109,15 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h, const DisplayHardware& hw(graphicPlane(0).displayHardware()); PixelFormatInfo displayInfo; getPixelFormatInfo(hw.getFormat(), &displayInfo); - + const uint32_t hwFlags = hw.getFlags(); + mFormat = format; mWidth = w; mHeight = h; mSecure = (flags & ISurfaceComposer::eSecure) ? true : false; mNeedsBlending = (info.h_alpha - info.l_alpha) > 0; - + mNoEGLImageForSwBuffers = !(hwFlags & DisplayHardware::CACHED_BUFFERS); + // we use the red index int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED); int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED); @@ -331,7 +334,15 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const } else { // it's allowed to modify the usage flags here, but generally // the requested flags should be honored. - usage |= GraphicBuffer::USAGE_HW_TEXTURE; + if (mNoEGLImageForSwBuffers) { + if (usage & GraphicBuffer::USAGE_HW_MASK) { + // request EGLImage for h/w buffers only + usage |= GraphicBuffer::USAGE_HW_TEXTURE; + } + } else { + // request EGLImage for all buffers + usage |= GraphicBuffer::USAGE_HW_TEXTURE; + } } return usage; } |
