[Spice-devel] [PATCH spice-server 1/2] gl: fix client mouse mode

Marc-André Lureau mlureau at redhat.com
Mon Mar 6 10:57:25 UTC 2017


Hi

----- Original Message -----
> > 
> > Hi
> > 
> > ----- Original Message -----
> > > > 
> > > > Hi
> > > > 
> > > > ----- Original Message -----
> > > > > Since 2.8, QEMU now longer creates QXL primary surfaces when using
> > > > > GL.
> > > > > This change broke client-side mouse mode, because Spice server relies
> > > > > on
> > > > > primary surface conditions.
> > > > > 
> > > > > When GL is enabled, use GL scanout informations.
> > > > > Mouse mode is always client when GL surfaces are used.
> > > > > 
> > > > > This patch and most of the message are based on a patch from
> > > > > Marc-André Lureau, just moving responsibility from reds to RedQxl.
> > > > > 
> > > > 
> > > > Which could cause more trouble than my approach when switching from/to
> > > > 3d/2d.
> > > > You are mixing what used to be QXL/2D-specific and QXL/GL state.
> > > > 
> > > > (NACK from me by principle, I didn't have time to check if it actually
> > > > breaks
> > > > 3d/2d switching)
> > > > 
> > > 
> > > Which principle?
> > > 
> > 
> > meaning I don't have a proof of what I argue above, I just want to warn
> > about
> > it, and I dislike this approach.
> > 
> 
> I tried to explain in 2/2 and why looking at code responsibility
> I think is better.
> The result of the two changes are the same, the mouse get the display
> size/state of either the scanout or the primary surface.
> If you looks at the code calling reds_update_client_mouse_allowed is
> very similar between the two statuses (2d and 3d) and it's done
> at similar time (when you have something to display).

It's not, the protocol said that you switch to 2d display whenever a QXL/2D drawing command happen. 


But qxl_state->{x_res,y_res,use_hw_cursor,primary_active} is updated when the primary is created,

So if you have a primary created, then switch to 3d by gl-draw, and switch back to 2d by QXL draw, you'll have invalid qxl_state->{x_res,y_res,..} values that don't match the 2d/primary.


 
> > > 
> > > > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > > > ---
> > > > >  server/red-qxl.c | 7 +++++++
> > > > >  1 file changed, 7 insertions(+)
> > > > > 
> > > > > diff --git a/server/red-qxl.c b/server/red-qxl.c
> > > > > index 53f3338..896bb76 100644
> > > > > --- a/server/red-qxl.c
> > > > > +++ b/server/red-qxl.c
> > > > > @@ -883,6 +883,13 @@ void spice_qxl_gl_scanout(QXLInstance *qxl,
> > > > >      /* FIXME: find a way to coallesce all pending SCANOUTs */
> > > > >      dispatcher_send_message(qxl_state->dispatcher,
> > > > >                              RED_WORKER_MESSAGE_GL_SCANOUT,
> > > > >                              &payload);
> > > > > +
> > > > > +    qxl_state->x_res = width;
> > > > > +    qxl_state->y_res = height;
> > > > > +    qxl_state->use_hardware_cursor = TRUE;
> > > > > +    qxl_state->primary_active = TRUE;
> > > > > +
> > > > > +    reds_update_client_mouse_allowed(qxl_state->reds);
> > > > >  }
> > > > >  
> > > > >  SPICE_GNUC_VISIBLE
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list