HWC2: Add SKIP_CLIENT_COLOR_TRANSFORM capability

Adds HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM, which indicates
that the client should never apply the color transform, even if all
layers are being composed by the client. This allows the device to
use its color management hardware in all cases to avoid any potential
mismatches between client and device application of the transform.

Bug: 29870302
Change-Id: I90234d91858206714e650eadb03227a4a180d975
diff --git a/include/hardware/hwcomposer2.h b/include/hardware/hwcomposer2.h
index f6a6eba..6973603 100644
--- a/include/hardware/hwcomposer2.h
+++ b/include/hardware/hwcomposer2.h
@@ -86,6 +86,12 @@
      * (such as position, size, etc.) need to be performed through the
      * validate/present cycle. */
     HWC2_CAPABILITY_SIDEBAND_STREAM = 1,
+
+    /* Specifies that the device will apply a color transform even when either
+     * the client or the device has chosen that all layers should be composed by
+     * the client. This will prevent the client from applying the color
+     * transform during its composition step. */
+    HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM = 2,
 } hwc2_capability_t;
 
 /* Possible composition types for a given layer */
@@ -325,6 +331,8 @@
     switch (capability) {
         case HWC2_CAPABILITY_INVALID: return "Invalid";
         case HWC2_CAPABILITY_SIDEBAND_STREAM: return "SidebandStream";
+        case HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM:
+                return "SkipClientColorTransform";
         default: return "Unknown";
     }
 }
@@ -540,6 +548,7 @@
 enum class Capability : int32_t {
     Invalid = HWC2_CAPABILITY_INVALID,
     SidebandStream = HWC2_CAPABILITY_SIDEBAND_STREAM,
+    SkipClientColorTransform = HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM,
 };
 TO_STRING(hwc2_capability_t, Capability, getCapabilityName)
 
@@ -1468,6 +1477,10 @@
  * the desired color transform, it should force all layers to client composition
  * during validateDisplay.
  *
+ * If HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM is present, then the client
+ * will never apply the color transform during client composition, even if all
+ * layers are being composed by the client.
+ *
  * The matrix provided is an affine color transformation of the following form:
  *
  * |r.r r.g r.b 0|