>On Tue, 29 Oct 2024, Lei Huang wrote: >>> On Fri, 25 Oct 2024, Lei Huang wrote: >>>> Use a convergence factor to make the VM's input >>>> global coordinates more closely approach the global >>>> coordinates of DOM0. >>> >>> Dom0 is some Xen terminology. Do you mean "host" which is more often used >>> in QEMU? >> >> Yes, I will change it to host >> >>> >>>> Change-Id: I2c3f12f1fe7dfb9306d1fc40c4fd4d299937f4c6 >>>> Signed-off-by: Lei Huang <lei.hu...@amd.com> >>>> --- >>>> ui/sdl2.c | 32 ++++++++++++++++++++++++++++++-- >>>> 1 file changed, 30 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/ui/sdl2.c b/ui/sdl2.c >>>> index bd4f5a9da14..8f504dd8727 100644 >>>> --- a/ui/sdl2.c >>>> +++ b/ui/sdl2.c >>>> @@ -303,6 +303,34 @@ static void sdl_mouse_mode_change(Notifier *notify, >>>> void *data) >>>> } >>>> } >>>> >>>> +/* >>>> + *guest_x and guest_y represent the global coordinates on the VM side, >>>> + *while x and y represent the global coordinates on the dom0 side. >>>> + *The goal of this entire process is to align the global coordinates of >>>> + *the VM with those of dom0 using dx and dy. The current approach aims >>>> + *for precise calibration in once attempt; however, because guest_x >>> >>> "in one attempt" also add a space after the * at the beginning of lines. >> >> okay, I will change it >> >>> >>>> + *and guest_y are non-zero values, they are not accurate values when >>>> + *they are counted out to become negative.Therefore, achieving perfect >>>> + *alignment in one attempt is impossible.Since the same calibration method >>>> + *is used each time, repeated attempts cannot achieve alignment either. >>>> + *By introducing a convergence factor, guest_x and guest_y can be made to >>>> + *approach dom0's x and y indefinitely. >>>> + * >>>> + * QEMU (dx,dy) VM >>>> + *calculates dx and dy using guest_x and guest_y ----> input driver >>>> + * ^ | >>>> + * | | >>>> + * | V >>>> + * | update >>>> + * | guest_x,guest_y input dispatcher ---> >>>> WindowManager >>>> + * | | >>>> | >>>> + * | | >>>> | >>>> + * | libdrm V >>>> | >>>> + * virtio-gpu <------ drmModeMoveCursor <------ compositor >>>> <------- | >>>> + * (guest_x,guest_y) calculates guest_x and >>>> + * guest_y dy using dx and >>>> dy >>>> + */ >>> >>> What about other display devices than virtio-gpu? Does this work with >>> those or do they need some update? If this is independent of graphics >>> device maybe add a note that virtio-gpu is an example and could be any >>> graphics device. >> >> Yes,this applies to any device using SDL where the VM utilizes cursor plane >> acceleration; >> virtio-gpu is just an example. I will add it to the explanation. > >You could change the figure in the comment to say instead of virtio-gpu > > display device >(e.g. virtio-gpu) > >Which may be enough to clearify this.
okay, got it, thank you very much. Additionally, I noticed in GTK's implementation, it resolves this issue by using the gdk_window_get_root_coords method in the gd_mouse_set function. however, I could not find a similar method in SDL2, so I am not sure if there are better solutions available. Neverthless, the current modification dose indeed fix the mouse drift issue on the VM side. > >Regards, >BALATON Zoltan