[Spice-devel] [PATCH spice-gtk v2 2/8] egl: check context is ready

Pavel Grunt pgrunt at redhat.com
Wed Mar 23 19:39:25 UTC 2016


Acked-by: Pavel Grunt <pgrunt at redhat.com>

On Tue, 2016-03-22 at 13:57 +0100, Marc-André Lureau wrote:
> Add a new GL status field to check if the GL context is ready. This
> helps debugging races where GL is called before the context is ready.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>
> ---
>  src/spice-widget-egl.c  | 10 ++++++++--
>  src/spice-widget-priv.h |  1 +
>  src/spice-widget.c      |  5 +++++
>  3 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/src/spice-widget-egl.c b/src/spice-widget-egl.c
> index a9bea52..8ac3b90 100644
> --- a/src/spice-widget-egl.c
> +++ b/src/spice-widget-egl.c
> @@ -208,7 +208,7 @@ gboolean spice_egl_init(SpiceDisplay *display,
> GError **err)
>          d->egl.ctx = eglGetCurrentContext();
>          dpy =
> (EGLNativeDisplayType)gdk_wayland_display_get_wl_display(gdk_dpy);
>          d->egl.display = eglGetDisplay(dpy);
> -        return spice_egl_init_shaders(display, err);
> +        goto end;
>      }
>  #endif
>  #ifdef GDK_WINDOWING_X11
> @@ -267,7 +267,13 @@ gboolean spice_egl_init(SpiceDisplay *display,
> GError **err)
>      eglMakeCurrent(d->egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE,
>                     d->egl.ctx);
>  
> -    return spice_egl_init_shaders(display, err);
> +end:
> +    if (!spice_egl_init_shaders(display, err))
> +        return FALSE;
> +
> +    d->egl.context_ready = TRUE;
> +
> +    return TRUE;
>  }
>  
>  static gboolean spice_widget_init_egl_win(SpiceDisplay *display,
> GdkWindow *win,
> diff --git a/src/spice-widget-priv.h b/src/spice-widget-priv.h
> index 2f7e39e..bafeb7d 100644
> --- a/src/spice-widget-priv.h
> +++ b/src/spice-widget-priv.h
> @@ -129,6 +129,7 @@ struct _SpiceDisplayPrivate {
>  #endif
>  #ifndef G_OS_WIN32
>      struct {
> +        gboolean            context_ready;
>          gboolean            enabled;
>          EGLSurface          surface;
>          EGLDisplay          display;
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index c8bb72c..8518ec6 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -2486,6 +2486,8 @@ static void gl_scanout(SpiceDisplay *display)
>      const SpiceGlScanout *scanout;
>      GError *err = NULL;
>  
> +    g_return_if_fail(d->egl.context_ready);
> +
>      scanout = spice_display_get_gl_scanout(SPICE_DISPLAY_CHANNEL(d-
> >display));
>      g_return_if_fail(scanout != NULL);
>  
> @@ -2504,8 +2506,11 @@ static void gl_draw(SpiceDisplay *display,
>      SpiceDisplayPrivate *d = display->priv;
>  
>      SPICE_DEBUG("%s",  __FUNCTION__);
> +
>      set_egl_enabled(display, true);
>  
> +    g_return_if_fail(d->egl.context_ready);
> +
>  #if GTK_CHECK_VERSION(3,16,0)
>      GtkWidget *gl = gtk_stack_get_child_by_name(GTK_STACK(display),
> "gl-area");
>  


More information about the Spice-devel mailing list