* [PATCH 0/2] drm/vkms: Fix plane blending z-order
@ 2025-08-01 14:43 Louis Chauvet
2025-08-01 14:43 ` [PATCH 1/2] drm/vkms: Add zpos property to planes Louis Chauvet
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Louis Chauvet @ 2025-08-01 14:43 UTC (permalink / raw)
To: Haneen Mohammed, Simona Vetter, Melissa Wen, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie
Cc: thomas.petazzoni, dri-devel, linux-kernel, Louis Chauvet
As reported by Marius [1], the current blending algorithm for vkms planes
is not future-proof. Currently the z-ordering is only garanteed by the
creation order. As the future ConfigFS interface will allows to create
planes, this order may vary.
To avoid this, add the zpos property and blend the planes according to
this zpos order.
[1]:https://lore.kernel.org/all/aHpGGxZyimpJ8Ehz@xpredator/
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
Louis Chauvet (2):
drm/vkms: Add zpos property to planes
drm/vkms: Properly order plane for blending
drivers/gpu/drm/vkms/vkms_crtc.c | 26 ++++++++++++++++++++------
drivers/gpu/drm/vkms/vkms_drv.c | 1 +
drivers/gpu/drm/vkms/vkms_plane.c | 12 ++++++++++++
3 files changed, 33 insertions(+), 6 deletions(-)
---
base-commit: 82928cc1c2b2be16ea6ee9e23799ca182e1cd37c
change-id: 20250801-vkms-fix-zpos-1dc6a3f51a50
Best regards,
--
Louis Chauvet <louis.chauvet@bootlin.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] drm/vkms: Add zpos property to planes
2025-08-01 14:43 [PATCH 0/2] drm/vkms: Fix plane blending z-order Louis Chauvet
@ 2025-08-01 14:43 ` Louis Chauvet
2025-08-01 14:43 ` [PATCH 2/2] drm/vkms: Properly order plane for blending Louis Chauvet
2025-09-01 14:52 ` [PATCH 0/2] drm/vkms: Fix plane blending z-order José Expósito
2 siblings, 0 replies; 5+ messages in thread
From: Louis Chauvet @ 2025-08-01 14:43 UTC (permalink / raw)
To: Haneen Mohammed, Simona Vetter, Melissa Wen, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie
Cc: thomas.petazzoni, dri-devel, linux-kernel, Louis Chauvet
Currently no zpos are defined for vkms planes. This is not yet an
issue, but with the future introduction of configfs, we need to have a way
to properly order plane composition.
In order to make it predictable, add zpos=0 for primary, zpos=1 for
overlays and zpos=2 for cursor. This will be configurable later.
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
drivers/gpu/drm/vkms/vkms_plane.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
index e3fdd161d0f0a1d20c14a79dbe51c08c8486d12f..44bf9eedf5a7641f2eb171c8995079ca65dfa04e 100644
--- a/drivers/gpu/drm/vkms/vkms_plane.c
+++ b/drivers/gpu/drm/vkms/vkms_plane.c
@@ -232,5 +232,17 @@ struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev,
DRM_COLOR_YCBCR_BT601,
DRM_COLOR_YCBCR_FULL_RANGE);
+ switch (type) {
+ case DRM_PLANE_TYPE_PRIMARY:
+ drm_plane_create_zpos_immutable_property(&plane->base, 0);
+ break;
+ case DRM_PLANE_TYPE_OVERLAY:
+ drm_plane_create_zpos_immutable_property(&plane->base, 1);
+ break;
+ case DRM_PLANE_TYPE_CURSOR:
+ drm_plane_create_zpos_immutable_property(&plane->base, 2);
+ break;
+ }
+
return plane;
}
--
2.50.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/vkms: Properly order plane for blending
2025-08-01 14:43 [PATCH 0/2] drm/vkms: Fix plane blending z-order Louis Chauvet
2025-08-01 14:43 ` [PATCH 1/2] drm/vkms: Add zpos property to planes Louis Chauvet
@ 2025-08-01 14:43 ` Louis Chauvet
2025-09-01 14:52 ` [PATCH 0/2] drm/vkms: Fix plane blending z-order José Expósito
2 siblings, 0 replies; 5+ messages in thread
From: Louis Chauvet @ 2025-08-01 14:43 UTC (permalink / raw)
To: Haneen Mohammed, Simona Vetter, Melissa Wen, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie
Cc: thomas.petazzoni, dri-devel, linux-kernel, Louis Chauvet
The current blending algorithm requires that vkms_state->active_planes be
ordered by z-order. This has not been an issue so far because the planes
are registered in the correct order in DRM (primary-overlay-cursor).
This new algorithm now uses the configured z-order to populate
active_planes.
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
drivers/gpu/drm/vkms/vkms_crtc.c | 26 ++++++++++++++++++++------
drivers/gpu/drm/vkms/vkms_drv.c | 1 +
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
index e60573e0f3e9510252e1f198b00e28bcc7987620..f3f3ad8ede29987b385d53834970bcd0c6adefa7 100644
--- a/drivers/gpu/drm/vkms/vkms_crtc.c
+++ b/drivers/gpu/drm/vkms/vkms_crtc.c
@@ -200,14 +200,28 @@ static int vkms_crtc_atomic_check(struct drm_crtc *crtc,
vkms_state->num_active_planes = i;
i = 0;
- drm_for_each_plane_mask(plane, crtc->dev, crtc_state->plane_mask) {
- plane_state = drm_atomic_get_existing_plane_state(crtc_state->state, plane);
- if (!plane_state->visible)
- continue;
+ unsigned int current_zpos = 0;
+
+ while (i < vkms_state->num_active_planes) {
+ unsigned int next_zpos = UINT_MAX;
+
+ drm_for_each_plane_mask(plane, crtc->dev, crtc_state->plane_mask) {
+ plane_state = drm_atomic_get_existing_plane_state(crtc_state->state, plane);
+
+ if (!plane_state->visible)
+ continue;
+
+ if (plane_state->normalized_zpos == current_zpos)
+ vkms_state->active_planes[i++] = to_vkms_plane_state(plane_state);
+
+ if (plane_state->normalized_zpos > current_zpos &&
+ plane_state->normalized_zpos < next_zpos)
+ next_zpos = plane_state->normalized_zpos;
+ }
+
+ current_zpos = next_zpos;
- vkms_state->active_planes[i++] =
- to_vkms_plane_state(plane_state);
}
return 0;
diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
index e8472d9b6e3b2b5d6d497763288bf3dc6fde5987..e492791a7a970b768184292bf82318e3fca6b36a 100644
--- a/drivers/gpu/drm/vkms/vkms_drv.c
+++ b/drivers/gpu/drm/vkms/vkms_drv.c
@@ -135,6 +135,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsdev)
dev->mode_config.max_height = YRES_MAX;
dev->mode_config.cursor_width = 512;
dev->mode_config.cursor_height = 512;
+ dev->mode_config.normalize_zpos = true;
/*
* FIXME: There's a confusion between bpp and depth between this and
* fbdev helpers. We have to go with 0, meaning "pick the default",
--
2.50.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 0/2] drm/vkms: Fix plane blending z-order
2025-08-01 14:43 [PATCH 0/2] drm/vkms: Fix plane blending z-order Louis Chauvet
2025-08-01 14:43 ` [PATCH 1/2] drm/vkms: Add zpos property to planes Louis Chauvet
2025-08-01 14:43 ` [PATCH 2/2] drm/vkms: Properly order plane for blending Louis Chauvet
@ 2025-09-01 14:52 ` José Expósito
2025-09-01 15:33 ` Louis Chauvet
2 siblings, 1 reply; 5+ messages in thread
From: José Expósito @ 2025-09-01 14:52 UTC (permalink / raw)
To: louis.chauvet
Cc: airlied, dri-devel, hamohammed.sa, linux-kernel,
maarten.lankhorst, melissa.srw, mripard, simona, thomas.petazzoni,
tzimmermann
Hi Louis,
I already made some comments about zpos here:
https://lore.kernel.org/dri-devel/aJDDr_9soeNRAmm0@fedora/
But let's start the conversation here as well!
> As reported by Marius [1], the current blending algorithm for vkms planes
> is not future-proof. Currently the z-ordering is only garanteed by the
> creation order. As the future ConfigFS interface will allows to create
> planes, this order may vary.
>
> To avoid this, add the zpos property and blend the planes according to
> this zpos order.
>
> [1]:https://lore.kernel.org/all/aHpGGxZyimpJ8Ehz@xpredator/
In case you want to have a look, 3 years ago I sent a patch adding the
property and blending following the zpos order, but it wasn't merged:
https://github.com/JoseExposito/linux/commit/befc79a1341b27eb328b582c3841097d17ccce71
The way "vkms_state->active_planes" is set is a bit simpler, but it might
not be valid anymore due to code changes.
About this series, I didn't have a chance to run IGT test to validate it,
but in general your code looks good.
My only question is, how do we avoid breaking changes in the configfs side?
For the mutable/immutable configuration it'd be easy: We set it to
immutable by default, i.e, when the user creates a new plane via configfs:
$ sudo mkdir /sys/kernel/config/vkms/<device name>/planes/<plane name>
We set "planes/<plane name>/zpos_mutability" to immutable.
However, we don't know the plane type (required to set the zpos value) when
the user creates a new plane on configfs.
Therefore, we can not set the correct value in "planes/<plane name>/zpos".
Have you already figured out a solution for this?
Jose
PS - In case you missed it, I created:
https://github.com/JoseExposito/vkmsctl
I'll add zpos there once we support it in configfs :)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] drm/vkms: Fix plane blending z-order
2025-09-01 14:52 ` [PATCH 0/2] drm/vkms: Fix plane blending z-order José Expósito
@ 2025-09-01 15:33 ` Louis Chauvet
0 siblings, 0 replies; 5+ messages in thread
From: Louis Chauvet @ 2025-09-01 15:33 UTC (permalink / raw)
To: José Expósito
Cc: airlied, dri-devel, hamohammed.sa, linux-kernel,
maarten.lankhorst, melissa.srw, mripard, simona, thomas.petazzoni,
tzimmermann
Le 01/09/2025 à 16:52, José Expósito a écrit :
> Hi Louis,
>
> I already made some comments about zpos here:
> https://lore.kernel.org/dri-devel/aJDDr_9soeNRAmm0@fedora/
> But let's start the conversation here as well!
>
>> As reported by Marius [1], the current blending algorithm for vkms planes
>> is not future-proof. Currently the z-ordering is only garanteed by the
>> creation order. As the future ConfigFS interface will allows to create
>> planes, this order may vary.
>>
>> To avoid this, add the zpos property and blend the planes according to
>> this zpos order.
>>
>> [1]:https://lore.kernel.org/all/aHpGGxZyimpJ8Ehz@xpredator/
>
> In case you want to have a look, 3 years ago I sent a patch adding the
> property and blending following the zpos order, but it wasn't merged:
> https://github.com/JoseExposito/linux/commit/befc79a1341b27eb328b582c3841097d17ccce71
> The way "vkms_state->active_planes" is set is a bit simpler, but it might
> not be valid anymore due to code changes.
I looked quickly at your series, your solution is better (no complex
loops), I need to check if I can use your solution, it is on my
todo-list (finish to review igt patches too).
> About this series, I didn't have a chance to run IGT test to validate it,
> but in general your code looks good.
>
> My only question is, how do we avoid breaking changes in the configfs side?
The "easy" solution is to have zpos in the first iteration of ConfigFS,
but that's not cool and will slow down again the merge, I would like to
avoid.
> For the mutable/immutable configuration it'd be easy: We set it to
> immutable by default, i.e, when the user creates a new plane via configfs:
>
> $ sudo mkdir /sys/kernel/config/vkms/<device name>/planes/<plane name>
>
> We set "planes/<plane name>/zpos_mutability" to immutable.
>
> However, we don't know the plane type (required to set the zpos value) when
> the user creates a new plane on configfs.
Two ideas:
if (plane_cfg.zpos was not updated by the user)
change the plane_cfg.zpos every time plane_cfg.type is changed
else
don't change plane_cfg.zpos
IDK if this is a good idea or not, but it should not break UAPI (older
software can't change zpos because it did not exists, new softwares can
manually override it).
This is not good because it will change the behavior depending on the
previous action of the user + we need to track in vkms if the value was
changed or not, clearly not ideal.
Maybe better idea:
plane_cfg.zpos = -1 by default (or whatever special value, I need to
check which values are invalid for zpos)
On DRM plane creation:
if(plane_cfg.zpos == -1)
plane.zpos = 1/2/3 depending on plane type
else
plane.zpos = plane_cfg.zpos
> Therefore, we can not set the correct value in "planes/<plane name>/zpos".
> Have you already figured out a solution for this?
>
> Jose
>
> PS - In case you missed it, I created:
> https://github.com/JoseExposito/vkmsctl
> I'll add zpos there once we support it in configfs :)
I just received it, amazing tool (in fact, I already had mine (in rust
too), but very very dirty and some stuff hardcoded)
Once I have the time, I will create a PR with some properties I have on
my branches, so they will be ready.
--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-09-01 15:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-01 14:43 [PATCH 0/2] drm/vkms: Fix plane blending z-order Louis Chauvet
2025-08-01 14:43 ` [PATCH 1/2] drm/vkms: Add zpos property to planes Louis Chauvet
2025-08-01 14:43 ` [PATCH 2/2] drm/vkms: Properly order plane for blending Louis Chauvet
2025-09-01 14:52 ` [PATCH 0/2] drm/vkms: Fix plane blending z-order José Expósito
2025-09-01 15:33 ` Louis Chauvet
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).