[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1031926: marked as done (bullseye-pu: package gtk+3.0/3.24.24-4+deb11u3)



Your message dated Sat, 29 Apr 2023 10:54:14 +0100
with message-id <502b8fb37ece620c9723446611a9287974ba5a0c.camel@adam-barratt.org.uk>
and subject line Closing p-u requests for fixes included in 11.7
has caused the Debian Bug report #1031926,
regarding bullseye-pu: package gtk+3.0/3.24.24-4+deb11u3
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1031926: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031926
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu
X-Debbugs-Cc: gtk+3.0@packages.debian.org, Dominique Martinet <dominique.martinet@atmark-techno.com>
Control: affects -1 + src:gtk+3.0

[ Reason ]
User request via #1020937: make it possible to run GTK 3 apps in native
Wayland on some proprietary GLES-only graphics drivers (Raspberry Pi
video core, iMX/Vivante).

[ Impact ]
If not accepted, GTK 3 apps on the affected hardware/driver combination
can only be run if forced to use X11.

[ Tests ]
The proposed change has been in testing and unstable since November
as part of version 3.24.34-4. The version proposed for bullseye is a
straightforward cherry-pick.

For the affected GLES-only graphics drivers, the user requesting the
change has confirmed that a functionally equivalent prerelease package
has the desired effect.

For ordinary "desktop GL" drivers, I used the same prerelease package on
a bullseye/NVIDIA system (with NVIDIA proprietary drivers) for several
weeks without incident, and my partner's bullseye/Intel/Mesa system now
has the proposed package, again without obvious regressions.

[ Risks ]
It's a minimal change, cherry-picked from newer GTK 3 without
modification. The affected code runs whenever GL is initialized for a
window, which should mean that any regressions would be very obvious,
since many (all?) GTK 3 apps use GL.

The version of this change in GTK 4 is much more intrusive and did not
seem suitable for backporting.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in (old)stable
  [x] the issue is verified as fixed in unstable

[ Changes ]
All changes are part of solving #1020937.
diffstat for gtk+3.0-3.24.24 gtk+3.0-3.24.24

 debian/changelog                                                          |   12 +
 debian/patches/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch |   82 ++++++++++
 debian/patches/series                                                     |    1 
 gdk/wayland/gdkglcontext-wayland.c                                        |   12 -
 gdk/wayland/gdkglcontext-wayland.h                                        |    3 
 5 files changed, 105 insertions(+), 5 deletions(-)

diff -Nru gtk+3.0-3.24.24/debian/changelog gtk+3.0-3.24.24/debian/changelog
--- gtk+3.0-3.24.24/debian/changelog	2022-03-10 10:30:09.000000000 +0000
+++ gtk+3.0-3.24.24/debian/changelog	2023-02-24 19:07:01.000000000 +0000
@@ -1,3 +1,15 @@
+gtk+3.0 (3.24.24-4+deb11u3) bullseye; urgency=medium
+
+  * d/p/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch:
+    Apply patch from 3.24.35 to fix Wayland + EGL on GLES-only platforms.
+    Previously, GTK assumed that EGL could use the OpenGL API everywhere,
+    but some proprietary drivers like those for Raspberry Pi and Vivante
+    only support OpenGL ES. Allow use of OpenGL ES to be forced via
+    environment variable GDK_GL=gles.
+    Thanks to Dominique Martinet (Closes: #1020937)
+
+ -- Simon McVittie <smcv@debian.org>  Fri, 24 Feb 2023 19:07:01 +0000
+
 gtk+3.0 (3.24.24-4+deb11u2) bullseye; urgency=medium
 
   [ Jian-Hong Pan ]
diff -Nru gtk+3.0-3.24.24/debian/patches/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch gtk+3.0-3.24.24/debian/patches/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch
--- gtk+3.0-3.24.24/debian/patches/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch	1970-01-01 01:00:00.000000000 +0100
+++ gtk+3.0-3.24.24/debian/patches/gdk_wayland_display_init_gl-use-GLES-API-if-required.patch	2023-02-24 19:07:01.000000000 +0000
@@ -0,0 +1,82 @@
+From: Dominique Martinet <dominique.martinet@atmark-techno.com>
+Date: Wed, 28 Sep 2022 14:18:31 +0900
+Subject: gdk_wayland_display_init_gl: use GLES API if required
+
+gdk_wayland_gl_context_realize properly checks for GLES and uses
+eglBindAPI with the proper API, but before that init is always called
+with regular GL interface which is not implemented for many embedded
+devices.
+
+This was fixed in GTK 4 with commit 482845b02705 ("wayland: Remove
+initial GL API bind"), but that commit cannot easily be applied because
+the current version queries some GL properties during init so we would
+need to backport more for it to be applicable.
+
+This patch takes the minimal approach of initializing GLES context,
+allowing the gtk3 demo OpenGL test (and real applications) to work
+when GDK_GL=gles is set.
+
+Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3028
+Bug-Debian: https://bugs.debian.org/1020937
+Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5062
+Applied-upstream: 3.24.35, commit:0e5fe45ea20cce074a128911949dbedf4f8265bf
+---
+ gdk/wayland/gdkglcontext-wayland.c | 12 ++++++++----
+ gdk/wayland/gdkglcontext-wayland.h |  3 ++-
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/gdk/wayland/gdkglcontext-wayland.c b/gdk/wayland/gdkglcontext-wayland.c
+index a221025..296e5e0 100644
+--- a/gdk/wayland/gdkglcontext-wayland.c
++++ b/gdk/wayland/gdkglcontext-wayland.c
+@@ -309,11 +309,13 @@ gdk_wayland_get_display (GdkWaylandDisplay *display_wayland)
+ }
+ 
+ gboolean
+-gdk_wayland_display_init_gl (GdkDisplay *display)
++gdk_wayland_display_init_gl (GdkDisplay *display,
++                             GdkGLContext *share)
+ {
+   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
+   EGLint major, minor;
+   EGLDisplay dpy;
++  gboolean use_es;
+ 
+   if (display_wayland->have_egl)
+     return TRUE;
+@@ -326,8 +328,10 @@ gdk_wayland_display_init_gl (GdkDisplay *display)
+   if (!eglInitialize (dpy, &major, &minor))
+     return FALSE;
+ 
+-  if (!eglBindAPI (EGL_OPENGL_API))
+-    return FALSE;
++  use_es = (_gdk_gl_flags & GDK_GL_GLES) != 0 ||
++           (share != NULL && gdk_gl_context_get_use_es (share));
++  if (!eglBindAPI (use_es ? EGL_OPENGL_ES_API : EGL_OPENGL_API))
++      return FALSE;
+ 
+   display_wayland->egl_display = dpy;
+   display_wayland->egl_major_version = major;
+@@ -461,7 +465,7 @@ gdk_wayland_window_create_gl_context (GdkWindow     *window,
+   GdkWaylandGLContext *context;
+   EGLConfig config;
+ 
+-  if (!gdk_wayland_display_init_gl (display))
++  if (!gdk_wayland_display_init_gl (display, share))
+     {
+       g_set_error_literal (error, GDK_GL_ERROR,
+                            GDK_GL_ERROR_NOT_AVAILABLE,
+diff --git a/gdk/wayland/gdkglcontext-wayland.h b/gdk/wayland/gdkglcontext-wayland.h
+index bd2bb88..88a319e 100644
+--- a/gdk/wayland/gdkglcontext-wayland.h
++++ b/gdk/wayland/gdkglcontext-wayland.h
+@@ -47,7 +47,8 @@ struct _GdkWaylandGLContextClass
+   GdkGLContextClass parent_class;
+ };
+ 
+-gboolean        gdk_wayland_display_init_gl                         (GdkDisplay        *display);
++gboolean        gdk_wayland_display_init_gl                         (GdkDisplay        *display,
++                                                                     GdkGLContext      *share);
+ GdkGLContext *  gdk_wayland_window_create_gl_context                (GdkWindow         *window,
+ 								     gboolean           attach,
+                                                                      GdkGLContext      *share,
diff -Nru gtk+3.0-3.24.24/debian/patches/series gtk+3.0-3.24.24/debian/patches/series
--- gtk+3.0-3.24.24/debian/patches/series	2022-03-10 10:30:09.000000000 +0000
+++ gtk+3.0-3.24.24/debian/patches/series	2023-02-24 19:07:01.000000000 +0000
@@ -26,3 +26,4 @@
 printing-Show-all-Avahi-advertised-printers.patch
 Don-t-try-to-create-local-cups-printers-before-CUPS-2.2.patch
 debian/cups-Use-the-same-name-mangling-as-Debian-11-s-cups-brows.patch
+gdk_wayland_display_init_gl-use-GLES-API-if-required.patch
diff -Nru gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.c gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.c
--- gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.c	2020-12-02 22:21:55.000000000 +0000
+++ gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.c	2023-02-25 11:30:29.000000000 +0000
@@ -309,11 +309,13 @@
 }
 
 gboolean
-gdk_wayland_display_init_gl (GdkDisplay *display)
+gdk_wayland_display_init_gl (GdkDisplay *display,
+                             GdkGLContext *share)
 {
   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
   EGLint major, minor;
   EGLDisplay dpy;
+  gboolean use_es;
 
   if (display_wayland->have_egl)
     return TRUE;
@@ -326,8 +328,10 @@
   if (!eglInitialize (dpy, &major, &minor))
     return FALSE;
 
-  if (!eglBindAPI (EGL_OPENGL_API))
-    return FALSE;
+  use_es = (_gdk_gl_flags & GDK_GL_GLES) != 0 ||
+           (share != NULL && gdk_gl_context_get_use_es (share));
+  if (!eglBindAPI (use_es ? EGL_OPENGL_ES_API : EGL_OPENGL_API))
+      return FALSE;
 
   display_wayland->egl_display = dpy;
   display_wayland->egl_major_version = major;
@@ -461,7 +465,7 @@
   GdkWaylandGLContext *context;
   EGLConfig config;
 
-  if (!gdk_wayland_display_init_gl (display))
+  if (!gdk_wayland_display_init_gl (display, share))
     {
       g_set_error_literal (error, GDK_GL_ERROR,
                            GDK_GL_ERROR_NOT_AVAILABLE,
diff -Nru gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.h gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.h
--- gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.h	2020-12-02 22:21:55.000000000 +0000
+++ gtk+3.0-3.24.24/gdk/wayland/gdkglcontext-wayland.h	2023-02-25 11:30:29.000000000 +0000
@@ -47,7 +47,8 @@
   GdkGLContextClass parent_class;
 };
 
-gboolean        gdk_wayland_display_init_gl                         (GdkDisplay        *display);
+gboolean        gdk_wayland_display_init_gl                         (GdkDisplay        *display,
+                                                                     GdkGLContext      *share);
 GdkGLContext *  gdk_wayland_window_create_gl_context                (GdkWindow         *window,
 								     gboolean           attach,
                                                                      GdkGLContext      *share,

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 11.7

Hi,

Each of the updates referred to in these requests was included in this
morning's 11.7 point release.

Regards,

Adam

--- End Message ---

Reply to: