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 @@
     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 @@
     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 @@
 
     /* 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 @@
     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 @@
     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 @@
                     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 @@
       surface_damage(),
       blend_mode(HWC2_BLEND_MODE_NONE),
       plane_alpha(1.0),
-      transform() { }
+      transform(),
+      visible_region() { }
 
 hwc2_buffer::~hwc2_buffer()
 {
@@ -124,3 +125,12 @@
 
     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 @@
     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 @@
     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 @@
     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++;
