summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarissa Wall <marissaw@google.com>2017-03-02 22:09:43 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-02 22:09:43 +0000
commit4c3a68a62efe830ee0a9cf0838e0ae01917b3b81 (patch)
tree05d493da906b2936eeccfd5bf8e2c054371611ee
parent5be1d258f341d256d66e7ceea07a60d7f85a423e (diff)
parentdfc49da4c8876680a4a556d833fcb98ce8908da8 (diff)
downloadflounder-4c3a68a62efe830ee0a9cf0838e0ae01917b3b81.tar.gz
hwc2: set layer z order
am: dfc49da4c8 Change-Id: I63e9cfa10acb6bfce3ad143d262b7a8a70d9f487
-rw-r--r--hwc2/hwc2.cpp7
-rw-r--r--hwc2/hwc2.h9
-rw-r--r--hwc2/hwc2_buffer.cpp8
-rw-r--r--hwc2/hwc2_dev.cpp6
-rw-r--r--hwc2/hwc2_display.cpp11
-rw-r--r--hwc2/hwc2_layer.cpp5
6 files changed, 43 insertions, 3 deletions
diff --git a/hwc2/hwc2.cpp b/hwc2/hwc2.cpp
index 226e42f..a6318e0 100644
--- a/hwc2/hwc2.cpp
+++ b/hwc2/hwc2.cpp
@@ -328,10 +328,11 @@ hwc2_error_t set_layer_visible_region(hwc2_device_t* /*device*/,
return HWC2_ERROR_NONE;
}
-hwc2_error_t set_layer_z_order(hwc2_device_t* /*device*/,
- hwc2_display_t /*display*/, hwc2_layer_t /*layer*/, uint32_t /*z*/)
+hwc2_error_t set_layer_z_order(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, uint32_t z)
{
- return HWC2_ERROR_NONE;
+ hwc2_dev *dev = reinterpret_cast<hwc2_context *>(device)->hwc2_dev;
+ return dev->set_layer_z_order(display, layer, z);
}
/* Indexed using the hwc2_function_descriptor_t enum to find the corresponding
diff --git a/hwc2/hwc2.h b/hwc2/hwc2.h
index 3e0d548..71ed0a1 100644
--- a/hwc2/hwc2.h
+++ b/hwc2/hwc2.h
@@ -33,6 +33,7 @@ public:
/* Set properties */
hwc2_error_t set_dataspace(android_dataspace_t dataspace);
+ hwc2_error_t set_z_order(uint32_t z_order);
hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode);
hwc2_error_t set_plane_alpha(float plane_alpha);
hwc2_error_t set_transform(hwc_transform_t transform);
@@ -42,6 +43,10 @@ private:
* the encoding standard and color transformation */
android_dataspace_t dataspace;
+ /* The height of a given buffer. A buffer with a greater Z value occludes
+ * a buffer with a lesser Z value */
+ uint32_t z_order;
+
/* The blend mode of the buffer */
hwc2_blend_mode_t blend_mode;
@@ -113,6 +118,7 @@ public:
/* Set properties */
hwc2_error_t set_comp_type(hwc2_composition_t comp_type);
hwc2_error_t set_dataspace(android_dataspace_t dataspace);
+ hwc2_error_t set_z_order(uint32_t z_order);
hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode);
hwc2_error_t set_plane_alpha(float plane_alpha);
hwc2_error_t set_transform(hwc_transform_t transform);
@@ -174,6 +180,7 @@ public:
hwc2_composition_t comp_type);
hwc2_error_t set_layer_dataspace(hwc2_layer_t lyr_id,
android_dataspace_t dataspace);
+ hwc2_error_t set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_order);
hwc2_error_t set_layer_blend_mode(hwc2_layer_t lyr_id,
hwc2_blend_mode_t blend_mode);
hwc2_error_t set_layer_plane_alpha(hwc2_layer_t lyr_id, float plane_alpha);
@@ -257,6 +264,8 @@ public:
hwc2_layer_t lyr_id, hwc2_composition_t comp_type);
hwc2_error_t set_layer_dataspace(hwc2_display_t dpy_id, hwc2_layer_t lyr_id,
android_dataspace_t dataspace);
+ hwc2_error_t set_layer_z_order(hwc2_display_t dpy_id, hwc2_layer_t lyr_id,
+ uint32_t z_order);
hwc2_error_t set_layer_blend_mode(hwc2_display_t dpy_id,
hwc2_layer_t lyr_id, hwc2_blend_mode_t blend_mode);
hwc2_error_t set_layer_plane_alpha(hwc2_display_t dpy_id,
diff --git a/hwc2/hwc2_buffer.cpp b/hwc2/hwc2_buffer.cpp
index be0f8f1..60686cf 100644
--- a/hwc2/hwc2_buffer.cpp
+++ b/hwc2/hwc2_buffer.cpp
@@ -20,6 +20,7 @@
hwc2_buffer::hwc2_buffer()
: dataspace(),
+ z_order(0),
blend_mode(HWC2_BLEND_MODE_NONE),
plane_alpha(1.0),
transform() { }
@@ -31,6 +32,13 @@ hwc2_error_t hwc2_buffer::set_dataspace(android_dataspace_t dataspace)
return HWC2_ERROR_NONE;
}
+hwc2_error_t hwc2_buffer::set_z_order(uint32_t z_order)
+{
+ this->z_order = z_order;
+
+ return HWC2_ERROR_NONE;
+}
+
hwc2_error_t hwc2_buffer::set_blend_mode(hwc2_blend_mode_t blend_mode)
{
if (blend_mode == HWC2_BLEND_MODE_INVALID) {
diff --git a/hwc2/hwc2_dev.cpp b/hwc2/hwc2_dev.cpp
index ae2fa78..26c0b53 100644
--- a/hwc2/hwc2_dev.cpp
+++ b/hwc2/hwc2_dev.cpp
@@ -193,6 +193,12 @@ hwc2_error_t hwc2_dev::set_layer_dataspace(hwc2_display_t dpy_id,
return displays.find(dpy_id)->second.set_layer_dataspace(lyr_id, dataspace);
}
+hwc2_error_t hwc2_dev::set_layer_z_order(hwc2_display_t dpy_id,
+ hwc2_layer_t lyr_id, uint32_t z_order)
+{
+ return displays.find(dpy_id)->second.set_layer_z_order(lyr_id, z_order);
+}
+
hwc2_error_t hwc2_dev::set_layer_blend_mode(hwc2_display_t dpy_id,
hwc2_layer_t lyr_id, hwc2_blend_mode_t blend_mode)
{
diff --git a/hwc2/hwc2_display.cpp b/hwc2/hwc2_display.cpp
index d9b46ca..7408be5 100644
--- a/hwc2/hwc2_display.cpp
+++ b/hwc2/hwc2_display.cpp
@@ -288,6 +288,17 @@ hwc2_error_t hwc2_display::set_layer_dataspace(hwc2_layer_t lyr_id,
return it->second.set_dataspace(dataspace);
}
+hwc2_error_t hwc2_display::set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_order)
+{
+ auto it = layers.find(lyr_id);
+ if (it == layers.end()) {
+ ALOGE("dpy %" PRIu64 ": lyr %" PRIu64 ": bad layer handle", id, lyr_id);
+ return HWC2_ERROR_BAD_LAYER;
+ }
+
+ return it->second.set_z_order(z_order);
+}
+
hwc2_error_t hwc2_display::set_layer_blend_mode(hwc2_layer_t lyr_id,
hwc2_blend_mode_t blend_mode)
{
diff --git a/hwc2/hwc2_layer.cpp b/hwc2/hwc2_layer.cpp
index 9b5ef0b..cf873c3 100644
--- a/hwc2/hwc2_layer.cpp
+++ b/hwc2/hwc2_layer.cpp
@@ -56,6 +56,11 @@ hwc2_error_t hwc2_layer::set_dataspace(android_dataspace_t dataspace)
return buffer.set_dataspace(dataspace);
}
+hwc2_error_t hwc2_layer::set_z_order(uint32_t z_order)
+{
+ return buffer.set_z_order(z_order);
+}
+
hwc2_error_t hwc2_layer::set_blend_mode(hwc2_blend_mode_t blend_mode)
{
return buffer.set_blend_mode(blend_mode);