[arch-commits] Commit in gnome-shell/trunk (2 files)

Jan de Groot jgc at archlinux.org
Mon Apr 11 14:25:20 UTC 2016


    Date: Monday, April 11, 2016 @ 16:25:19
  Author: jgc
Revision: 264639

upgpkg: gnome-shell 3.20.0-3

Fix FS#48772

Added:
  gnome-shell/trunk/0001-Initialize-framebuffer-objects-early-so-clutter-will.patch
Modified:
  gnome-shell/trunk/PKGBUILD

-----------------------------------------------------------------+
 0001-Initialize-framebuffer-objects-early-so-clutter-will.patch |  106 ++++++++++
 PKGBUILD                                                        |   11 -
 2 files changed, 114 insertions(+), 3 deletions(-)

Added: 0001-Initialize-framebuffer-objects-early-so-clutter-will.patch
===================================================================
--- 0001-Initialize-framebuffer-objects-early-so-clutter-will.patch	                        (rev 0)
+++ 0001-Initialize-framebuffer-objects-early-so-clutter-will.patch	2016-04-11 14:25:19 UTC (rev 264639)
@@ -0,0 +1,106 @@
+From 26d339b91744dab5135ee9ea1d46fda62448ad95 Mon Sep 17 00:00:00 2001
+From: Jan de Groot <jgc at archlinux.org>
+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
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2016-04-11 14:20:21 UTC (rev 264638)
+++ PKGBUILD	2016-04-11 14:25:19 UTC (rev 264639)
@@ -4,7 +4,7 @@
 
 pkgname=gnome-shell
 pkgver=3.20.0
-pkgrel=2
+pkgrel=3
 pkgdesc="The next generation GNOME Shell"
 arch=(i686 x86_64)
 url="https://wiki.gnome.org/Projects/GnomeShell"
@@ -20,10 +20,12 @@
 groups=(gnome)
 source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz
         nm-libexecdir.patch
-	offscreen-memleak.patch)
+	offscreen-memleak.patch
+        0001-Initialize-framebuffer-objects-early-so-clutter-will.patch)
 sha256sums=('ee69f461dd3d03caf788dfc64241275868ec0bcd1ef814f3cd2803c25796b888'
             'e5bb10ad2e5c3e0fde3d05babd1bfdda701e553e02d493f7e54cb7832ce7e607'
-            '38bf66da2d92dbb3eab90d36feba0b1af65fe476d2982989dccd799aec0125a6')
+            '38bf66da2d92dbb3eab90d36feba0b1af65fe476d2982989dccd799aec0125a6'
+            '4dfd8a416fafdfa53ff07fd0433d5785f7bf434d3e576710879bfca5fe39c84f')
 
 prepare() {
   cd $pkgname-$pkgver
@@ -33,6 +35,9 @@
 
   # Fix memleak
   patch -Np1 -i ../offscreen-memleak.patch
+
+  # Catch FBO allocation failure
+  patch -Np1 -i ../0001-Initialize-framebuffer-objects-early-so-clutter-will.patch
 }
 
 build() {



More information about the arch-commits mailing list