summaryrefslogtreecommitdiff
path: root/kms++/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2017-04-16 19:07:40 +0300
committerTomi Valkeinen <tomi.valkeinen@ti.com>2017-04-21 15:36:59 +0300
commitcfc1318f7ac480622f5bd70f1f9fbf97fe7d906d (patch)
tree91bdbf77bb4f7d455e91888edadadfcd4f417759 /kms++/src
parent66f161d0032ede1890e9f1a67387a76cadbe2ffa (diff)
Return primary plane already associated with the CRTC if it exists
The Crtc::get_primary_plane() method returns the first primary plane that supports the CRTC. While being correct, this could lead to multiple primary planes being associated with the CRTC, which can confuse applications. To avoid that, return insead the primary plane already associated with the CRTC if one exists, otherwise keep the current behaviour. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'kms++/src')
-rw-r--r--kms++/src/crtc.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/kms++/src/crtc.cpp b/kms++/src/crtc.cpp
index 2d41bfa..c391f69 100644
--- a/kms++/src/crtc.cpp
+++ b/kms++/src/crtc.cpp
@@ -95,13 +95,21 @@ int Crtc::disable_plane(Plane* plane)
Plane* Crtc::get_primary_plane()
{
+ Plane *primary = nullptr;
+
for (Plane* p : get_possible_planes()) {
if (p->plane_type() != PlaneType::Primary)
continue;
- return p;
+ if (p->crtc_id() == id())
+ return p;
+
+ primary = p;
}
+ if (primary)
+ return primary;
+
throw invalid_argument(string("No primary plane for crtc ") + to_string(id()));
}