egl: Move extension checks to GdkDisplay
authorBenjamin Otte <otte@redhat.com>
Tue, 5 Oct 2021 22:48:33 +0000 (00:48 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 6 Oct 2021 01:44:36 +0000 (03:44 +0200)
We check the same extensions anyway, so no need to duplicate the code.

gdk/gdkdisplay.c
gdk/gdkdisplayprivate.h
gdk/wayland/gdkdisplay-wayland.h
gdk/wayland/gdkglcontext-wayland.c
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.h
gdk/x11/gdkglcontext-egl.c

index 398e191a121cb4b585829e2e2199b2c7c512dfa1..c3aed432a129ff70475cf4c747bec9cd566ffb68 100644 (file)
@@ -1694,6 +1694,11 @@ gdk_display_init_egl (GdkDisplay  *self,
       return FALSE;
     }
 
+  self->have_egl_buffer_age =
+    epoxy_has_egl_extension (priv->egl_display, "EGL_EXT_buffer_age");
+  self->have_egl_swap_buffers_with_damage =
+    epoxy_has_egl_extension (priv->egl_display, "EGL_EXT_swap_buffers_with_damage");
+
   GDK_DISPLAY_NOTE (self, OPENGL, {
       char *ext = describe_extensions (priv->egl_display);
       char *cfg = describe_egl_config (priv->egl_display, priv->egl_config);
@@ -1713,7 +1718,6 @@ gdk_display_init_egl (GdkDisplay  *self,
       g_free (ext);
   });
 
-
   gdk_profiler_end_mark (start_time, "init EGL", NULL);
 
   return TRUE;
index dd0b1359b25e576db705defc23f88c7bf9f8e487..8c92f42679f9b81f21ebd963864675ca57b0d930 100644 (file)
@@ -92,6 +92,8 @@ struct _GdkDisplay
   guint double_click_time;  /* Maximum time between clicks in msecs */
   guint double_click_distance;   /* Maximum distance between clicks in pixels */
 
+  GList *seats;
+
 #ifdef GDK_RENDERING_VULKAN
   VkInstance vk_instance;
   VkDebugReportCallbackEXT vk_debug_callback;
@@ -103,7 +105,9 @@ struct _GdkDisplay
   guint vulkan_refcount;
 #endif /* GDK_RENDERING_VULKAN */
 
-  GList *seats;
+  /* egl info */
+  guint have_egl_buffer_age : 1;
+  guint have_egl_swap_buffers_with_damage : 1;
 };
 
 struct _GdkDisplayClass
index 265bcd188379bdfa9033be0b5860757e55b26726..e4924fb6f9884580e10bd419e79838a281b00d98 100644 (file)
@@ -149,11 +149,6 @@ struct _GdkWaylandDisplay
   GListStore *monitors;
 
   gint64 last_bell_time_ms;
-
-  /* egl info */
-
-  guint have_egl_buffer_age : 1;
-  guint have_egl_swap_buffers_with_damage : 1;
 };
 
 struct _GdkWaylandDisplayClass
index c60d4cfc48c0ab517f0a5871a06a93c06aa065c1..5bec5f101bc7cc3c6cfab026e11f6e35b6d3f13c 100644 (file)
@@ -208,12 +208,11 @@ static cairo_region_t *
 gdk_wayland_gl_context_get_damage (GdkGLContext *context)
 {
   GdkDisplay *display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context));
-  GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
   EGLSurface egl_surface;
   GdkSurface *surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (context));
   int buffer_age = 0;
 
-  if (display_wayland->have_egl_buffer_age)
+  if (display->have_egl_buffer_age)
     {
       egl_surface = gdk_surface_get_egl_surface (surface);
       gdk_gl_context_make_current (context);
@@ -297,7 +296,6 @@ gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context,
   GdkGLContext *context = GDK_GL_CONTEXT (draw_context);
   GdkSurface *surface = gdk_gl_context_get_surface (context);
   GdkDisplay *display = gdk_surface_get_display (surface);
-  GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
   EGLSurface egl_surface;
 
   GDK_DRAW_CONTEXT_CLASS (gdk_wayland_gl_context_parent_class)->end_frame (draw_context, painted);
@@ -309,7 +307,7 @@ gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context,
   gdk_wayland_surface_request_frame (surface);
 
   gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "swap buffers");
-  if (display_wayland->have_egl_swap_buffers_with_damage)
+  if (display->have_egl_swap_buffers_with_damage)
     {
       EGLint stack_rects[4 * 4]; /* 4 rects */
       EGLint *heap_rects = NULL;
@@ -390,7 +388,6 @@ gdk_wayland_display_init_gl (GdkDisplay  *display,
                              GError     **error)
 {
   GdkWaylandDisplay *self = GDK_WAYLAND_DISPLAY (display);
-  EGLDisplay egl_display;
 
   if (!gdk_display_init_egl (display, 
                              EGL_PLATFORM_WAYLAND_EXT,
@@ -407,14 +404,6 @@ gdk_wayland_display_init_gl (GdkDisplay  *display,
       return NULL;
     }
 
-  egl_display = gdk_display_get_egl_display (display);
-
-  self->have_egl_buffer_age =
-    epoxy_has_egl_extension (egl_display, "EGL_EXT_buffer_age");
-
-  self->have_egl_swap_buffers_with_damage =
-    epoxy_has_egl_extension (egl_display, "EGL_EXT_swap_buffers_with_damage");
-
   return g_object_new (GDK_TYPE_WAYLAND_GL_CONTEXT,
                        "display", display,
                        NULL);
index 499bbd86f3dad3236293f4485ba2de0882a32567..84a45dc81488cacb34733c8c367864932ede972a 100644 (file)
@@ -2995,11 +2995,6 @@ gdk_x11_display_init_gl_backend (GdkX11Display  *self,
 
   self->egl_version = epoxy_egl_version (egl_display);
 
-  self->has_egl_buffer_age =
-    epoxy_has_egl_extension (egl_display, "EGL_EXT_buffer_age");
-  self->has_egl_swap_buffers_with_damage =
-    epoxy_has_egl_extension (egl_display, "EGL_EXT_swap_buffers_with_damage");
-
   return TRUE;
 }
 
index 6ebca4bd29d99f5db9b4efb8dbebc417323122ed..654a708231674444adeabc81e7660e34a6468955 100644 (file)
@@ -155,10 +155,6 @@ struct _GdkX11Display
   guint has_glx_visual_rating : 1;
   guint has_glx_create_es2_context : 1;
   guint has_async_glx_swap_buffers : 1;
-
-  /* EGL extensions we check */
-  guint has_egl_buffer_age : 1;
-  guint has_egl_swap_buffers_with_damage : 1;
 };
 
 struct _GdkX11DisplayClass
index 83662a4c4dbb8a9551011556895facc6e8edb1a3..16aaca936142ff77f62e9df6b10791c65e72d3cc 100644 (file)
@@ -77,7 +77,6 @@ gdk_x11_gl_context_egl_end_frame (GdkDrawContext *draw_context,
   GdkGLContext *context = GDK_GL_CONTEXT (draw_context);
   GdkSurface *surface = gdk_gl_context_get_surface (context);
   GdkDisplay *display = gdk_surface_get_display (surface);
-  GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
   EGLSurface egl_surface;
 
   GDK_DRAW_CONTEXT_CLASS (gdk_x11_gl_context_egl_parent_class)->end_frame (draw_context, painted);
@@ -87,7 +86,7 @@ gdk_x11_gl_context_egl_end_frame (GdkDrawContext *draw_context,
   egl_surface = gdk_surface_get_egl_surface (surface);
 
   gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "x11", "swap buffers");
-  if (display_x11->has_egl_swap_buffers_with_damage)
+  if (display->have_egl_swap_buffers_with_damage)
     {
       int i, j, n_rects = cairo_region_num_rectangles (painted);
       int surface_height = gdk_surface_get_height (surface);
@@ -186,9 +185,8 @@ static cairo_region_t *
 gdk_x11_gl_context_egl_get_damage (GdkGLContext *context)
 {
   GdkDisplay *display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context));
-  GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
 
-  if (display_x11->has_egl_buffer_age)
+  if (display->have_egl_buffer_age)
     {
       GdkSurface *surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (context));
       EGLSurface egl_surface;