sdm: Add support for single buffer layers

Add support for single buffer layers. Graphics writes to the same
buffer being read by display. For dumb panels, there should be no
idle mode, smart panels should be put in an auto-refresh mode. Also
such layers cannot be sent to framebuffer.
Change-Id: Id4f15239d8edc258524dfddd4e9d72c67cd2406f
CRs-fixed: 1114808
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index bf660b5..d88c9fc 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -769,6 +769,9 @@
     GetUBWCStatsFromMetaData(&cr_stats[0], &(layer_buffer->ubwc_crstats[0]));
   }  // if (getMetaData)
 
+  single_buffer_ = false;
+  getMetaData(const_cast<private_handle_t *>(handle), GET_SINGLE_BUFFER_MODE, &single_buffer_);
+
   return kErrorNone;
 }
 
@@ -888,4 +891,19 @@
   return fence;
 }
 
+bool HWCLayer::IsRotationPresent() {
+  return ((layer_->transform.rotation != 0.0f) ||
+         layer_->transform.flip_horizontal ||
+         layer_->transform.flip_vertical);
+}
+
+bool HWCLayer::IsScalingPresent() {
+  uint32_t src_width  = static_cast<uint32_t>(layer_->src_rect.right - layer_->src_rect.left);
+  uint32_t src_height = static_cast<uint32_t>(layer_->src_rect.bottom - layer_->src_rect.top);
+  uint32_t dst_width  = static_cast<uint32_t>(layer_->dst_rect.right - layer_->dst_rect.left);
+  uint32_t dst_height = static_cast<uint32_t>(layer_->dst_rect.bottom - layer_->dst_rect.top);
+
+  return ((src_width != dst_width) || (dst_height != src_height));
+}
+
 }  // namespace sdm