diff --git a/libs/surfaceflinger/Buffer.cpp b/libs/surfaceflinger/Buffer.cpp index 4a7c55e56..65650aadb 100644 --- a/libs/surfaceflinger/Buffer.cpp +++ b/libs/surfaceflinger/Buffer.cpp @@ -106,6 +106,9 @@ status_t Buffer::initSize(uint32_t w, uint32_t h, PixelFormat format, // the requested flags should be honored. usage = reqUsage | BufferAllocator::USAGE_HW_TEXTURE; } + + if (format == PIXEL_FORMAT_RGBX_8888) + format = PIXEL_FORMAT_RGBA_8888; err = allocator.alloc(w, h, format, usage, &handle, &stride); if (err == NO_ERROR) { diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index 62759103d..1e7f1e67c 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -176,6 +176,9 @@ void Layer::reloadTexture(const Region& dirty) // this failed, for instance, because we don't support // NPOT. // FIXME: do something! + LOGD("layer=%p, glEGLImageTargetTexture2DOES(%d) " + "failed err=0x%04x", + this, mTextures[index].image, error); mFlags &= ~DisplayHardware::DIRECT_TEXTURE; } else { // Everything went okay! diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index 1f224884f..e08861d37 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -590,7 +590,8 @@ regular: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_w, texture_h, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); - } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888) { + } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || + t.format == GGL_PIXEL_FORMAT_RGBX_8888) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_w, texture_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); @@ -620,7 +621,8 @@ regular: 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t.data + bounds.top*t.stride*2); - } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888) { + } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || + t.format == GGL_PIXEL_FORMAT_RGBX_8888) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_BYTE,