diff options
-rw-r--r-- | libkms++/crtc.cpp | 15 | ||||
-rw-r--r-- | libkms++/crtc.h | 2 | ||||
-rw-r--r-- | tests/db.cpp | 15 |
3 files changed, 19 insertions, 13 deletions
diff --git a/libkms++/crtc.cpp b/libkms++/crtc.cpp index c6d79e9..deadd62 100644 --- a/libkms++/crtc.cpp +++ b/libkms++/crtc.cpp @@ -80,6 +80,21 @@ int Crtc::disable_plane(Plane* plane) return drmModeSetPlane(card().fd(), plane->id(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } +Plane* Crtc::get_primary_plane() +{ + for (Plane* p : get_possible_planes()) { + if (p->plane_type() != PlaneType::Primary) + continue; + + if (p->crtc_id() != id()) + continue; + + return p; + } + + throw invalid_argument("No primary plane for crtc " + id()); +} + int Crtc::page_flip(Framebuffer& fb, void *data) { return drmModePageFlip(card().fd(), id(), fb.id(), DRM_MODE_PAGE_FLIP_EVENT, data); diff --git a/libkms++/crtc.h b/libkms++/crtc.h index 48baf1b..abe6fed 100644 --- a/libkms++/crtc.h +++ b/libkms++/crtc.h @@ -24,6 +24,8 @@ public: int disable_plane(Plane* plane); + Plane* get_primary_plane(); + int page_flip(Framebuffer& fb, void *data); int page_flip(Framebuffer& fb, PageFlipHandlerBase* data) { return page_flip(fb, (void*)data); } diff --git a/tests/db.cpp b/tests/db.cpp index 6b0942e..3e8420b 100644 --- a/tests/db.cpp +++ b/tests/db.cpp @@ -93,19 +93,8 @@ public: int r = m_crtc->set_mode(m_connector, *fb, m_mode); ASSERT(r == 0); - if (m_crtc->card().has_atomic()) { - Plane* root_plane = 0; - for (Plane* p : m_crtc->get_possible_planes()) { - if (p->crtc_id() == m_crtc->id()) { - root_plane = p; - break; - } - } - - FAIL_IF(!root_plane, "No primary plane for crtc %d", m_crtc->id()); - - m_root_plane = root_plane; - } + if (m_crtc->card().has_atomic()) + m_root_plane = m_crtc->get_primary_plane(); if (m_plane) { auto planefb = m_plane_flipper->get_next(); |