diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2017-04-16 19:07:40 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-04-21 15:36:59 +0300 |
commit | cfc1318f7ac480622f5bd70f1f9fbf97fe7d906d (patch) | |
tree | 91bdbf77bb4f7d455e91888edadadfcd4f417759 /kms++/src | |
parent | 66f161d0032ede1890e9f1a67387a76cadbe2ffa (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.cpp | 10 |
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())); } |