diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2016-02-15 10:16:17 +0200 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2016-02-15 14:15:35 +0200 |
commit | 3b89ca26c2f38fac1fd2c54f1eae006501b24681 (patch) | |
tree | ceea5a2ca3b5657f0e1c0923637a314e0dd7d959 | |
parent | 142a89e4f1a7cef23c2c542f6ec167622b5b5942 (diff) |
kmscube: fix atomic FB_ID set for crtc
-rw-r--r-- | kmscube/kmscube.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/kmscube/kmscube.cpp b/kmscube/kmscube.cpp index d2125a6..b6031c2 100644 --- a/kmscube/kmscube.cpp +++ b/kmscube/kmscube.cpp @@ -445,6 +445,20 @@ public: ret = m_crtc->set_mode(m_connector, *fb, m_mode); FAIL_IF(ret, "failed to set mode"); + 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_plane) { ret = m_crtc->set_plane(m_plane, *planefb, 0, 0, planefb->width(), planefb->height(), @@ -504,7 +518,7 @@ private: AtomicReq req(m_crtc->card()); - req.add(m_crtc, "FB_ID", fb->id()); + req.add(m_root_plane, "FB_ID", fb->id()); if (m_plane) req.add(m_plane, "FB_ID", planefb->id()); @@ -537,6 +551,7 @@ private: Crtc* m_crtc; Plane* m_plane; Videomode m_mode; + Plane* m_root_plane; unique_ptr<Surface> m_surface; unique_ptr<Surface> m_surface2; |