summaryrefslogtreecommitdiffstats
path: root/libs/ui/GraphicBuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ui/GraphicBuffer.cpp')
-rw-r--r--libs/ui/GraphicBuffer.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp
index ba1fd9c..35e4af3 100644
--- a/libs/ui/GraphicBuffer.cpp
+++ b/libs/ui/GraphicBuffer.cpp
@@ -122,11 +122,20 @@ status_t GraphicBuffer::reallocate(uint32_t w, uint32_t h, PixelFormat f,
status_t GraphicBuffer::initSize(uint32_t w, uint32_t h, PixelFormat format,
uint32_t reqUsage)
{
- if (format == PIXEL_FORMAT_RGBX_8888)
- format = PIXEL_FORMAT_RGBA_8888;
-
GraphicBufferAllocator& allocator = GraphicBufferAllocator::get();
status_t err = allocator.alloc(w, h, format, reqUsage, &handle, &stride);
+
+ if (err<0 && format == PIXEL_FORMAT_RGBX_8888) {
+ /*
+ * There is currently a bug with some gralloc implementations
+ * not supporting RGBX_8888. In this case, we revert to using RGBA_8888
+ * which is not exactly the same, as GL_REPLACE will yield a different
+ * result.
+ */
+ format = PIXEL_FORMAT_RGBA_8888;
+ err = allocator.alloc(w, h, format, reqUsage, &handle, &stride);
+ }
+
if (err == NO_ERROR) {
this->width = w;
this->height = h;