[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