HWC 1.5: Add per-layer damage region

This adds an array of rects to hwc_layer_1_t that define which
portions of that layer's source buffer have been modified. If there
are a non-zero number of rects, then any portion of the source buffer
not touched by one of the rects may safely be assumed to not have
been modified. If no rects are defined, then the whole source buffer
must be assumed to have been modified.

Change-Id: Id5efafee74602ed7d76609180e334ed203c23f7e
diff --git a/include/hardware/hwcomposer.h b/include/hardware/hwcomposer.h
index 3dfb4fd..aa466b3 100644
--- a/include/hardware/hwcomposer.h
+++ b/include/hardware/hwcomposer.h
@@ -299,8 +299,29 @@
              */
             uint8_t planeAlpha;
 
-            /* reserved for future use */
+            /* Pad to 32 bits */
             uint8_t _pad[3];
+
+            /*
+             * Availability: HWC_DEVICE_API_VERSION_1_5
+             *
+             * This defines the region of the source buffer that has been
+             * modified since the last frame.
+             *
+             * If surfaceDamage.numRects > 0, then it may be assumed that any
+             * portion of the source buffer not covered by one of the rects has
+             * not been modified this frame. If surfaceDamage.numRects == 0,
+             * then the whole source buffer must be treated as if it had been
+             * modified.
+             *
+             * If the layer's contents are not modified relative to the prior
+             * prepare/set cycle, surfaceDamage will contain exactly one empty
+             * rect ([0, 0, 0, 0]).
+             *
+             * The damage rects are relative to the pre-transformed buffer, and
+             * their origin is the top-left corner.
+             */
+            hwc_region_t surfaceDamage;
         };
     };
 
@@ -309,13 +330,13 @@
      * For 64-bit mode, this struct is 120 bytes (and 8-byte aligned), and needs
      * to be padded as such to maintain binary compatibility.
      */
-    uint8_t reserved[120 - 96];
+    uint8_t reserved[120 - 112];
 #else
     /*
      * For 32-bit mode, this struct is 96 bytes, and needs to be padded as such
      * to maintain binary compatibility.
      */
-    uint8_t reserved[96 - 76];
+    uint8_t reserved[96 - 84];
 #endif
 
 } hwc_layer_1_t;