Add patch for GNOME #769835
This commit is contained in:
parent
2316f15e5a
commit
0afcab3b85
103
disable-egl-swap-interval.patch
Normal file
103
disable-egl-swap-interval.patch
Normal file
@ -0,0 +1,103 @@
|
||||
From ab66c3d7bfaa316fc80a19e8aae32949b80068c1 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Thu, 22 Dec 2016 19:22:07 +0100
|
||||
Subject: wayland: Disable EGL swap interval
|
||||
|
||||
We have a frame clock that ensures rendering is done as per the
|
||||
output vsync. There is no need to have Mesa do the same for us.
|
||||
|
||||
This, most notably, ensures Mesa doesn't schedule frame callbacks
|
||||
that will be left unattended if the compositor stops throttling
|
||||
frames for its surface, this is eg. the case if the toplevel is
|
||||
moved to another workspace.
|
||||
|
||||
Also, given a SwapInterval!=0 will always bring these unexpected
|
||||
side effects, check that it's possible to disable it, and spew
|
||||
a debug message if that isn't the case.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=769835
|
||||
---
|
||||
gdk/wayland/gdkdisplay-wayland.h | 1 +
|
||||
gdk/wayland/gdkglcontext-wayland.c | 25 ++++++++++++++++++++++---
|
||||
2 files changed, 23 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/gdk/wayland/gdkdisplay-wayland.h b/gdk/wayland/gdkdisplay-wayland.h
|
||||
index a68940f..a9fd483 100644
|
||||
--- a/gdk/wayland/gdkdisplay-wayland.h
|
||||
+++ b/gdk/wayland/gdkdisplay-wayland.h
|
||||
@@ -120,6 +120,7 @@ struct _GdkWaylandDisplay
|
||||
guint have_egl_buffer_age : 1;
|
||||
guint have_egl_swap_buffers_with_damage : 1;
|
||||
guint have_egl_surfaceless_context : 1;
|
||||
+ EGLint egl_min_swap_interval;
|
||||
};
|
||||
|
||||
struct _GdkWaylandDisplayClass
|
||||
diff --git a/gdk/wayland/gdkglcontext-wayland.c b/gdk/wayland/gdkglcontext-wayland.c
|
||||
index 6573688..254900d 100644
|
||||
--- a/gdk/wayland/gdkglcontext-wayland.c
|
||||
+++ b/gdk/wayland/gdkglcontext-wayland.c
|
||||
@@ -369,6 +369,7 @@ gdk_wayland_display_init_gl (GdkDisplay *display)
|
||||
static gboolean
|
||||
find_eglconfig_for_window (GdkWindow *window,
|
||||
EGLConfig *egl_config_out,
|
||||
+ EGLint *min_swap_interval_out,
|
||||
GError **error)
|
||||
{
|
||||
GdkDisplay *display = gdk_window_get_display (window);
|
||||
@@ -376,7 +377,7 @@ find_eglconfig_for_window (GdkWindow *window,
|
||||
GdkVisual *visual = gdk_window_get_visual (window);
|
||||
EGLint attrs[MAX_EGL_ATTRS];
|
||||
EGLint count;
|
||||
- EGLConfig *configs;
|
||||
+ EGLConfig *configs, chosen_config;
|
||||
gboolean use_rgba;
|
||||
|
||||
int i = 0;
|
||||
@@ -429,9 +430,20 @@ find_eglconfig_for_window (GdkWindow *window,
|
||||
}
|
||||
|
||||
/* Pick first valid configuration i guess? */
|
||||
+ chosen_config = configs[0];
|
||||
+
|
||||
+ if (!eglGetConfigAttrib (display_wayland->egl_display, chosen_config,
|
||||
+ EGL_MIN_SWAP_INTERVAL, min_swap_interval_out))
|
||||
+ {
|
||||
+ g_set_error_literal (error, GDK_GL_ERROR,
|
||||
+ GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
+ "Could not retrieve the minimum swap interval");
|
||||
+ g_free (configs);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
|
||||
if (egl_config_out != NULL)
|
||||
- *egl_config_out = configs[0];
|
||||
+ *egl_config_out = chosen_config;
|
||||
|
||||
g_free (configs);
|
||||
|
||||
@@ -465,7 +477,9 @@ gdk_wayland_window_create_gl_context (GdkWindow *window,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (!find_eglconfig_for_window (window, &config, error))
|
||||
+ if (!find_eglconfig_for_window (window, &config,
|
||||
+ &display_wayland->egl_min_swap_interval,
|
||||
+ error))
|
||||
return NULL;
|
||||
|
||||
context = g_object_new (GDK_TYPE_WAYLAND_GL_CONTEXT,
|
||||
@@ -543,5 +557,10 @@ gdk_wayland_display_make_gl_context_current (GdkDisplay *display,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+ if (display_wayland->egl_min_swap_interval == 0)
|
||||
+ eglSwapInterval (display_wayland->egl_display, 0);
|
||||
+ else
|
||||
+ g_debug ("Can't disable GL swap interval");
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
--
|
||||
cgit v0.12
|
||||
|
@ -18,13 +18,16 @@
|
||||
|
||||
Name: gtk3
|
||||
Version: 3.22.6
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
|
||||
|
||||
License: LGPLv2+
|
||||
URL: http://www.gtk.org
|
||||
Source0: http://download.gnome.org/sources/gtk+/3.22/gtk+-%{version}.tar.xz
|
||||
|
||||
# https://bugzilla.gnome.org/show_bug.cgi?id=769835
|
||||
Patch0: disable-egl-swap-interval.patch
|
||||
|
||||
BuildRequires: pkgconfig(atk) >= %{atk_version}
|
||||
BuildRequires: pkgconfig(atk-bridge-2.0)
|
||||
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
|
||||
@ -161,6 +164,7 @@ the functionality of the installed %{name} package.
|
||||
|
||||
%prep
|
||||
%setup -q -n gtk+-%{version}
|
||||
%patch0 -p1 -b .egl-swap-interval
|
||||
|
||||
%build
|
||||
(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi;
|
||||
@ -333,6 +337,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache
|
||||
%{_datadir}/installed-tests
|
||||
|
||||
%changelog
|
||||
* Tue Jan 10 2017 Michael Catanzaro <mcatanzaro@gnome.org> - 3.22.6-2
|
||||
- Add patch for GNOME #769835
|
||||
|
||||
* Thu Jan 05 2017 Kalev Lember <klember@redhat.com> - 3.22.6-1
|
||||
- Update to 3.22.6
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user