diff options
author | Marissa Wall <marissaw@google.com> | 2016-12-01 15:16:21 -0800 |
---|---|---|
committer | Marissa Wall <marissaw@google.com> | 2017-03-02 12:35:06 -0800 |
commit | be36a18d020aed9813f0d5c2d7c0f5e827671a90 (patch) | |
tree | 4793eed207e6595eee57dc061e179f05ddc08bb5 | |
parent | 603115b31b647127cd39c2ddd04c753f3e57e545 (diff) | |
download | flounder-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.cpp | 8 | ||||
-rw-r--r-- | hwc2/hwc2.h | 10 | ||||
-rw-r--r-- | hwc2/hwc2_buffer.cpp | 10 | ||||
-rw-r--r-- | hwc2/hwc2_dev.cpp | 7 | ||||
-rw-r--r-- | hwc2/hwc2_display.cpp | 12 | ||||
-rw-r--r-- | hwc2/hwc2_layer.cpp | 5 |
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); |