From: Benjamin Otte Date: Tue, 13 Jul 2021 03:04:45 +0000 (+0200) Subject: x11: Move code from GdkGLContextX11 X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~3^2~9^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=30aaab5c6c6d25e3eb48a97f62fff4007e5baeaf;p=gtk4.git x11: Move code from GdkGLContextX11 It's not used there, but both backends have independent immplementationgs for it. I want to get rid of GdkGLContextX11 and moving code from it is the first step. --- diff --git a/gdk/x11/gdkglcontext-egl.c b/gdk/x11/gdkglcontext-egl.c index b5a571303c..a4de68d228 100644 --- a/gdk/x11/gdkglcontext-egl.c +++ b/gdk/x11/gdkglcontext-egl.c @@ -35,6 +35,8 @@ struct _GdkX11GLContextEGL GdkX11GLContext parent_instance; EGLContext egl_context; + + guint do_frame_sync : 1; }; typedef struct _GdkX11GLContextClass GdkX11GLContextEGLClass; @@ -376,8 +378,7 @@ static gboolean gdk_x11_gl_context_egl_make_current (GdkGLContext *context, gboolean surfaceless) { - GdkX11GLContextEGL *context_egl = GDK_X11_GL_CONTEXT_EGL (context); - GdkX11GLContext *context_x11 = GDK_X11_GL_CONTEXT (context); + GdkX11GLContextEGL *self = GDK_X11_GL_CONTEXT_EGL (context); GdkDisplay *display = gdk_gl_context_get_display (context); GdkX11Display *display_x11 = GDK_X11_DISPLAY (display); GdkSurface *surface; @@ -389,7 +390,7 @@ gdk_x11_gl_context_egl_make_current (GdkGLContext *context, return eglMakeCurrent (display_x11->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, - context_egl->egl_context); + self->egl_context); } surface = gdk_gl_context_get_surface (context); @@ -397,12 +398,12 @@ gdk_x11_gl_context_egl_make_current (GdkGLContext *context, GDK_DISPLAY_NOTE (display, OPENGL, g_message ("Making EGL context %p current to surface %p", - context_egl->egl_context, egl_surface)); + self->egl_context, egl_surface)); if (!eglMakeCurrent (display_x11->egl_display, egl_surface, egl_surface, - context_egl->egl_context)) + self->egl_context)) return FALSE; /* If the WM is compositing there is no particular need to delay @@ -411,9 +412,9 @@ gdk_x11_gl_context_egl_make_current (GdkGLContext *context, * to the vblank. */ do_frame_sync = ! gdk_display_is_composited (display); - if (do_frame_sync != context_x11->do_frame_sync) + if (do_frame_sync != self->do_frame_sync) { - context_x11->do_frame_sync = do_frame_sync; + self->do_frame_sync = do_frame_sync; if (do_frame_sync) eglSwapInterval (display_x11->egl_display, 1); @@ -645,6 +646,7 @@ gdk_x11_gl_context_egl_class_init (GdkX11GLContextEGLClass *klass) static void gdk_x11_gl_context_egl_init (GdkX11GLContextEGL *self) { + self->do_frame_sync = TRUE; } gboolean diff --git a/gdk/x11/gdkglcontext-glx.c b/gdk/x11/gdkglcontext-glx.c index 67e008527d..829a8f8bc6 100644 --- a/gdk/x11/gdkglcontext-glx.c +++ b/gdk/x11/gdkglcontext-glx.c @@ -40,6 +40,8 @@ struct _GdkX11GLContextGLX GLsync frame_fence; Damage xdamage; #endif + + guint do_frame_sync : 1; }; typedef struct _GdkX11GLContextClass GdkX11GLContextGLXClass; @@ -146,9 +148,8 @@ static void gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, cairo_region_t *painted) { + GdkX11GLContextGLX *self = GDK_X11_GL_CONTEXT_GLX (draw_context); GdkGLContext *context = GDK_GL_CONTEXT (draw_context); - GdkX11GLContext *context_x11 = GDK_X11_GL_CONTEXT (context); - GdkX11GLContextGLX *context_glx = GDK_X11_GL_CONTEXT_GLX (context); GdkSurface *surface = gdk_gl_context_get_surface (context); GdkDisplay *display = gdk_gl_context_get_display (context); Display *dpy = gdk_x11_display_get_xdisplay (display); @@ -168,7 +169,7 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, g_message ("Flushing GLX buffers for drawable %lu (window: %lu), frame sync: %s", (unsigned long) drawable, (unsigned long) gdk_x11_surface_get_xid (surface), - context_x11->do_frame_sync ? "yes" : "no")); + self->do_frame_sync ? "yes" : "no")); gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "x11", "swap buffers"); @@ -180,7 +181,7 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, * GLX_SGI_swap_control, and we ask the driver to do the right * thing. */ - if (context_x11->do_frame_sync) + if (self->do_frame_sync) { guint32 end_frame_counter = 0; gboolean has_counter = display_x11->has_glx_video_sync; @@ -189,7 +190,7 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, if (display_x11->has_glx_video_sync) glXGetVideoSyncSGI (&end_frame_counter); - if (context_x11->do_frame_sync && !display_x11->has_glx_swap_interval) + if (self->do_frame_sync && !display_x11->has_glx_swap_interval) { glFinish (); @@ -208,11 +209,11 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, gdk_x11_surface_pre_damage (surface); #ifdef HAVE_XDAMAGE - if (context_glx->xdamage != 0 && _gdk_x11_surface_syncs_frames (surface)) + if (self->xdamage != 0 && _gdk_x11_surface_syncs_frames (surface)) { - g_assert (context_glx->frame_fence == 0); + g_assert (self->frame_fence == 0); - context_glx->frame_fence = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + self->frame_fence = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0); /* We consider the frame still getting painted until the GL operation is * finished, and the window gets damage reported from the X server. @@ -225,7 +226,7 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, glXSwapBuffers (dpy, drawable); - if (context_x11->do_frame_sync && info != NULL && display_x11->has_glx_video_sync) + if (self->do_frame_sync && info != NULL && display_x11->has_glx_video_sync) glXGetVideoSyncSGI (&info->last_frame_counter); } @@ -244,15 +245,14 @@ gdk_x11_gl_context_glx_make_current (GdkGLContext *context, gboolean surfaceless) { - GdkX11GLContext *context_x11 = GDK_X11_GL_CONTEXT (context); - GdkX11GLContextGLX *context_glx = GDK_X11_GL_CONTEXT_GLX (context); + GdkX11GLContextGLX *self = GDK_X11_GL_CONTEXT_GLX (context); GdkDisplay *display = gdk_gl_context_get_display (context); Display *dpy = gdk_x11_display_get_xdisplay (display); gboolean do_frame_sync = FALSE; GdkSurface *surface; GLXWindow drawable; - drawable = gdk_x11_gl_context_glx_get_drawable (context_glx); + drawable = gdk_x11_gl_context_glx_get_drawable (self); if (!surfaceless) surface = gdk_gl_context_get_surface (context); @@ -264,7 +264,7 @@ gdk_x11_gl_context_glx_make_current (GdkGLContext *context, g_message ("Making GLX context %p current to drawable %lu", context, (unsigned long) drawable)); - if (!glXMakeContextCurrent (dpy, drawable, drawable, context_glx->glx_context)) + if (!glXMakeContextCurrent (dpy, drawable, drawable, self->glx_context)) return FALSE; if (!surfaceless && GDK_X11_DISPLAY (display)->has_glx_swap_interval) @@ -275,9 +275,9 @@ gdk_x11_gl_context_glx_make_current (GdkGLContext *context, * to the vblank. */ do_frame_sync = ! gdk_display_is_composited (display); - if (do_frame_sync != context_x11->do_frame_sync) + if (do_frame_sync != self->do_frame_sync) { - context_x11->do_frame_sync = do_frame_sync; + self->do_frame_sync = do_frame_sync; if (do_frame_sync) glXSwapIntervalSGI (1); @@ -747,6 +747,7 @@ gdk_x11_gl_context_glx_class_init (GdkX11GLContextGLXClass *klass) static void gdk_x11_gl_context_glx_init (GdkX11GLContextGLX *self) { + self->do_frame_sync = TRUE; } static gboolean diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c index 98210b5ef1..9fa70c96af 100644 --- a/gdk/x11/gdkglcontext-x11.c +++ b/gdk/x11/gdkglcontext-x11.c @@ -50,7 +50,6 @@ gdk_x11_gl_context_class_init (GdkX11GLContextClass *klass) static void gdk_x11_gl_context_init (GdkX11GLContext *self) { - self->do_frame_sync = TRUE; } gboolean diff --git a/gdk/x11/gdkglcontext-x11.h b/gdk/x11/gdkglcontext-x11.h index d1b6c8e106..a12d39e5eb 100644 --- a/gdk/x11/gdkglcontext-x11.h +++ b/gdk/x11/gdkglcontext-x11.h @@ -47,15 +47,11 @@ G_BEGIN_DECLS struct _GdkX11GLContext { GdkGLContext parent_instance; - - guint do_frame_sync : 1; }; struct _GdkX11GLContextClass { GdkGLContextClass parent_class; - - void (* bind_for_frame_fence) (GdkX11GLContext *self); }; gboolean gdk_x11_display_init_gl_backend (GdkX11Display *self,