summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarissa Wall <marissaw@google.com>2017-03-02 22:10:07 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-02 22:10:07 +0000
commitedb5d3c50ce845c0a108651b6fbd6b1cc7570fc1 (patch)
tree6f0195470c930a986bbb0b078cdf244cda8b22bf
parent9f52aeef0a29c2df7e5358d9e37724e69292d794 (diff)
parentdf4e35671b2475b8aa90e1047e48012f76802421 (diff)
downloadflounder-edb5d3c50ce845c0a108651b6fbd6b1cc7570fc1.tar.gz
hwc2: set layer visible region
am: df4e35671b Change-Id: I255f897aabe5dae3bca11fe10c873407af0965bc
-rw-r--r--hwc2/hwc2.cpp8
-rw-r--r--hwc2/hwc2.h10
-rw-r--r--hwc2/hwc2_buffer.cpp12
-rw-r--r--hwc2/hwc2_dev.cpp7
-rw-r--r--hwc2/hwc2_display.cpp12
-rw-r--r--hwc2/hwc2_layer.cpp5
6 files changed, 49 insertions, 5 deletions
diff --git a/hwc2/hwc2.cpp b/hwc2/hwc2.cpp
index 9da3561..f6ed40d 100644
--- a/hwc2/hwc2.cpp
+++ b/hwc2/hwc2.cpp
@@ -322,11 +322,11 @@ hwc2_error_t set_layer_transform(hwc2_device_t *device, hwc2_display_t display,
return dev->set_layer_transform(display, layer, transform);
}
-hwc2_error_t set_layer_visible_region(hwc2_device_t* /*device*/,
- hwc2_display_t /*display*/, hwc2_layer_t /*layer*/,
- hwc_region_t /*visible*/)
+hwc2_error_t set_layer_visible_region(hwc2_device_t *device,
+ hwc2_display_t display, hwc2_layer_t layer, hwc_region_t visible)
{
- return HWC2_ERROR_NONE;
+ hwc2_dev *dev = reinterpret_cast<hwc2_context *>(device)->hwc2_dev;
+ return dev->set_layer_visible_region(display, layer, visible);
}
hwc2_error_t set_layer_z_order(hwc2_device_t *device, hwc2_display_t display,
diff --git a/hwc2/hwc2.h b/hwc2/hwc2.h
index fc4ed06..423f589 100644
--- a/hwc2/hwc2.h
+++ b/hwc2/hwc2.h
@@ -63,6 +63,7 @@ public:
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);
+ hwc2_error_t set_visible_region(const hwc_region_t &visible_region);
private:
/* A handle to the buffer */
@@ -100,6 +101,10 @@ private:
/* The rotation or flip of the buffer */
hwc_transform_t transform;
+
+ /* The portion of the layer that is visible including portions under
+ * translucent areas of other buffers */
+ std::vector<hwc_rect_t> visible_region;
};
class hwc2_config {
@@ -170,6 +175,7 @@ public:
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);
+ hwc2_error_t set_visible_region(const hwc_region_t &visible_region);
static hwc2_layer_t get_next_id();
@@ -242,6 +248,8 @@ public:
hwc2_error_t set_layer_plane_alpha(hwc2_layer_t lyr_id, float plane_alpha);
hwc2_error_t set_layer_transform(hwc2_layer_t lyr_id,
hwc_transform_t transform);
+ hwc2_error_t set_layer_visible_region(hwc2_layer_t lyr_id,
+ const hwc_region_t &visible_region);
hwc2_error_t set_layer_color(hwc2_layer_t lyr_id, const hwc_color_t &color);
hwc2_error_t set_cursor_position(hwc2_layer_t lyr_id, int32_t x, int32_t y);
@@ -338,6 +346,8 @@ public:
hwc2_layer_t lyr_id, float plane_alpha);
hwc2_error_t set_layer_transform(hwc2_display_t dpy_id, hwc2_layer_t lyr_id,
hwc_transform_t transform);
+ hwc2_error_t set_layer_visible_region(hwc2_display_t dpy_id,
+ hwc2_layer_t lyr_id, const hwc_region_t &visible_region);
hwc2_error_t set_layer_color(hwc2_display_t dpy_id, hwc2_layer_t lyr_id,
const hwc_color_t &color);
hwc2_error_t set_cursor_position(hwc2_display_t dpy_id, hwc2_layer_t lyr_id,
diff --git a/hwc2/hwc2_buffer.cpp b/hwc2/hwc2_buffer.cpp
index 7bd2361..2344eb4 100644
--- a/hwc2/hwc2_buffer.cpp
+++ b/hwc2/hwc2_buffer.cpp
@@ -28,7 +28,8 @@ hwc2_buffer::hwc2_buffer()
surface_damage(),
blend_mode(HWC2_BLEND_MODE_NONE),
plane_alpha(1.0),
- transform() { }
+ transform(),
+ visible_region() { }
hwc2_buffer::~hwc2_buffer()
{
@@ -124,3 +125,12 @@ hwc2_error_t hwc2_buffer::set_transform(const hwc_transform_t transform)
return HWC2_ERROR_NONE;
}
+
+hwc2_error_t hwc2_buffer::set_visible_region(const hwc_region_t &visible_region)
+{
+ this->visible_region.clear();
+ for (size_t idx = 0; idx < visible_region.numRects; idx++)
+ this->visible_region.push_back(visible_region.rects[idx]);
+
+ return HWC2_ERROR_NONE;
+}
diff --git a/hwc2/hwc2_dev.cpp b/hwc2/hwc2_dev.cpp
index 294272b..cbe9bc2 100644
--- a/hwc2/hwc2_dev.cpp
+++ b/hwc2/hwc2_dev.cpp
@@ -247,6 +247,13 @@ hwc2_error_t hwc2_dev::set_layer_transform(hwc2_display_t dpy_id,
return displays.find(dpy_id)->second.set_layer_transform(lyr_id, transform);
}
+hwc2_error_t hwc2_dev::set_layer_visible_region(hwc2_display_t dpy_id,
+ hwc2_layer_t lyr_id, const hwc_region_t &visible_region)
+{
+ return displays.find(dpy_id)->second.set_layer_visible_region(lyr_id,
+ visible_region);
+}
+
hwc2_error_t hwc2_dev::set_layer_color(hwc2_display_t dpy_id,
hwc2_layer_t lyr_id, const hwc_color_t &color)
{
diff --git a/hwc2/hwc2_display.cpp b/hwc2/hwc2_display.cpp
index c84d36b..983bba7 100644
--- a/hwc2/hwc2_display.cpp
+++ b/hwc2/hwc2_display.cpp
@@ -382,6 +382,18 @@ hwc2_error_t hwc2_display::set_layer_transform(hwc2_layer_t lyr_id,
return it->second.set_transform(transform);
}
+hwc2_error_t hwc2_display::set_layer_visible_region(hwc2_layer_t lyr_id,
+ const hwc_region_t &visible_region)
+{
+ 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_visible_region(visible_region);
+}
+
hwc2_error_t hwc2_display::set_layer_color(hwc2_layer_t lyr_id,
const hwc_color_t& /*color*/)
{
diff --git a/hwc2/hwc2_layer.cpp b/hwc2/hwc2_layer.cpp
index 65e9b84..125f28f 100644
--- a/hwc2/hwc2_layer.cpp
+++ b/hwc2/hwc2_layer.cpp
@@ -107,6 +107,11 @@ hwc2_error_t hwc2_layer::set_transform(const hwc_transform_t transform)
return buffer.set_transform(transform);
}
+hwc2_error_t hwc2_layer::set_visible_region(const hwc_region_t &visible_region)
+{
+ return buffer.set_visible_region(visible_region);
+}
+
hwc2_layer_t hwc2_layer::get_next_id()
{
return layer_cnt++;