summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarissa Wall <marissaw@google.com>2016-12-01 15:16:21 -0800
committerMarissa Wall <marissaw@google.com>2017-03-02 12:35:06 -0800
commitbe36a18d020aed9813f0d5c2d7c0f5e827671a90 (patch)
tree4793eed207e6595eee57dc061e179f05ddc08bb5
parent603115b31b647127cd39c2ddd04c753f3e57e545 (diff)
downloadflounder-be36a18d020aed9813f0d5c2d7c0f5e827671a90.tar.gz
hwc2: set layer surface damage
Test: Add "TARGET_USES_HWC2 := true" to BoardConfig.mk. Recompile. Run testcases: https://android-review.googlesource.com/#/q/project: platform/frameworks/native+branch:master+topic:test-hwc2 Change-Id: I9a6f31255dab04668781c3c18093c99eebcc6735
-rw-r--r--hwc2/hwc2.cpp8
-rw-r--r--hwc2/hwc2.h10
-rw-r--r--hwc2/hwc2_buffer.cpp10
-rw-r--r--hwc2/hwc2_dev.cpp7
-rw-r--r--hwc2/hwc2_display.cpp12
-rw-r--r--hwc2/hwc2_layer.cpp5
6 files changed, 48 insertions, 4 deletions
diff --git a/hwc2/hwc2.cpp b/hwc2/hwc2.cpp
index 387cd7c..7c51a5a 100644
--- a/hwc2/hwc2.cpp
+++ b/hwc2/hwc2.cpp
@@ -258,11 +258,11 @@ hwc2_error_t set_layer_buffer(hwc2_device_t* /*device*/,
return HWC2_ERROR_NONE;
}
-hwc2_error_t set_layer_surface_damage(hwc2_device_t* /*device*/,
- hwc2_display_t /*display*/, hwc2_layer_t /*layer*/,
- hwc_region_t /*damage*/)
+hwc2_error_t set_layer_surface_damage(hwc2_device_t *device,
+ hwc2_display_t display, hwc2_layer_t layer, hwc_region_t damage)
{
- return HWC2_ERROR_NONE;
+ hwc2_dev *dev = reinterpret_cast<hwc2_context *>(device)->hwc2_dev;
+ return dev->set_layer_surface_damage(display, layer, damage);
}
hwc2_error_t set_layer_blend_mode(hwc2_device_t *device, hwc2_display_t display,
diff --git a/hwc2/hwc2.h b/hwc2/hwc2.h
index 5f3d575..91f7414 100644
--- a/hwc2/hwc2.h
+++ b/hwc2/hwc2.h
@@ -36,6 +36,7 @@ public:
hwc2_error_t set_display_frame(const hwc_rect_t &display_frame);
hwc2_error_t set_source_crop(const hwc_frect_t &source_crop);
hwc2_error_t set_z_order(uint32_t z_order);
+ hwc2_error_t set_surface_damage(const hwc_region_t &surface_damage);
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);
@@ -55,6 +56,10 @@ private:
* a buffer with a lesser Z value */
uint32_t z_order;
+ /* The region of the source buffer which has been modified since the
+ * last frame */
+ std::vector<hwc_rect_t> surface_damage;
+
/* The blend mode of the buffer */
hwc2_blend_mode_t blend_mode;
@@ -129,6 +134,7 @@ public:
hwc2_error_t set_display_frame(const hwc_rect_t &display_frame);
hwc2_error_t set_source_crop(const hwc_frect_t &source_crop);
hwc2_error_t set_z_order(uint32_t z_order);
+ hwc2_error_t set_surface_damage(const hwc_region_t &surface_damage);
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);
@@ -195,6 +201,8 @@ public:
hwc2_error_t set_layer_source_crop(hwc2_layer_t lyr_id,
const hwc_frect_t &source_crop);
hwc2_error_t set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_order);
+ hwc2_error_t set_layer_surface_damage(hwc2_layer_t lyr_id,
+ const hwc_region_t &surface_damage);
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);
@@ -286,6 +294,8 @@ public:
hwc2_layer_t lyr_id, const hwc_frect_t &source_crop);
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_surface_damage(hwc2_display_t dpy_id,
+ hwc2_layer_t lyr_id, const hwc_region_t &surface_damage);
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 3c79d7a..632307d 100644
--- a/hwc2/hwc2_buffer.cpp
+++ b/hwc2/hwc2_buffer.cpp
@@ -23,6 +23,7 @@ hwc2_buffer::hwc2_buffer()
display_frame(),
source_crop(),
z_order(0),
+ surface_damage(),
blend_mode(HWC2_BLEND_MODE_NONE),
plane_alpha(1.0),
transform() { }
@@ -55,6 +56,15 @@ hwc2_error_t hwc2_buffer::set_z_order(uint32_t z_order)
return HWC2_ERROR_NONE;
}
+hwc2_error_t hwc2_buffer::set_surface_damage(const hwc_region_t &surface_damage)
+{
+ this->surface_damage.clear();
+ for (size_t idx = 0; idx < surface_damage.numRects; idx++)
+ this->surface_damage.push_back(surface_damage.rects[idx]);
+
+ 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 e1ced5d..8bb2a8b 100644
--- a/hwc2/hwc2_dev.cpp
+++ b/hwc2/hwc2_dev.cpp
@@ -213,6 +213,13 @@ hwc2_error_t hwc2_dev::set_layer_z_order(hwc2_display_t dpy_id,
return displays.find(dpy_id)->second.set_layer_z_order(lyr_id, z_order);
}
+hwc2_error_t hwc2_dev::set_layer_surface_damage(hwc2_display_t dpy_id,
+ hwc2_layer_t lyr_id, const hwc_region_t &surface_damage)
+{
+ return displays.find(dpy_id)->second.set_layer_surface_damage(lyr_id,
+ surface_damage);
+}
+
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 5f42458..e8f1ed2 100644
--- a/hwc2/hwc2_display.cpp
+++ b/hwc2/hwc2_display.cpp
@@ -323,6 +323,18 @@ hwc2_error_t hwc2_display::set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_ord
return it->second.set_z_order(z_order);
}
+hwc2_error_t hwc2_display::set_layer_surface_damage(hwc2_layer_t lyr_id,
+ const hwc_region_t &surface_damage)
+{
+ 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_surface_damage(surface_damage);
+}
+
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 c8f31be..a536709 100644
--- a/hwc2/hwc2_layer.cpp
+++ b/hwc2/hwc2_layer.cpp
@@ -71,6 +71,11 @@ 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_surface_damage(const hwc_region_t &surface_damage)
+{
+ return buffer.set_surface_damage(surface_damage);
+}
+
hwc2_error_t hwc2_layer::set_blend_mode(hwc2_blend_mode_t blend_mode)
{
return buffer.set_blend_mode(blend_mode);