egl: Support EGL_KHR_no_config_context
authorBenjamin Otte <otte@redhat.com>
Wed, 6 Oct 2021 00:41:31 +0000 (02:41 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 6 Oct 2021 01:44:37 +0000 (03:44 +0200)
If the extension is supported, we create configless contexts.

This will come in handy real soon now, we use different configs for HDR
and SDR.

gdk/gdkdisplay.c
gdk/gdkdisplayprivate.h
gdk/gdkglcontext.c

index c3aed432a129ff70475cf4c747bec9cd566ffb68..cedd0856bc3c420f3fd4c389163e15c8d11bd392 100644 (file)
@@ -1698,6 +1698,8 @@ gdk_display_init_egl (GdkDisplay  *self,
     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");
+  self->have_egl_no_config_context =
+    epoxy_has_egl_extension (priv->egl_display, "EGL_KHR_no_config_context");
 
   GDK_DISPLAY_NOTE (self, OPENGL, {
       char *ext = describe_extensions (priv->egl_display);
index 8c92f42679f9b81f21ebd963864675ca57b0d930..3b7a18f4b38b40889c078ad193cb403dd15a7139 100644 (file)
@@ -108,6 +108,7 @@ struct _GdkDisplay
   /* egl info */
   guint have_egl_buffer_age : 1;
   guint have_egl_swap_buffers_with_damage : 1;
+  guint have_egl_no_config_context : 1;
 };
 
 struct _GdkDisplayClass
index 527ef62773c724414554ad7dbd1327ac5e88a885..0fc8b689cc54f13ca3f6274bdaee01dc290b8f41 100644 (file)
@@ -359,7 +359,7 @@ gdk_gl_context_real_realize (GdkGLContext  *context,
 
   if (egl_display)
     {
-      EGLConfig egl_config = gdk_display_get_egl_config (display);
+      EGLConfig egl_config;
       GdkGLContext *share = gdk_display_get_gl_context (display);
       GdkGLContextPrivate *share_priv = gdk_gl_context_get_instance_private (share);
       EGLContext ctx;
@@ -377,6 +377,11 @@ gdk_gl_context_real_realize (GdkGLContext  *context,
       use_es = GDK_DISPLAY_DEBUG_CHECK (display, GL_GLES) ||
                (share != NULL && gdk_gl_context_get_use_es (share));
 
+      if (display->have_egl_no_config_context)
+        egl_config = NULL;
+      else
+        egl_config = gdk_display_get_egl_config (display);
+
       flags = 0;
 
       if (debug_bit)