<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On Jun 3, 2022, at 11:49 AM, Simon Ser <<a href="mailto:contact@emersion.fr" class="">contact@emersion.fr</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">⚠
 External Email</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On
 Friday, June 3rd, 2022 at 17:32, Zack Rusin <</span><a href="mailto:zackr@vmware.com" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">zackr@vmware.com</a><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">>
 wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<blockquote type="cite" class="">On Jun 3, 2022, at 11:22 AM, Simon Ser <<a href="mailto:contact@emersion.fr" class="">contact@emersion.fr</a>> wrote:<br class="">
⚠ External Email<br class="">
<br class="">
On Friday, June 3rd, 2022 at 17:17, Zack Rusin <<a href="mailto:zackr@vmware.com" class="">zackr@vmware.com</a>> wrote:<br class="">
<br class="">
<br class="">
<blockquote type="cite" class=""><br class="">
<br class="">
<blockquote type="cite" class="">On Jun 3, 2022, at 10:56 AM, Simon Ser <<a href="mailto:contact@emersion.fr" class="">contact@emersion.fr</a>> wrote:<br class="">
⚠ External Email<br class="">
<br class="">
On Friday, June 3rd, 2022 at 16:38, Zack Rusin <<a href="mailto:zackr@vmware.com" class="">zackr@vmware.com</a>> wrote:<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">
<blockquote type="cite" class="">On Jun 3, 2022, at 10:32 AM, Simon Ser <<a href="mailto:contact@emersion.fr" class="">contact@emersion.fr</a>> wrote:<br class="">
<br class="">
⚠ External Email<br class="">
<br class="">
On Friday, June 3rd, 2022 at 16:27, Zack Rusin <<a href="mailto:zackr@vmware.com" class="">zackr@vmware.com</a>> wrote:<br class="">
<br class="">
<br class="">
<blockquote type="cite" class="">
<blockquote type="cite" class="">In particular: since the driver will ignore the KMS cursor plane<br class="">
position set by user-space, I don't think it's okay to just expose<br class="">
without opt-in from user-space (e.g. with a DRM_CLIENT_CAP).<br class="">
<br class="">
cc wayland-devel and Pekka for user-space feedback.<br class="">
</blockquote>
<br class="">
<br class="">
I think Thomas expressed our concerns and reasons why those wouldn’t<br class="">
work for us back then. Is there something else you’d like to add?<br class="">
</blockquote>
<br class="">
<br class="">
I disagreed, and I don't understand Thomas' reasoning.<br class="">
<br class="">
KMS clients will need an update to work correctly. Adding a new prop<br class="">
without a cap leaves existing KMS clients broken. Adding a cap allows<br class="">
both existing KMS clients and updated KMS clients to work correctly.<br class="">
</blockquote>
<br class="">
<br class="">
I’m not sure what you mean here. They are broken right now. That’s what we’re<br class="">
fixing. That’s the reason why the virtualized drivers are on deny-lists for<br class="">
all atomic kms. So nothing needs to be updated. If you have a kms client that<br class="">
was using virtualized drivers with atomic kms then mouse clicks never worked<br class="">
correctly.<br class="">
<br class="">
So, yes, clients need to set cursor hotspot if they want mouse to work<br class="">
correctly with virtualized drivers.<br class="">
</blockquote>
<br class="">
<br class="">
My proposal was:<br class="">
<br class="">
- Introduce DRM_CLIENT_CAP_CURSOR_PLANE_NO_POSITION (or a better name). Only<br class="">
user-space which supports the hotspot props will enable it.<br class="">
- By default, don't expose a cursor plane, because current user-space doesn't<br class="">
support it (Weston might put a window in the cursor plane, and nobody can<br class="">
report hotspot).<br class="">
- If the KMS client enables the cap, advertise the cursor<br class="">
plane, and make it so the plane doesn't have the CRTC_X/CRTC_Y properties<br class="">
since the driver will pick the position.<br class="">
<br class="">
That way both old and new user-space are fixed.<br class="">
</blockquote>
<br class="">
<br class="">
I don’t think I see how that fixes anything. In particular I don’t see a way<br class="">
of fixing the old user space at all. We require hotspot info, old user space<br class="">
doesn’t set it because there’s no way of setting it on atomic kms.<br class="">
</blockquote>
<br class="">
<br class="">
Old atomic user-space is fixed by removing the cursor plane. Then old<br class="">
atomic user-space will fallback to drawing the cursor itself, e.g. via<br class="">
OpenGL.<br class="">
</blockquote>
<br class="">
But it’s not fixed, because the driver is still on a deny-list and<br class="">
nothing implements this. You’re saying you could potentially “fix” by<br class="">
implementing client side cursor handling in all kms clients? That’s a<br class="">
hard sell if the user space can just put the virtualized driver on<br class="">
deny-lists and fallback to use old kms which supports hotspots.<br class="">
</blockquote>
<br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">What
 deny-list are you referring to?</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">All
 compositors I know of implement a fallback when no cursor plane is</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">usable.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>I put the links in the first email in the series:</div>
<div><a href="https://gitlab.gnome.org/GNOME/mutter/-/blob/main/src/backends/native/meta-kms-impl-device-atomic.c#L1188" class="">https://gitlab.gnome.org/GNOME/mutter/-/blob/main/src/backends/native/meta-kms-impl-device-atomic.c#L1188</a><br class="">
<a href="https://invent.kde.org/plasma/kwin/-/blob/master/src/backends/drm/drm_gpu.cpp#L156" class="">https://invent.kde.org/plasma/kwin/-/blob/master/src/backends/drm/drm_gpu.cpp#L156</a></div>
<div><br class="">
</div>
<div>Also, let me point this out because it also seems to be a fundamental misunderstanding, user space implementing software cursor doesn’t fix anything. Just leaves everything broken in different ways. The reason virtualized drivers went away from software
 cursors is because it makes it impossible to make it work with a bunch of interesting and desirable scenarios, e.g. unity mode where the guest might have a terminal and browser open and then the virtual machine software creates windows out of those, so you
 don’t have the entire desktop of the guest but instead native looking windows with the apps. In that case guest has no way of knowing when the cursor leaves the window, so to make seemless cursors work you’d need to implement irc or backdoors that send that
 information from the host to the guest, then have virtualized drivers create some sort of uevent, to send to the userspace to let it know to hide the cursor because it actually left the window. That’s a trivial scenario and there’s a lot more with mice that
 are remoted themselves, guests with singular or maybe many apps exported, possibly overlapping on the host but all within a desktop in the guest, etc.</div>
<div><br class="">
</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<blockquote type="cite" class="">New user-space supports setting the hotspot prop, and is aware that it can't<br class="">
set the cursor plane position, so the cursor plane can be exposed again when<br class="">
the cap is enabled.<br class="">
</blockquote>
<br class="">
But we still use cursor plane position. Hotspots are offsets from<br class="">
cursor plane positions. Both are required.<br class="">
</blockquote>
<br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">No,
 VM drivers don't need and disregard the cursor position AFAIK. They</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">replace
 it with the host cursor's position.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Iirc they all use it. Unless we have some miscommunication about crtc_x|y vs src_x|y. The latter isn’t used but the former is. I guess we could repurpose src_x|y to mean mouse hotspots and write patches for userspace to use that instead of explicit properties,
 but I don’t think that’s in any way better or cleaner than having explicit hotspot properties at this point.</div>
<div><br class="">
</div>
<div>z</div>
</div>
<div class=""><br class="">
</div>
</body>
</html>