summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc
index e387c1b..29ed57e 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc
@@ -34,6 +34,20 @@ bool HardwareDisplayPlaneManagerAtomic::Commit(
HardwareDisplayPlaneList* plane_list,
bool is_sync,
bool test_only) {
+ for (HardwareDisplayPlane* plane : plane_list->old_plane_list) {
+ bool found =
+ std::find(plane_list->plane_list.begin(), plane_list->plane_list.end(),
+ plane) != plane_list->plane_list.end();
+ if (!found) {
+ // This plane is being released, so we need to zero it.
+ plane->set_in_use(false);
+ HardwareDisplayPlaneAtomic* atomic_plane =
+ static_cast<HardwareDisplayPlaneAtomic*>(plane);
+ atomic_plane->SetPlaneData(plane_list->atomic_property_set.get(), 0, 0,
+ gfx::Rect(), gfx::Rect());
+ }
+ }
+
std::vector<base::WeakPtr<CrtcController>> crtcs;
for (HardwareDisplayPlane* plane : plane_list->plane_list) {
HardwareDisplayPlaneAtomic* atomic_plane =
@@ -56,7 +70,6 @@ bool HardwareDisplayPlaneManagerAtomic::Commit(
PLOG(ERROR) << "Failed to commit properties";
return false;
}
- plane_list->atomic_property_set.reset(drmModePropertySetAlloc());
return true;
}