diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 77cbb80..535c0ac 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -154,7 +154,8 @@
     float y1 = 0.0f;
     float v1 = 0.0f;
 
-    for (uint32_t i = 0; i < mYCount; i++) {
+    uint32_t i = 0;
+    for ( ; i < mYCount; i++) {
         float stepY = mYDivs[i];
 
         float y2 = 0.0f;
@@ -166,7 +167,8 @@
         }
         float v2 = fmax(0.0f, stepY - 0.5f) / bitmapHeight;
 
-        generateRow(vertex, y1, y2, v1, v2, stretchX, right - left, bitmapWidth, quadCount);
+        generateRow(vertex, y1, y2, v1, v2, stretchX, right - left,
+                bitmapWidth, quadCount, i & 1);
 
         y1 = y2;
         v1 = (stepY + 0.5f) / bitmapHeight;
@@ -175,7 +177,7 @@
     }
 
     generateRow(vertex, y1, bottom - top, v1, 1.0f, stretchX, right - left,
-            bitmapWidth, quadCount);
+            bitmapWidth, quadCount, i & 1);
 
     if (verticesCount > 0) {
         Caches::getInstance().bindMeshBuffer(meshBuffer);
@@ -193,14 +195,15 @@
 }
 
 void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2,
-        float stretchX, float width, float bitmapWidth, uint32_t& quadCount) {
+        float stretchX, float width, float bitmapWidth, uint32_t& quadCount, bool isStretch) {
     float previousStepX = 0.0f;
 
     float x1 = 0.0f;
     float u1 = 0.0f;
 
     // Generate the row quad by quad
-    for (uint32_t i = 0; i < mXCount; i++) {
+    uint32_t i = 0;
+    for ( ; i < mXCount; i++) {
         float stepX = mXDivs[i];
 
         float x2 = 0.0f;
@@ -212,7 +215,7 @@
         }
         float u2 = fmax(0.0f, stepX - 0.5f) / bitmapWidth;
 
-        bool valid = generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount);
+        generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount, isStretch || (i & 1));
 
         x1 = x2;
         u1 = (stepX + 0.5f) / bitmapWidth;
@@ -220,13 +223,13 @@
         previousStepX = stepX;
     }
 
-    generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount);
+    generateQuad(vertex, x1, y1, width, y2, u1, v1, 1.0f, v2, quadCount, isStretch || (i & 1));
 }
 
-bool Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
-            float u1, float v1, float u2, float v2, uint32_t& quadCount) {
+void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
+            float u1, float v1, float u2, float v2, uint32_t& quadCount, bool isStretch) {
     const uint32_t oldQuadCount = quadCount;
-    const bool valid = x2 >= x1 && y2 >= y1;
+    const bool valid = isStretch || (x2 - x1 > 0.9999f && y2 - y1 > 0.9999f);
     if (valid) {
         quadCount++;
     }
@@ -238,7 +241,7 @@
         PATCH_LOGD("        left,  top    = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1);
         PATCH_LOGD("        right, bottom = %.2f, %.2f\t\tu2, v2 = %.2f, %.2f", x2, y2, u2, v2);
 #endif
-        return false;
+        return;
     }
 
 #if RENDER_LAYERS_AS_REGIONS
@@ -267,8 +270,6 @@
     PATCH_LOGD("        left,  top    = %.2f, %.2f\t\tu1, v1 = %.2f, %.2f", x1, y1, u1, v1);
     PATCH_LOGD("        right, bottom = %.2f, %.2f\t\tu2, v2 = %.2f, %.2f", x2, y2, u2, v2);
 #endif
-
-    return true;
 }
 
 }; // namespace uirenderer
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 45ce998..4de0c76 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -70,11 +70,11 @@
 
     void generateRow(TextureVertex*& vertex, float y1, float y2,
             float v1, float v2, float stretchX, float width, float bitmapWidth,
-            uint32_t& quadCount);
-    bool generateQuad(TextureVertex*& vertex,
+            uint32_t& quadCount, bool isStretch);
+    void generateQuad(TextureVertex*& vertex,
             float x1, float y1, float x2, float y2,
             float u1, float v1, float u2, float v2,
-            uint32_t& quadCount);
+            uint32_t& quadCount, bool isStretch);
 }; // struct Patch
 
 }; // namespace uirenderer
