drm_hwcomposer: Allow for multiple transforms at once

Because sometimes one just ain't enough, allow more than
one transform at a time.

Bug: chrome-os-partner:46710
Test: Tested with the CTS Verifier "Camera Orientation" test

Change-Id: Ie5f9bbbc7c89964feafc78150e18512861c85b69
Signed-off-by: Sean Paul <seanpaul@chromium.org>
diff --git a/glworker.cpp b/glworker.cpp
index 0b98a51..7f154aa 100644
--- a/glworker.cpp
+++ b/glworker.cpp
@@ -332,40 +332,34 @@
     cmd.texture_count++;
     src.texture_index = texture_index;
 
-    bool swap_xy, flip_xy[2];
-    switch (layer.transform) {
-      case DrmHwcTransform::kFlipH:
-        swap_xy = false;
-        flip_xy[0] = true;
-        flip_xy[1] = false;
-        break;
-      case DrmHwcTransform::kFlipV:
-        swap_xy = false;
-        flip_xy[0] = false;
-        flip_xy[1] = true;
-        break;
-      case DrmHwcTransform::kRotate90:
-        swap_xy = true;
-        flip_xy[0] = false;
-        flip_xy[1] = true;
-        break;
-      case DrmHwcTransform::kRotate180:
-        swap_xy = false;
+    bool swap_xy = false;
+    bool flip_xy[2] = { false, false };
+
+    if (layer.transform == DrmHwcTransform::kRotate180) {
+      swap_xy = false;
+      flip_xy[0] = true;
+      flip_xy[1] = true;
+    } else if (layer.transform == DrmHwcTransform::kRotate270) {
+      swap_xy = true;
+      flip_xy[0] = true;
+      flip_xy[1] = false;
+    } else if (layer.transform & DrmHwcTransform::kRotate90) {
+      swap_xy = true;
+      if (layer.transform & DrmHwcTransform::kFlipH) {
         flip_xy[0] = true;
         flip_xy[1] = true;
-        break;
-      case DrmHwcTransform::kRotate270:
-        swap_xy = true;
-        flip_xy[0] = true;
-        flip_xy[1] = false;
-        break;
-      default:
-        ALOGE("Unknown transform for layer: defaulting to identity transform");
-      case DrmHwcTransform::kIdentity:
-        swap_xy = false;
+      } else if (layer.transform & DrmHwcTransform::kFlipV) {
         flip_xy[0] = false;
         flip_xy[1] = false;
-        break;
+      } else {
+        flip_xy[0] = false;
+        flip_xy[1] = true;
+      }
+    } else {
+      if (layer.transform & DrmHwcTransform::kFlipH)
+        flip_xy[0] = true;
+      if (layer.transform & DrmHwcTransform::kFlipV)
+        flip_xy[1] = true;
     }
 
     if (swap_xy)