From 3330b203039dea366d4981db1408a460134b2d2c Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 5 Oct 2009 17:07:12 -0700 Subject: fix [2167050] glTexImage2D code path buggy in SurfaceFlinger When EGLImage extension is not available, SurfaceFlinger will fallback to using glTexImage2D and glTexSubImage2D instead, which requires 50% more memory and an extra copy. However this code path has never been exercised and had some bugs which this patch fix. Mainly the scale factor wasn't computed right when falling back on glDrawElements. We also fallback to this mode of operation if a buffer doesn't have the adequate usage bits for EGLImage usage. This changes only code that is currently not executed. Some refactoring was needed to keep the change clean. This doesn't change anything functionaly. --- libs/ui/ISurface.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libs/ui/ISurface.cpp') diff --git a/libs/ui/ISurface.cpp b/libs/ui/ISurface.cpp index a2dbe7ff81..4fb38ed983 100644 --- a/libs/ui/ISurface.cpp +++ b/libs/ui/ISurface.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include namespace android { @@ -71,14 +71,14 @@ public: { } - virtual sp requestBuffer(int bufferIdx, int usage) + virtual sp requestBuffer(int bufferIdx, int usage) { Parcel data, reply; data.writeInterfaceToken(ISurface::getInterfaceDescriptor()); data.writeInt32(bufferIdx); data.writeInt32(usage); remote()->transact(REQUEST_BUFFER, data, &reply); - sp buffer = new SurfaceBuffer(reply); + sp buffer = new GraphicBuffer(reply); return buffer; } @@ -139,8 +139,8 @@ status_t BnSurface::onTransact( CHECK_INTERFACE(ISurface, data, reply); int bufferIdx = data.readInt32(); int usage = data.readInt32(); - sp buffer(requestBuffer(bufferIdx, usage)); - return SurfaceBuffer::writeToParcel(reply, buffer.get()); + sp buffer(requestBuffer(bufferIdx, usage)); + return GraphicBuffer::writeToParcel(reply, buffer.get()); } case REGISTER_BUFFERS: { CHECK_INTERFACE(ISurface, data, reply); -- cgit v1.2.3-59-g8ed1b