[Spice-devel] [spice-gtk PATCH] Handle single headed monitors that have a non-zero x, y config offset

Marc-André Lureau marcandre.lureau at gmail.com
Mon Jun 13 17:09:29 UTC 2016


Hi

On Mon, Jun 22, 2015 at 3:15 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> On Mon, Jun 22, 2015 at 03:03:24PM +0200, Christophe Fergeau wrote:
>> On Thu, Jun 18, 2015 at 07:14:13PM -0400, sstutsma at redhat.com wrote:
>> > From: Sandy Stutsman <sstutsma at redhat.com>
>> >
>> > Each monitor on a Windows guest is represented as a separate, single-headed
>> > device with its own framebuffer.  When there are multiple monitors, all
>> > monitors but one will have a non-zero xy config position.  But even in
>> > these cases the whole area (frame-buffer) of each monitor should be
>> > updated.
>> >
>> > Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1202419
>> > ---
>> >  src/spice-widget.c | 7 ++++++-
>> >  1 file changed, 6 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/src/spice-widget.c b/src/spice-widget.c
>> > index 260fda5..f1e1508 100644
>> > --- a/src/spice-widget.c
>> > +++ b/src/spice-widget.c
>> > @@ -293,7 +293,12 @@ static void update_monitor_area(SpiceDisplay *display)
>> >          goto whole;
>> >      }
>> >
>> > -    update_area(display, c->x, c->y, c->width, c->height);
>> > +    /* If only one head on this monitor, update the whole area */
>> > +    if(monitors->len == 1) {
>> > +        update_area(display, 0, 0, c->width, c->height);
>> > +    } else {
>> > +        update_area(display, c->x, c->y, c->width, c->height);
>> > +    }
>>
>> What happens if c->x != 0 and c->y != 0 in the single monitor case and
>> we don't force these to 0?
>
> Ah, just looked at update_area which expects the primary to start at (0,
> 0)
>

That's not compatible with virgl, which may use a monitor scanout
different than +0+0 (in multimonitor for ex, but one monitor per
display channel).

I could probably workaround the issue with an extra test such as if
(monitors->len == 1 && !d->egl.enabled)... But that condition looks
wrong to me anyway.

My understanding is that there is some confusing between monitor
configuration position (the monitor config on main channel), and the
scanout/primary position (the monitor config on display channel).

Imho, the fix should be on server or guest/driver side, it shouldn't
use a display monitor config with a scanout offset if there is none to
be applied by the client.

What do you think?

-- 
Marc-André Lureau


More information about the Spice-devel mailing list