xref: /OK3568_Linux_fs/buildroot/package/vkmark/0001-kms-Use-Nth-primary-plane-for-Nth-CRTC.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 38c67d13993fd5454226934a22be558d2a6a8233 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Mon, 23 May 2022 11:46:38 +0800
4*4882a593SmuzhiyunSubject: [PATCH 1/3] kms: Use Nth primary plane for Nth CRTC
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
7*4882a593Smuzhiyun---
8*4882a593Smuzhiyun src/ws/atomic_kms_window_system.cpp | 10 ++++++++--
9*4882a593Smuzhiyun 1 file changed, 8 insertions(+), 2 deletions(-)
10*4882a593Smuzhiyun
11*4882a593Smuzhiyundiff --git a/src/ws/atomic_kms_window_system.cpp b/src/ws/atomic_kms_window_system.cpp
12*4882a593Smuzhiyunindex 1aa7948..b5c2ab5 100644
13*4882a593Smuzhiyun--- a/src/ws/atomic_kms_window_system.cpp
14*4882a593Smuzhiyun+++ b/src/ws/atomic_kms_window_system.cpp
15*4882a593Smuzhiyun@@ -98,6 +98,7 @@ ManagedResource<drmModePlanePtr> get_plane_for_crtc(
16*4882a593Smuzhiyun     if (!plane_resources)
17*4882a593Smuzhiyun         throw ErrnoError{"Failed to get plane resources"};
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun+    auto num_primaries = 0;
20*4882a593Smuzhiyun     for (auto i = 0u; i < plane_resources->count_planes; ++i)
21*4882a593Smuzhiyun     {
22*4882a593Smuzhiyun         auto plane = ManagedResource<drmModePlanePtr>{
23*4882a593Smuzhiyun@@ -107,12 +108,17 @@ ManagedResource<drmModePlanePtr> get_plane_for_crtc(
24*4882a593Smuzhiyun         if (!plane)
25*4882a593Smuzhiyun             throw ErrnoError{"Failed to get plane"};
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun+        if (!is_plane_primary(drm_fd, plane))
28*4882a593Smuzhiyun+            continue;
29*4882a593Smuzhiyun+
30*4882a593Smuzhiyun+        /*  Nth primary plane for Nth CRTC */
31*4882a593Smuzhiyun+        if (num_primaries ++ != crtc_index)
32*4882a593Smuzhiyun+            continue;
33*4882a593Smuzhiyun+
34*4882a593Smuzhiyun         if (does_plane_support_crtc_index(plane, crtc_index))
35*4882a593Smuzhiyun         {
36*4882a593Smuzhiyun             ret_plane = std::move(plane);
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun-            if (is_plane_primary(drm_fd, ret_plane))
39*4882a593Smuzhiyun-                break;
40*4882a593Smuzhiyun         }
41*4882a593Smuzhiyun     }
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun--
44*4882a593Smuzhiyun2.20.1
45*4882a593Smuzhiyun
46