commit:     06f503acebc148728d4bc4837030b15c8e0bdcde
Author:     Ole Reifschneider <tranquility <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 18 19:42:47 2016 +0000
Commit:     Ole Reifschneider <tranquility <AT> gentoo <DOT> org>
CommitDate: Mon Apr 18 19:42:47 2016 +0000
URL:        https://gitweb.gentoo.org/proj/gnome.git/commit/?id=06f503ac

gnome-base/gnome-shell: Bump version to 3.20.1 and fix nvidia crash

Package-Manager: portage-2.2.28
Manifest-Sign-Key: 0xE9E568677E8B4D42

 .../files/gnome-shell-3.20-fix-nvidia-crash.patch  | 106 +++++++++++++++++++++
 ...ell-3.20.0.ebuild => gnome-shell-3.20.1.ebuild} |   4 +
 2 files changed, 110 insertions(+)

diff --git 
a/gnome-base/gnome-shell/files/gnome-shell-3.20-fix-nvidia-crash.patch 
b/gnome-base/gnome-shell/files/gnome-shell-3.20-fix-nvidia-crash.patch
new file mode 100644
index 0000000..19eda8e
--- /dev/null
+++ b/gnome-base/gnome-shell/files/gnome-shell-3.20-fix-nvidia-crash.patch
@@ -0,0 +1,106 @@
+From 26d339b91744dab5135ee9ea1d46fda62448ad95 Mon Sep 17 00:00:00 2001
+From: Jan de Groot <[email protected]>
+Date: Mon, 11 Apr 2016 14:00:33 +0000
+Subject: [PATCH] Initialize framebuffer objects early so clutter will not
+ abort a few operations later.
+
+Checking offscreen for COGL_INVALID_HANDLE is not sufficient, as 
cogl_offscreen_new_with_texture doesn't initialize framebuffer objects but lets 
Cogl solve this the lazy way. cogl_offscreen_new_with_texture will never return 
COGL_INVALID_HANDLE anyways.
+---
+ src/st/st-theme-node-drawing.c    | 35 +++++++++++++++++++++++------------
+ src/st/st-theme-node-transition.c | 18 ++++++++++++++++--
+ 2 files changed, 39 insertions(+), 14 deletions(-)
+
+diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c
+index 1f28ed9..4a6a234 100644
+--- a/src/st/st-theme-node-drawing.c
++++ b/src/st/st-theme-node-drawing.c
+@@ -2247,22 +2247,33 @@ st_theme_node_prerender_shadow (StThemeNodePaintState 
*state)
+                                        COGL_TEXTURE_NO_SLICING,
+                                        COGL_PIXEL_FORMAT_ANY);
+   if (buffer != COGL_INVALID_HANDLE)
+-    offscreen = cogl_offscreen_new_with_texture (buffer);
+-
+-  if (offscreen != COGL_INVALID_HANDLE)
+     {
+-      ClutterActorBox box = { 0, 0, state->box_shadow_width, 
state->box_shadow_height};
++      CoglError *error = NULL;
++
++      offscreen = cogl_offscreen_new_with_texture (buffer);
++
++      if (cogl_framebuffer_allocate (COGL_FRAMEBUFFER (offscreen), &error))
++        {
++          ClutterActorBox box = { 0, 0, state->box_shadow_width, 
state->box_shadow_height};
++
++          cogl_framebuffer_orthographic (offscreen, 0, 0,
++                                         state->box_shadow_width,
++                                         state->box_shadow_height, 0, 1.0);
++          cogl_framebuffer_clear4f (offscreen, COGL_BUFFER_BIT_COLOR, 0, 0, 
0, 0);
+ 
+-      cogl_framebuffer_orthographic (offscreen, 0, 0,
+-                                     state->box_shadow_width,
+-                                     state->box_shadow_height, 0, 1.0);
+-      cogl_framebuffer_clear4f (offscreen, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 0);
++          st_theme_node_paint_borders (state, offscreen, &box, 0xFF);
+ 
+-      st_theme_node_paint_borders (state, offscreen, &box, 0xFF);
+-      cogl_handle_unref (offscreen);
++          cogl_handle_unref (offscreen);
+ 
+-      state->box_shadow_pipeline = _st_create_shadow_pipeline 
(st_theme_node_get_box_shadow (node),
+-                                                               buffer);
++          state->box_shadow_pipeline = _st_create_shadow_pipeline 
(st_theme_node_get_box_shadow (node),
++                                                                   buffer);
++        }
++      else
++        {
++          cogl_handle_unref (offscreen);
++
++          cogl_error_free (error);
++        }
+     }
+ 
+   if (buffer != COGL_INVALID_HANDLE)
+diff --git a/src/st/st-theme-node-transition.c 
b/src/st/st-theme-node-transition.c
+index 1eef17b..f3350a1 100644
+--- a/src/st/st-theme-node-transition.c
++++ b/src/st/st-theme-node-transition.c
+@@ -242,6 +242,8 @@ setup_framebuffers (StThemeNodeTransition *transition,
+   StThemeNodeTransitionPrivate *priv = transition->priv;
+   guint width, height;
+ 
++  CoglError *catch_error = NULL;
++
+   /* template material to avoid unnecessary shader compilation */
+   static CoglHandle material_template = COGL_INVALID_HANDLE;
+ 
+@@ -269,13 +271,25 @@ setup_framebuffers (StThemeNodeTransition *transition,
+   if (priv->old_offscreen)
+     cogl_handle_unref (priv->old_offscreen);
+   priv->old_offscreen = cogl_offscreen_new_with_texture (priv->old_texture);
++  if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (priv->old_offscreen), 
&catch_error))
++    {
++      cogl_object_unref (priv->old_offscreen);
++      cogl_error_free (catch_error);
++      priv->old_offscreen = COGL_INVALID_HANDLE;
++      g_return_val_if_fail (priv->old_offscreen != COGL_INVALID_HANDLE, 
FALSE);
++    }
+ 
+   if (priv->new_offscreen)
+     cogl_handle_unref (priv->new_offscreen);
+   priv->new_offscreen = cogl_offscreen_new_with_texture (priv->new_texture);
+ 
+-  g_return_val_if_fail (priv->old_offscreen != COGL_INVALID_HANDLE, FALSE);
+-  g_return_val_if_fail (priv->new_offscreen != COGL_INVALID_HANDLE, FALSE);
++  if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (priv->new_offscreen), 
&catch_error))
++    {
++      cogl_object_unref (priv->new_offscreen);
++      cogl_error_free (catch_error);
++      priv->new_offscreen = COGL_INVALID_HANDLE;
++      g_return_val_if_fail (priv->new_offscreen != COGL_INVALID_HANDLE, 
FALSE);
++    }
+ 
+   if (priv->material == NULL)
+     {
+-- 
+2.7.1
+

diff --git a/gnome-base/gnome-shell/gnome-shell-3.20.0.ebuild 
b/gnome-base/gnome-shell/gnome-shell-3.20.1.ebuild
similarity index 97%
rename from gnome-base/gnome-shell/gnome-shell-3.20.0.ebuild
rename to gnome-base/gnome-shell/gnome-shell-3.20.1.ebuild
index af77e1f..66cabaf 100644
--- a/gnome-base/gnome-shell/gnome-shell-3.20.0.ebuild
+++ b/gnome-base/gnome-shell/gnome-shell-3.20.1.ebuild
@@ -131,6 +131,10 @@ src_prepare() {
        # https://bugzilla.gnome.org/show_bug.cgi?id=726435
        epatch "${FILESDIR}"/${PN}-3.14.0-bluetooth-gold.patch
 
+       # Fix crash with nvidia-drivers, bug #578216
+       # https://bugzilla.gnome.org/show_bug.cgi?id=764898
+       epatch "${FILESDIR}"/${PN}-3.20-fix-nvidia-crash.patch
+
        epatch_user
 
        eautoreconf

Reply via email to