[Spice-devel] [PATCH v2 spice-gtk] Adjust to window scaling

Victor Toso victortoso at redhat.com
Thu May 23 11:00:15 UTC 2019


Hi,

On Thu, May 23, 2019 at 01:01:12PM +0300, Snir Sheriber wrote:
> Hi,
> 
> On 5/22/19 6:02 PM, Marc-André Lureau wrote:
> > Hi
> > 
> > On Sun, Mar 17, 2019 at 4:28 PM Snir Sheriber <ssheribe at redhat.com> wrote:
> > > When GDK_SCALE is != 1 and egl is used, the image presented does not
> > > fit to the window (scale of 2 is often used with hidpi monitors).
> > > Usually this is not a problem since all components are adjusted by
> > > gdk/gtk but with egl, pixel-based data is not being scaled. In this
> > > case window's scale value can be used in order to determine whether
> > > to use a pixel resource with higher resolution data.
> > > 
> > > In order to reproduce the problem set spice with virgl/Intel-vGPU
> > > and run spice-gtk with GDK_SCALE=2
> > > ---
> > > Changes from v1:
> > > -commit msg
> > > -replace var naming (ws with win_scale)
> > > 
> > > 
> > > This patch is kind of RFC, it fixes the issue, but it's a bit hacky
> > > and specific. I didn't come across other scale issues but it is likely
> > > that more of these exist and better and generic fix is needed.
> > > 
> > > ---
> > >   src/spice-widget-egl.c  | 15 +++++++++++++--
> > >   src/spice-widget-priv.h |  1 +
> > >   2 files changed, 14 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/src/spice-widget-egl.c b/src/spice-widget-egl.c
> > > index 43fccd7..600c87a 100644
> > > --- a/src/spice-widget-egl.c
> > > +++ b/src/spice-widget-egl.c
> > > @@ -326,6 +326,8 @@ static gboolean spice_widget_init_egl_win(SpiceDisplay *display, GdkWindow *win,
> > >       if (d->egl.surface)
> > >           return TRUE;
> > > 
> > > +    d->egl.scale = gdk_window_get_scale_factor(win);
> > Why not use gtk_widget_get_scale_factor() directly from
> > spice_egl_resize_display?
> 
> There is no special objection for that, just because i adjust
> scaling also in spice_egl_update_display and i assumed scaling
> is not being changed frequently.

But it can be changed, right? In that case, d->egl.scale would
not have the right value in spice_egl_resize_display()

Note that user tested that this patches fixes so I'd add that to
commit log:

    https://gitlab.freedesktop.org/spice/spice-gtk/issues/99

Cheers,

> Snir.
> 
> > > +
> > >   #ifdef GDK_WINDOWING_X11
> > >       if (GDK_IS_X11_WINDOW(win)) {
> > >           native = (EGLNativeWindowType)GDK_WINDOW_XID(win);
> > > @@ -431,15 +433,17 @@ void spice_egl_resize_display(SpiceDisplay *display, int w, int h)
> > >   {
> > >       SpiceDisplayPrivate *d = display->priv;
> > >       int prog;
> > > +    gint win_scale;
> > > 
> > >       if (!gl_make_current(display, NULL))
> > >           return;
> > > 
> > > +    win_scale = d->egl.scale;
> > >       glGetIntegerv(GL_CURRENT_PROGRAM, &prog);
> > > 
> > >       glUseProgram(d->egl.prog);
> > > -    apply_ortho(d->egl.mproj, 0, w, 0, h, -1, 1);
> > > -    glViewport(0, 0, w, h);
> > > +    apply_ortho(d->egl.mproj, 0, w * win_scale , 0, h * win_scale, -1, 1);
> > > +    glViewport(0, 0, w * win_scale, h * win_scale);
> > > 
> > >       if (d->ready)
> > >           spice_egl_update_display(display);
> > > @@ -559,6 +563,13 @@ void spice_egl_update_display(SpiceDisplay *display)
> > > 
> > >       spice_display_get_scaling(display, &s, &x, &y, &w, &h);
> > > 
> > > +    // Adjust to gdk scale
> > > +    s *= d->egl.scale;
> > > +    x *= d->egl.scale;
> > > +    y *= d->egl.scale;
> > > +    w *= d->egl.scale;
> > > +    h *= d->egl.scale;
> > > +
> > >       glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
> > >       glClear(GL_COLOR_BUFFER_BIT);
> > > 
> > > diff --git a/src/spice-widget-priv.h b/src/spice-widget-priv.h
> > > index 65eb404..8f110ac 100644
> > > --- a/src/spice-widget-priv.h
> > > +++ b/src/spice-widget-priv.h
> > > @@ -149,6 +149,7 @@ struct _SpiceDisplayPrivate {
> > >           EGLImageKHR         image;
> > >           gboolean            call_draw_done;
> > >           SpiceGlScanout      scanout;
> > > +        gint                scale;
> > >       } egl;
> > >   #endif // HAVE_EGL
> > >       double scroll_delta_y;
> > > --
> > > 2.19.1
> > > 
> > > _______________________________________________
> > > Spice-devel mailing list
> > > Spice-devel at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/spice-devel
> > 
> > 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20190523/f5f8a9fd/attachment.sig>


More information about the Spice-devel mailing list