OSDN Git Service

Revert "Discard framebuffer rendering queues when discarding layers"
authorDave Burke <daveburke@google.com>
Mon, 14 Nov 2011 19:39:30 +0000 (11:39 -0800)
committerThe Android Automerger <android-build@android.com>
Tue, 15 Nov 2011 00:00:12 +0000 (16:00 -0800)
This reverts commit da96f8ac2c1c35a54f3f36e6d776cb386a251d03.

core/java/android/view/GLES20Canvas.java
core/java/android/view/GLES20Layer.java
core/java/android/view/HardwareLayer.java
core/java/android/view/View.java
core/java/android/view/ViewGroup.java
core/jni/android_view_GLES20Canvas.cpp
libs/hwui/Android.mk
libs/hwui/Extensions.h
libs/hwui/LayerRenderer.cpp
libs/hwui/LayerRenderer.h
libs/hwui/OpenGLRenderer.cpp

index ac06d2d..d948ec2 100644 (file)
@@ -154,7 +154,6 @@ class GLES20Canvas extends HardwareCanvas {
     static native void nSetTextureLayerTransform(int layerId, int matrix);
     static native void nDestroyLayer(int layerId);
     static native void nDestroyLayerDeferred(int layerId);
-    static native void nFlushLayer(int layerId);
     static native boolean nCopyLayer(int layerId, int bitmap);
 
     ///////////////////////////////////////////////////////////////////////////
index 4f25792..fd3b9e5 100644 (file)
@@ -60,13 +60,6 @@ abstract class GLES20Layer extends HardwareLayer {
         }
         mLayer = 0;
     }
-    
-    @Override
-    void flush() {
-        if (mLayer != 0) {
-            GLES20Canvas.nFlushLayer(mLayer);
-        }
-    }
 
     static class Finalizer {
         private int mLayerId;
index d5666f3..28389ab 100644 (file)
@@ -116,11 +116,6 @@ abstract class HardwareLayer {
     abstract void destroy();
 
     /**
-     * Flush the render queue associated with this layer.
-     */
-    abstract void flush();
-
-    /**
      * This must be invoked before drawing onto this layer.
      * @param currentCanvas
      */
index 3bddeef..dc46d42 100644 (file)
@@ -10146,12 +10146,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
                 break;
         }
     }
-    
-    void flushLayer() {
-        if (mLayerType == LAYER_TYPE_HARDWARE && mHardwareLayer != null) {
-            mHardwareLayer.flush();
-        }
-    }
 
     /**
      * <p>Returns a hardware layer that can be used to draw this view again
@@ -10164,9 +10158,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
                 !mAttachInfo.mHardwareRenderer.isEnabled()) {
             return null;
         }
-        
-        if (!mAttachInfo.mHardwareRenderer.validate()) return null;
-        
 
         final int width = mRight - mLeft;
         final int height = mBottom - mTop;
@@ -10241,14 +10232,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
      */
     boolean destroyLayer() {
         if (mHardwareLayer != null) {
-            AttachInfo info = mAttachInfo;
-            if (info != null && info.mHardwareRenderer != null &&
-                    info.mHardwareRenderer.isEnabled()) {
-                if (!info.mHardwareRenderer.validate()) {
-                    mHardwareLayer.destroy();
-                    mHardwareLayer = null;                    
-                }
-            }
+            mHardwareLayer.destroy();
+            mHardwareLayer = null;
             return true;
         }
         return false;
index 50b34b0..e366e72 100644 (file)
@@ -2957,16 +2957,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         if (enabled != mDrawLayers) {
             mDrawLayers = enabled;
             invalidate(true);
-            
-            AttachInfo info = mAttachInfo;
-            if (info != null && info.mHardwareRenderer != null &&
-                    info.mHardwareRenderer.isEnabled()) {
-                if (!info.mHardwareRenderer.validate()) {
-                    enabled = false;
-                }
-            } else {
-                enabled = false;
-            }
 
             // We need to invalidate any child with a layer. For instance,
             // if a child is backed by a hardware layer and we disable layers
@@ -2978,7 +2968,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
             for (int i = 0; i < mChildrenCount; i++) {
                 View child = mChildren[i];
                 if (child.mLayerType != LAYER_TYPE_NONE) {
-                    if (!enabled) child.flushLayer();
                     child.invalidate(true);
                 }
             }
index 78b8e8e..4f75fad 100644 (file)
@@ -718,10 +718,6 @@ static void android_view_GLES20Canvas_destroyLayerDeferred(JNIEnv* env,
     LayerRenderer::destroyLayerDeferred(layer);
 }
 
-static void android_view_GLES20Canvas_flushLayer(JNIEnv* env, jobject clazz, Layer* layer) {
-    LayerRenderer::flushLayer(layer);
-}
-
 static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
         OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y, SkPaint* paint) {
     renderer->drawLayer(layer, x, y, paint);
@@ -864,7 +860,6 @@ static JNINativeMethod gMethods[] = {
     { "nSetTextureLayerTransform", "(II)V",    (void*) android_view_GLES20Canvas_setTextureLayerTransform },
     { "nDestroyLayer",           "(I)V",       (void*) android_view_GLES20Canvas_destroyLayer },
     { "nDestroyLayerDeferred",   "(I)V",       (void*) android_view_GLES20Canvas_destroyLayerDeferred },
-    { "nFlushLayer",             "(I)V",       (void*) android_view_GLES20Canvas_flushLayer },
     { "nDrawLayer",              "(IIFFI)V",   (void*) android_view_GLES20Canvas_drawLayer },
     { "nCopyLayer",              "(II)Z",      (void*) android_view_GLES20Canvas_copyLayer },
 
index 95e0a18..9bfc94c 100644 (file)
@@ -38,7 +38,7 @@ ifeq ($(USE_OPENGL_RENDERER),true)
                external/skia/src/ports \
                external/skia/include/utils
 
-       LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DGL_GLEXT_PROTOTYPES
+       LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER
        LOCAL_CFLAGS += -fvisibility=hidden
        LOCAL_MODULE_CLASS := SHARED_LIBRARIES
        LOCAL_SHARED_LIBRARIES := libcutils libutils libGLESv2 libskia libui
index 48e4247..38d1130 100644 (file)
@@ -66,7 +66,6 @@ public:
 
         mHasNPot = hasExtension("GL_OES_texture_npot");
         mHasFramebufferFetch = hasExtension("GL_NV_shader_framebuffer_fetch");
-        mHasDiscardFramebuffer = hasExtension("GL_EXT_discard_framebuffer");
 
         const char* vendor = (const char*) glGetString(GL_VENDOR);
         EXT_LOGD("Vendor: %s", vendor);
@@ -81,7 +80,6 @@ public:
     inline bool hasNPot() const { return mHasNPot; }
     inline bool hasFramebufferFetch() const { return mHasFramebufferFetch; }
     inline bool needsHighpTexCoords() const { return mNeedsHighpTexCoords; }
-    inline bool hasDiscardFramebuffer() const { return mHasDiscardFramebuffer; }
 
     bool hasExtension(const char* extension) const {
         const String8 s(extension);
@@ -100,7 +98,6 @@ private:
     bool mHasNPot;
     bool mNeedsHighpTexCoords;
     bool mHasFramebufferFetch;
-    bool mHasDiscardFramebuffer;
 }; // class Extensions
 
 }; // namespace uirenderer
index b7c079b..e38b479 100644 (file)
@@ -305,10 +305,8 @@ void LayerRenderer::destroyLayer(Layer* layer) {
         LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d",
                 layer->getWidth(), layer->getHeight(), layer->getFbo());
 
-        GLuint fbo = layer->getFbo();
-        if (fbo) {
-            flushLayer(layer);
-            Caches::getInstance().fboCache.put(fbo);
+        if (layer->getFbo()) {
+            Caches::getInstance().fboCache.put(layer->getFbo());
         }
 
         if (!Caches::getInstance().layerCache.put(layer)) {
@@ -333,26 +331,6 @@ void LayerRenderer::destroyLayerDeferred(Layer* layer) {
     }
 }
 
-void LayerRenderer::flushLayer(Layer* layer) {
-#ifdef GL_EXT_discard_framebuffer
-    GLuint fbo = layer->getFbo();
-    if (layer && fbo) {
-        // If possible, discard any enqued operations on deferred
-        // rendering architectures
-        if (Caches::getInstance().extensions.hasDiscardFramebuffer()) {
-            GLuint previousFbo;
-            glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &previousFbo);
-
-            GLenum attachments = GL_COLOR_ATTACHMENT0;
-            glBindFramebuffer(GL_FRAMEBUFFER, fbo);
-            glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, &attachments);
-
-            glBindFramebuffer(GL_FRAMEBUFFER, previousFbo);
-        }
-    }
-#endif
-}
-
 bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) {
     Caches& caches = Caches::getInstance();
     if (layer && layer->isTextureLayer() && bitmap->width() <= caches.maxTextureSize &&
index 72d8d81..6104301 100644 (file)
@@ -61,7 +61,6 @@ public:
             bool isOpaque, GLenum renderTarget, float* transform);
     ANDROID_API static void destroyLayer(Layer* layer);
     ANDROID_API static void destroyLayerDeferred(Layer* layer);
-    ANDROID_API static void flushLayer(Layer* layer);
     ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap);
 
 private:
index 1a8c199..32595e4 100644 (file)
@@ -611,11 +611,6 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
     }
 
     if (fboLayer) {
-        // Note: No need to use glDiscardFramebufferEXT() since we never
-        //       create/compose layers that are not on screen with this
-        //       code path
-        // See LayerRenderer::destroyLayer(Layer*)
-
         // Detach the texture from the FBO
         glBindFramebuffer(GL_FRAMEBUFFER, current->fbo);
         glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);