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

> 
> Regards,
> BALATON Zoltan
> 
> > +#define CONVERGENCE_FACTOR 3
> > static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy,
> >                                  int x, int y, int state)
> > {
> > @@ -331,8 +359,8 @@ static void sdl_send_mouse_event(struct sdl2_console 
> > *scon, int dx, int dy,
> >             y -= guest_y;
> >             guest_x += x;
> >             guest_y += y;
> > -            dx = x;
> > -            dy = y;
> > +            dx = x / CONVERGENCE_FACTOR;
> > +            dy = y / CONVERGENCE_FACTOR;
> >         }
> >         qemu_input_queue_rel(scon->dcl.con, INPUT_AXIS_X, dx);
> >         qemu_input_queue_rel(scon->dcl.con, INPUT_AXIS_Y, dy);
> > -- 
> > 2.45.2
> >
> >
> >
> 
> 

Reply via email to