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
