am e7d5a2f9: am 45423465: Merge "fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)" into froyo
Merge commit 'e7d5a2f9ae47d8ea8face3f1e451314ed36f4026' into kraken * commit 'e7d5a2f9ae47d8ea8face3f1e451314ed36f4026': fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)
This commit is contained in:
commit
ddf1dd1353
@ -90,6 +90,8 @@ float DisplayHardware::getRefreshRate() const { return mRefreshRate; }
|
||||
int DisplayHardware::getWidth() const { return mWidth; }
|
||||
int DisplayHardware::getHeight() const { return mHeight; }
|
||||
PixelFormat DisplayHardware::getFormat() const { return mFormat; }
|
||||
uint32_t DisplayHardware::getMaxTextureSize() const { return mMaxTextureSize; }
|
||||
uint32_t DisplayHardware::getMaxViewportDims() const { return mMaxViewportDims; }
|
||||
|
||||
void DisplayHardware::init(uint32_t dpy)
|
||||
{
|
||||
@ -246,6 +248,11 @@ void DisplayHardware::init(uint32_t dpy)
|
||||
LOGI("version : %s", glGetString(GL_VERSION));
|
||||
LOGI("extensions: %s", gl_extensions);
|
||||
|
||||
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
|
||||
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, &mMaxViewportDims);
|
||||
LOGI("GL_MAX_TEXTURE_SIZE = %d", mMaxTextureSize);
|
||||
LOGI("GL_MAX_VIEWPORT_DIMS = %d", mMaxViewportDims);
|
||||
|
||||
#if 0
|
||||
// for drivers that don't have proper support for flushing cached buffers
|
||||
// on gralloc unlock, uncomment this block and test for the specific
|
||||
@ -273,6 +280,7 @@ void DisplayHardware::init(uint32_t dpy)
|
||||
#warning "EGL_ANDROID_image_native_buffer not supported"
|
||||
#endif
|
||||
|
||||
|
||||
// Unbind the context from this thread
|
||||
eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
|
||||
|
@ -76,6 +76,8 @@ public:
|
||||
PixelFormat getFormat() const;
|
||||
uint32_t getFlags() const;
|
||||
void makeCurrent() const;
|
||||
uint32_t getMaxTextureSize() const;
|
||||
uint32_t getMaxViewportDims() const;
|
||||
|
||||
uint32_t getPageFlipCount() const;
|
||||
EGLDisplay getEGLDisplay() const { return mDisplay; }
|
||||
@ -104,6 +106,8 @@ private:
|
||||
PixelFormat mFormat;
|
||||
uint32_t mFlags;
|
||||
mutable uint32_t mPageFlipCount;
|
||||
GLint mMaxViewportDims;
|
||||
GLint mMaxTextureSize;
|
||||
|
||||
sp<FramebufferNativeWindow> mNativeWindow;
|
||||
overlay_control_device_t* mOverlayEngine;
|
||||
|
@ -41,6 +41,10 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
template <typename T> inline T min(T a, T b) {
|
||||
return a<b ? a : b;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const uint32_t Layer::typeInfo = LayerBaseClient::typeInfo | 4;
|
||||
@ -109,17 +113,26 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h,
|
||||
|
||||
// the display's pixel format
|
||||
const DisplayHardware& hw(graphicPlane(0).displayHardware());
|
||||
uint32_t const maxSurfaceDims = min(
|
||||
hw.getMaxTextureSize(), hw.getMaxViewportDims());
|
||||
|
||||
// never allow a surface larger than what our underlying GL implementation
|
||||
// can handle.
|
||||
if ((uint32_t(w)>maxSurfaceDims) || (uint32_t(h)>maxSurfaceDims)) {
|
||||
return BAD_VALUE;
|
||||
}
|
||||
|
||||
PixelFormatInfo displayInfo;
|
||||
getPixelFormatInfo(hw.getFormat(), &displayInfo);
|
||||
const uint32_t hwFlags = hw.getFlags();
|
||||
|
||||
mFormat = format;
|
||||
mWidth = w;
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user