qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] ui/sdl: Mouse event optimization


From: Lei Huang
Subject: Re: [PATCH] ui/sdl: Mouse event optimization
Date: Wed, 30 Oct 2024 11:20:14 +0800

>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.Huang@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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]