Hello community,

here is the log from the commit of package mutter for openSUSE:Factory checked 
in at 2012-06-10 20:18:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mutter (Old)
 and      /work/SRC/openSUSE:Factory/.mutter.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mutter", Maintainer is "j...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/mutter/mutter.changes    2012-05-08 
06:47:11.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.mutter.new/mutter.changes       2012-06-10 
21:51:53.000000000 +0200
@@ -1,0 +2,8 @@
+Thu May 31 14:25:43 UTC 2012 - fcro...@suse.com
+
+- Add mutter-never-slice-shape-mask.patch,
+  mutter-use-cogl-texrect-api.patch: Fix window texturing on
+  hardware without ARB_texture_non_power_of_two (rh#813648,
+  bgo#674731, bgo#672711).
+
+-------------------------------------------------------------------

New:
----
  mutter-never-slice-shape-mask.patch
  mutter-use-cogl-texrect-api.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mutter.spec ++++++
--- /var/tmp/diff_new_pack.n9t7xr/_old  2012-06-10 21:51:55.000000000 +0200
+++ /var/tmp/diff_new_pack.n9t7xr/_new  2012-06-10 21:51:55.000000000 +0200
@@ -26,6 +26,10 @@
 Source:         
http://download.gnome.org/sources/mutter/3.4/%{name}-%{version}.tar.xz
 # PATCH-FIX-UPSTREAM mutter-fix-crash-when-frame-is-NULL.patch bgo#675254 
zai...@opensuse.org -- fixes crashes in extensions. 
 Patch0:         mutter-fix-crash-when-frame-is-NULL.patch
+# PATCH-FIX-UPSTREAM mutter-never-slice-shape-mask.patch bgo#674731 rh#813648 
fcro...@suse.com -- Fix window texturing on hardware without 
ARB_texture_non_power_of_two
+Patch1:         mutter-never-slice-shape-mask.patch
+# PATCH-FIX-UPSTREAM mutter-use-cogl-texrect-api.patch bgo#672711 rh#813648 
fcro...@suse.com -- Fix window texturing on hardware without 
ARB_texture_non_power_of_two
+Patch2:         mutter-use-cogl-texrect-api.patch
 BuildRequires:  fdupes
 BuildRequires:  gnome-doc-utils-devel
 BuildRequires:  gobject-introspection-devel >= 0.9.5
@@ -91,6 +95,8 @@
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
 translation-update-upstream
 
 %if 0%{?BUILD_FROM_VCS}


++++++ mutter-never-slice-shape-mask.patch ++++++
>From a22859a64a60b38346ce7faabad6a9a48d7a8d9f Mon Sep 17 00:00:00 2001
From: Robert Bragg <rob...@linux.intel.com>
Date: Wed, 25 Apr 2012 00:48:19 +0000
Subject: shaped-texture: never slice shape mask texture

Since Cogl doesn't support multi-texturing with sliced textures and the
shape texture is combined with the texture-from-pixmap texture we need
to make sure we never construct a sliced mask texture. This patch simply
passes the COGL_TEXTURE_NO_SLICE flag to cogl_texture_from_data when
creating the shape mask texture.

https://bugzilla.gnome.org/show_bug.cgi?id=674731
---
diff --git a/src/compositor/meta-shaped-texture.c 
b/src/compositor/meta-shaped-texture.c
index 07bd93c..182d23b 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -313,12 +313,17 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
         }
       else
 #endif /* GL_TEXTURE_RECTANGLE_ARB */
-        priv->mask_texture = cogl_texture_new_from_data (tex_width, tex_height,
-                                                         COGL_TEXTURE_NONE,
-                                                         COGL_PIXEL_FORMAT_A_8,
-                                                         COGL_PIXEL_FORMAT_ANY,
-                                                         stride,
-                                                         mask_data);
+        {
+         /* Note: we don't allow slicing for this texture because we
+           * need to use it with multi-texturing which doesn't support
+           * sliced textures */
+          priv->mask_texture = cogl_texture_new_from_data (tex_width, 
tex_height,
+                                                           
COGL_TEXTURE_NO_SLICING,
+                                                           
COGL_PIXEL_FORMAT_A_8,
+                                                           
COGL_PIXEL_FORMAT_ANY,
+                                                           stride,
+                                                           mask_data);
+        }
 
       g_free (mask_data);
 
--
cgit v0.9.0.2
++++++ mutter-use-cogl-texrect-api.patch ++++++
>From ed358c8f4b1200e8532dcc0b249f51752d2695eb Mon Sep 17 00:00:00 2001
From: Neil Roberts <n...@linux.intel.com>
Date: Fri, 23 Mar 2012 18:51:25 +0000
Subject: meta-texture-rectangle: Use Cogl's API to create a rectangle texture

Cogl now has public experimental API to create a rectangle texture
which we can use instead of creating a foreign texture with GL. This
avoids Mutter depending on Cogl including a GL header from its public
headers which it might not do in future.

https://bugzilla.gnome.org/show_bug.cgi?id=672711
---
diff --git a/src/compositor/meta-shaped-texture.c 
b/src/compositor/meta-shaped-texture.c
index 182d23b..ae21945 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -250,7 +250,6 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
       int i;
       int n_rects;
       int stride;
-      GLenum paint_gl_target;
 
       /* If we have no shape region and no (or an empty) overlay region, we
        * don't need to create a full mask texture, so quit early. */
@@ -293,26 +292,14 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
 
       install_overlay_path (stex, mask_data, tex_width, tex_height, stride);
 
-      cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target);
-
-#ifdef GL_TEXTURE_RECTANGLE_ARB
-      if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB)
-        {
-          priv->mask_texture
-            = meta_texture_rectangle_new (tex_width, tex_height,
-                                          0, /* flags */
-                                          /* data format */
-                                          COGL_PIXEL_FORMAT_A_8,
-                                          /* internal GL format */
-                                          GL_ALPHA,
-                                          /* internal cogl format */
-                                          COGL_PIXEL_FORMAT_A_8,
-                                          /* rowstride */
-                                          stride,
-                                          mask_data);
-        }
+      if (meta_texture_rectangle_check (paint_tex))
+        priv->mask_texture = meta_texture_rectangle_new (tex_width, tex_height,
+                                                         COGL_PIXEL_FORMAT_A_8,
+                                                         COGL_PIXEL_FORMAT_A_8,
+                                                         stride,
+                                                         mask_data,
+                                                         NULL /* error */);
       else
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
         {
          /* Note: we don't allow slicing for this texture because we
            * need to use it with multi-texturing which doesn't support
diff --git a/src/compositor/meta-texture-rectangle.c 
b/src/compositor/meta-texture-rectangle.c
index d699729..af6817f 100644
--- a/src/compositor/meta-texture-rectangle.c
+++ b/src/compositor/meta-texture-rectangle.c
@@ -5,7 +5,7 @@
  *
  * Authored By Neil Roberts  <n...@linux.intel.com>
  *
- * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011, 2012 Intel Corporation
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -25,94 +25,77 @@
 
 #include <config.h>
 
-#include "meta-texture-rectangle.h"
-
-#ifdef GL_TEXTURE_RECTANGLE_ARB
+#define CLUTTER_ENABLE_EXPERIMENTAL_API
+#define COGL_ENABLE_EXPERIMENTAL_API
 
-static void (* pf_glGetIntegerv) (GLenum pname, GLint *params);
-static void (* pf_glTexImage2D) (GLenum target, GLint level,
-                                 GLint internalFormat,
-                                 GLsizei width, GLsizei height,
-                                 GLint border, GLenum format, GLenum type,
-                                 const GLvoid *pixels);
-static void (* pf_glGenTextures) (GLsizei n, GLuint *textures);
-static void (* pf_glDeleteTextures) (GLsizei n, const GLuint *texture);
-static void (* pf_glBindTexture) (GLenum target, GLuint texture);
-
-static void
-rectangle_texture_destroy_cb (void *user_data)
-{
-  GLuint tex = GPOINTER_TO_UINT (user_data);
-
-  pf_glDeleteTextures (1, &tex);
-}
-
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
+#include <clutter/clutter.h>
+#include "meta-texture-rectangle.h"
 
-CoglHandle
+CoglTexture *
 meta_texture_rectangle_new (unsigned int width,
                             unsigned int height,
-                            CoglTextureFlags flags,
                             CoglPixelFormat format,
-                            GLenum internal_gl_format,
-                            GLenum internal_format,
+                            CoglPixelFormat internal_format,
                             unsigned int rowstride,
-                            const guint8 *data)
+                            const guint8 *data,
+                            GError **error)
 {
-  CoglHandle cogl_tex = COGL_INVALID_HANDLE;
-
-#ifdef GL_TEXTURE_RECTANGLE_ARB
-
-  static CoglUserDataKey user_data_key;
-  GLint old_binding;
-  GLuint tex;
-
-  if (pf_glGenTextures == NULL)
-    {
-      pf_glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
-      pf_glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
-      pf_glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
-      pf_glDeleteTextures = (void *) cogl_get_proc_address 
("glDeleteTextures");
-      pf_glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
-    }
-
-  pf_glGenTextures (1, &tex);
-  pf_glGetIntegerv (GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding);
-  pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
-  pf_glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
-                   internal_gl_format, width, height,
-                   0, internal_gl_format,
-                   GL_UNSIGNED_BYTE, NULL);
-  pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, old_binding);
+  ClutterBackend *backend =
+    clutter_get_default_backend ();
+  CoglContext *context =
+    clutter_backend_get_cogl_context (backend);
+  CoglTextureRectangle *tex_rect;
+
+  tex_rect = cogl_texture_rectangle_new_with_size (context,
+                                                   width, height,
+                                                   internal_format,
+                                                   error);
+  if (tex_rect == NULL)
+    return NULL;
 
-  cogl_tex = cogl_texture_new_from_foreign (tex,
-                                            GL_TEXTURE_RECTANGLE_ARB,
-                                            width, height,
-                                            0, 0, /* no waste */
-                                            internal_format);
-
-  /* Cogl won't destroy the GL texture when a foreign texture is used
-     so we need to destroy it manually. We can set a destroy
-     notification callback to do this transparently */
-  cogl_object_set_user_data (cogl_tex,
-                             &user_data_key,
-                             GUINT_TO_POINTER (tex),
-                             rectangle_texture_destroy_cb);
-
-  /* Use cogl_texture_set_region instead of uploading the data
-     directly with GL calls so that we can let Cogl deal with setting
-     the pixel store parameters and handling format conversion */
   if (data)
-    cogl_texture_set_region (cogl_tex,
-                             0, 0, /* src x/y */
-                             0, 0, /* dst x/y */
-                             width, height, /* dst width/height */
-                             width, height, /* src width/height */
+    cogl_texture_set_region (COGL_TEXTURE (tex_rect),
+                             0, 0, /* src_x/y */
+                             0, 0, /* dst_x/y */
+                             width, height, /* dst_width/height */
+                             width, height, /* width/height */
                              format,
                              rowstride,
                              data);
 
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
+  return COGL_TEXTURE (tex_rect);
+}
+
+static void
+texture_rectangle_check_cb (CoglTexture *sub_texture,
+                            const float *sub_texture_coords,
+                            const float *meta_coords,
+                            void *user_data)
+{
+  gboolean *result = user_data;
+
+  if (cogl_is_texture_rectangle (sub_texture))
+    *result = TRUE;
+}
+
+/* Determines if the given texture is using a rectangle texture as its
+ * primitive texture type. Eventually this function could be replaced
+ * with cogl_texture_get_type if Cogl makes that public.
+ *
+ * http://git.gnome.org/browse/cogl/commit/?h=8012eee31
+ */
+gboolean
+meta_texture_rectangle_check (CoglTexture *texture)
+{
+  gboolean result = FALSE;
+
+  cogl_meta_texture_foreach_in_region (COGL_META_TEXTURE (texture),
+                                       0.0f, 0.0f, /* tx_1 / ty_1 */
+                                       1.0f, 1.0f, /* tx_2 / ty_2 */
+                                       COGL_PIPELINE_WRAP_MODE_REPEAT,
+                                       COGL_PIPELINE_WRAP_MODE_REPEAT,
+                                       texture_rectangle_check_cb,
+                                       &result);
 
-  return cogl_tex;
+  return result;
 }
diff --git a/src/compositor/meta-texture-rectangle.h 
b/src/compositor/meta-texture-rectangle.h
index b777316..7372b29 100644
--- a/src/compositor/meta-texture-rectangle.h
+++ b/src/compositor/meta-texture-rectangle.h
@@ -30,15 +30,17 @@
 
 G_BEGIN_DECLS
 
-CoglHandle
+CoglTexture *
 meta_texture_rectangle_new (unsigned int width,
                             unsigned int height,
-                            CoglTextureFlags flags,
                             CoglPixelFormat format,
-                            GLenum internal_gl_format,
-                            GLenum internal_format,
+                            CoglPixelFormat internal_format,
                             unsigned int rowstride,
-                            const guint8 *data);
+                            const guint8 *data,
+                            GError **error);
+
+gboolean
+meta_texture_rectangle_check (CoglTexture *texture);
 
 G_END_DECLS
 
diff --git a/src/compositor/meta-texture-tower.c 
b/src/compositor/meta-texture-tower.c
index 0025472..2dee777 100644
--- a/src/compositor/meta-texture-tower.c
+++ b/src/compositor/meta-texture-tower.c
@@ -98,18 +98,6 @@ meta_texture_tower_free (MetaTextureTower *tower)
   g_slice_free (MetaTextureTower, tower);
 }
 
-#ifdef GL_TEXTURE_RECTANGLE_ARB
-static gboolean
-texture_is_rectangle (CoglHandle texture)
-{
-  GLuint gl_tex;
-  GLenum gl_target;
-
-  cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
-  return gl_target == GL_TEXTURE_RECTANGLE_ARB;
-}
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
-
 /**
  * meta_texture_tower_set_base_texture:
  * @tower: a #MetaTextureTower
@@ -354,13 +342,11 @@ get_paint_level (int width, int height)
     return (int)(0.5 + lambda);
 }
 
-#ifdef GL_TEXTURE_RECTANGLE_ARB
 static gboolean
 is_power_of_two (int x)
 {
   return (x & (x - 1)) == 0;
 }
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
 
 static void
 texture_tower_create_texture (MetaTextureTower *tower,
@@ -368,25 +354,23 @@ texture_tower_create_texture (MetaTextureTower *tower,
                               int               width,
                               int               height)
 {
-#ifdef GL_TEXTURE_RECTANGLE_ARB
   if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
-      texture_is_rectangle (tower->textures[level - 1]))
+      meta_texture_rectangle_check (tower->textures[level - 1]))
     {
       tower->textures[level] =
         meta_texture_rectangle_new (width, height,
-                                    0, /* flags */
                                     /* data format */
                                     TEXTURE_FORMAT,
-                                    /* internal GL format */
-                                    GL_RGBA,
                                     /* internal cogl format */
                                     TEXTURE_FORMAT,
                                     /* rowstride */
                                     width * 4,
+                                    /* data */
+                                    NULL,
+                                    /* error */
                                     NULL);
     }
   else
-#endif /* GL_TEXTURE_RECTANGLE_ARB */
     {
       tower->textures[level] = cogl_texture_new_with_size (width, height,
                                                            
COGL_TEXTURE_NO_AUTO_MIPMAP,
--
cgit v0.9.0.2
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to