1From e17351b08ab2a27c549434858650fedd112baaa4 Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Tue, 5 Jul 2022 11:20:42 +0800 4Subject: [PATCH 08/10] ecore_drm2: Ignore other primary planes and support 5 ZPOS 6 7Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 8--- 9 src/lib/ecore_drm2/ecore_drm2_device.c | 5 +++++ 10 src/lib/ecore_drm2/ecore_drm2_fb.c | 3 +++ 11 src/lib/ecore_drm2/ecore_drm2_outputs.c | 11 ++++++++++- 12 src/lib/ecore_drm2/ecore_drm2_private.h | 1 + 13 4 files changed, 19 insertions(+), 1 deletion(-) 14 15diff --git a/src/lib/ecore_drm2/ecore_drm2_device.c b/src/lib/ecore_drm2/ecore_drm2_device.c 16index 77498d8..e8f5347 100644 17--- a/src/lib/ecore_drm2/ecore_drm2_device.c 18+++ b/src/lib/ecore_drm2/ecore_drm2_device.c 19@@ -495,6 +495,11 @@ _drm2_atomic_state_plane_fill(Ecore_Drm2_Plane_State *pstate, int fd) 20 } 21 } 22 } 23+ else if (!strcasecmp(prop->name, "zpos")) 24+ { 25+ pstate->zpos.id = prop->prop_id; 26+ pstate->zpos.value = oprops->prop_values[i]; 27+ } 28 29 sym_drmModeFreeProperty(prop); 30 } 31diff --git a/src/lib/ecore_drm2/ecore_drm2_fb.c b/src/lib/ecore_drm2/ecore_drm2_fb.c 32index e2ef2e8..38c8287 100644 33--- a/src/lib/ecore_drm2/ecore_drm2_fb.c 34+++ b/src/lib/ecore_drm2/ecore_drm2_fb.c 35@@ -396,6 +396,9 @@ _fb_atomic_flip_test(Ecore_Drm2_Output *output) 36 pstate->fid.id, pstate->fid.value); 37 if (ret < 0) goto err; 38 39+ sym_drmModeAtomicAddProperty(req, pstate->obj_id, 40+ pstate->zpos.id, pstate->zpos.value); 41+ 42 ret = 43 sym_drmModeAtomicAddProperty(req, pstate->obj_id, 44 pstate->sx.id, pstate->sx.value); 45diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c b/src/lib/ecore_drm2/ecore_drm2_outputs.c 46index d7ff6a2..2140079 100644 47--- a/src/lib/ecore_drm2/ecore_drm2_outputs.c 48+++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c 49@@ -653,11 +653,20 @@ _output_plane_states_get(Ecore_Drm2_Atomic_State *state, unsigned int crtc_id, i 50 Eina_List *states = NULL; 51 Ecore_Drm2_Plane_State *pstate; 52 53- int i = 0; 54+ int i = 0, num_primaries = 0; 55 56 for (; i < state->planes; i++) 57 { 58 pstate = &state->plane_states[i]; 59+ if (pstate->type.value == DRM_PLANE_TYPE_PRIMARY) { 60+ num_primaries ++; 61+ 62+ if (num_primaries != index + 1) 63+ continue; 64+ 65+ pstate->zpos.value = 0; 66+ } 67+ 68 if (pstate->cid.value == crtc_id) 69 { 70 states = 71diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h 72index 56c9fe8..ccb233f 100644 73--- a/src/lib/ecore_drm2/ecore_drm2_private.h 74+++ b/src/lib/ecore_drm2/ecore_drm2_private.h 75@@ -103,6 +103,7 @@ typedef struct _Ecore_Drm2_Plane_State 76 Ecore_Drm2_Atomic_Property sx, sy, sw, sh; 77 Ecore_Drm2_Atomic_Property cx, cy, cw, ch; 78 Ecore_Drm2_Atomic_Property rotation; 79+ Ecore_Drm2_Atomic_Property zpos; 80 81 /* these are not part of an atomic state, but we store these here 82 * so that we do not have to refetch properties when iterating planes */ 83-- 842.20.1 85 86