Require minimum 4 bit stencil for layers.

bug:19270131
Change-Id: I81367179d268e7c1642259c456c1f3d0018f6c0d
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 30935d5..f1ec8ae 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1262,7 +1262,7 @@
         endTiling();
 
         RenderBuffer* buffer = mCaches.renderBufferCache.get(
-                Stencil::getSmallestStencilFormat(),
+                Stencil::getLayerStencilFormat(),
                 layer->getWidth(), layer->getHeight());
         layer->setStencilRenderBuffer(buffer);
 
diff --git a/libs/hwui/renderstate/Stencil.cpp b/libs/hwui/renderstate/Stencil.cpp
index cedb233..92a057d 100644
--- a/libs/hwui/renderstate/Stencil.cpp
+++ b/libs/hwui/renderstate/Stencil.cpp
@@ -42,12 +42,17 @@
     return STENCIL_BUFFER_SIZE;
 }
 
-GLenum Stencil::getSmallestStencilFormat() {
+/**
+ * This method will return either GL_STENCIL_INDEX4_OES if supported,
+ * GL_STENCIL_INDEX8 if not.
+ *
+ * Layers can't use a single bit stencil because multi-rect ClipArea needs a high enough
+ * stencil resolution to represent the summation of multiple intersecting rect geometries.
+ */
+GLenum Stencil::getLayerStencilFormat() {
 #if !DEBUG_STENCIL
     const Extensions& extensions = Caches::getInstance().extensions();
-    if (extensions.has1BitStencil()) {
-        return GL_STENCIL_INDEX1_OES;
-    } else if (extensions.has4BitStencil()) {
+    if (extensions.has4BitStencil()) {
         return GL_STENCIL_INDEX4_OES;
     }
 #endif
diff --git a/libs/hwui/renderstate/Stencil.h b/libs/hwui/renderstate/Stencil.h
index e4f0f3f..3a8f8eb 100644
--- a/libs/hwui/renderstate/Stencil.h
+++ b/libs/hwui/renderstate/Stencil.h
@@ -42,10 +42,7 @@
      */
     ANDROID_API static uint8_t getStencilSize();
 
-    /**
-     * Returns the smallest stencil format accepted by render buffers.
-     */
-    static GLenum getSmallestStencilFormat();
+    static GLenum getLayerStencilFormat();
 
     /**
      * Clears the stencil buffer.