Date: Wednesday, January 23, 2013 @ 20:06:08
  Author: andyrtr
Revision: 175901

upgpkg: cairo 1.12.10-3

add upstream post release commit to fix image rendering issues

Added:
  
cairo/trunk/xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch
Modified:
  cairo/trunk/PKGBUILD
Deleted:
  cairo/trunk/revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch
  cairo/trunk/revert-xlib-map-to-image-requires-an-extents.patch

-----------------------------------------------------------------------------+
 PKGBUILD                                                                    |  
 11 
 revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch           |  
144 ----------
 revert-xlib-map-to-image-requires-an-extents.patch                          |  
 24 -
 xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch |  
 90 ++++++
 4 files changed, 94 insertions(+), 175 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2013-01-23 18:49:38 UTC (rev 175900)
+++ PKGBUILD    2013-01-23 19:06:08 UTC (rev 175901)
@@ -4,7 +4,7 @@
 
 pkgname=cairo
 pkgver=1.12.10
-pkgrel=2
+pkgrel=3
 pkgdesc="Cairo vector graphics library"
 arch=(i686 x86_64)
 license=('LGPL' 'MPL')
@@ -16,16 +16,13 @@
 replaces=('cairo-xcb')
 options=('!libtool')
 source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz
-       revert-xlib-map-to-image-requires-an-extents.patch
-       revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch)
+        
xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch)
 sha1sums=('be06d5aaa272bbbd08380f71ca710d5612881493'
-          '8bc096dd16a885ad041cb2137a64757f32d1cc88'
-          'fd8ffd9aba3679c344e4f25494f199a51b0ae62c')
+          '0631cc80b7512275d2be1d7d41497384013963ed')
 
 build() {
   cd "$srcdir/$pkgname-$pkgver"
-  patch -Np1 -R -i ../revert-xlib-map-to-image-requires-an-extents.patch
-  patch -Np1 -R -i 
../revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch
+  patch -Np1 -i 
${srcdir}/xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch
   ./configure --prefix=/usr \
        --sysconfdir=/etc \
        --localstatedir=/var \

Deleted: revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch
===================================================================
--- revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch   
2013-01-23 18:49:38 UTC (rev 175900)
+++ revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch   
2013-01-23 19:06:08 UTC (rev 175901)
@@ -1,144 +0,0 @@
-From a73e7ff0186176bc82cd3ae1432c054c1fd3aebd Mon Sep 17 00:00:00 2001
-From: Chris Wilson <[email protected]>
-Date: Sun, 06 Jan 2013 11:29:27 +0000
-Subject: xlib: Simplify source creation by use of map-to-image
-
-We were open-coding the functionality of map-to-image inside the source
-creation routines. so refactor to actually use map-to-image instead.
-
-Signed-off-by: Chris Wilson <[email protected]>
----
-diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c
-index e312222..d08052a 100644
---- a/src/cairo-xlib-source.c
-+++ b/src/cairo-xlib-source.c
-@@ -898,9 +898,6 @@ surface_source (cairo_xlib_surface_t *dst,
-     cairo_surface_pattern_t local_pattern;
-     cairo_status_t status;
-     cairo_rectangle_int_t upload, limit;
--    cairo_matrix_t m;
--    pixman_format_code_t format;
--    int draw_x, draw_y;
- 
-     src = pattern->surface;
-     if (src->type == CAIRO_SURFACE_TYPE_IMAGE &&
-@@ -910,7 +907,6 @@ surface_source (cairo_xlib_surface_t *dst,
- 
-       cairo_surface_reference (src);
- 
--prepare_shm_image:
-       proxy = malloc (sizeof(*proxy));
-       if (unlikely (proxy == NULL)) {
-           cairo_surface_destroy (src);
-@@ -954,46 +950,47 @@ prepare_shm_image:
-       }
-     }
- 
--    if (_cairo_surface_is_image (src))
--      format = ((cairo_image_surface_t *)src)->pixman_format;
--    else
--      format = _cairo_format_to_pixman_format_code 
(_cairo_format_from_content (src->content));
--    src = _cairo_xlib_surface_create_shm (dst, format,
--                                        upload.width, upload.height);
--    if (src == NULL) {
--      if (_cairo_surface_is_image (pattern->surface)) {
--          draw_x = upload.x;
--          draw_y = upload.y;
--          src = cairo_surface_reference (pattern->surface);
--          goto skip_paint;
--      }
--
--      src = _cairo_image_surface_create_with_pixman_format (NULL,
--                                                            format,
--                                                            upload.width,
--                                                            upload.height,
--                                                            0);
-+    xsrc = (cairo_xlib_surface_t *)
-+          _cairo_surface_create_similar_scratch (&dst->base,
-+                                                 src->content,
-+                                                 upload.width,
-+                                                 upload.height);
-+    if (xsrc->base.type != CAIRO_SURFACE_TYPE_XLIB) {
-+      cairo_surface_destroy (src);
-+      cairo_surface_destroy (&xsrc->base);
-+      return None;
-     }
- 
--    _cairo_pattern_init_for_surface (&local_pattern, pattern->surface);
--    cairo_matrix_init_translate (&local_pattern.base.matrix,
--                               upload.x, upload.y);
-+    if (_cairo_surface_is_image (src)) {
-+      status = _cairo_xlib_surface_draw_image (xsrc, (cairo_image_surface_t 
*)src,
-+                                               upload.x, upload.y,
-+                                               upload.width, upload.height,
-+                                               0, 0);
-+    } else {
-+      cairo_image_surface_t *image;
- 
--    status = _cairo_surface_paint (src,
--                                 CAIRO_OPERATOR_SOURCE,
--                                 &local_pattern.base,
--                                 NULL);
--    _cairo_pattern_fini (&local_pattern.base);
-+      image = _cairo_surface_map_to_image (&xsrc->base, NULL);
- 
--    if (unlikely (status)) {
--      cairo_surface_destroy (src);
--      return _cairo_surface_create_in_error (status);
-+      _cairo_pattern_init_for_surface (&local_pattern, pattern->surface);
-+      cairo_matrix_init_translate (&local_pattern.base.matrix,
-+                                   upload.x, upload.y);
-+
-+      status = _cairo_surface_paint (&image->base,
-+                                     CAIRO_OPERATOR_SOURCE,
-+                                     &local_pattern.base,
-+                                     NULL);
-+      _cairo_pattern_fini (&local_pattern.base);
-+
-+      status = _cairo_surface_unmap_image (&xsrc->base, image);
-+      if (unlikely (status)) {
-+          cairo_surface_destroy (src);
-+          return _cairo_surface_create_in_error (status);
-+      }
-     }
- 
--    draw_x = draw_y = 0;
--skip_paint:
-     _cairo_pattern_init_static_copy (&local_pattern.base, &pattern->base);
-     if (upload.x | upload.y) {
-+      cairo_matrix_t m;
-       cairo_matrix_init_translate (&m, -upload.x, -upload.y);
-       cairo_matrix_multiply (&local_pattern.base.matrix,
-                              &local_pattern.base.matrix,
-@@ -1001,29 +998,6 @@ skip_paint:
-     }
- 
-     *src_x = *src_y = 0;
--    if (src->device == dst->base.device &&
--      _cairo_xlib_shm_surface_get_pixmap (src)) {
--          pattern = &local_pattern;
--          goto prepare_shm_image;
--    }
--
--    xsrc = (cairo_xlib_surface_t *)
--          _cairo_surface_create_similar_scratch (&dst->base,
--                                                 src->content,
--                                                 upload.width,
--                                                 upload.height);
--    if (xsrc->base.type != CAIRO_SURFACE_TYPE_XLIB) {
--      cairo_surface_destroy (src);
--      cairo_surface_destroy (&xsrc->base);
--      return None;
--    }
--
--    status = _cairo_xlib_surface_draw_image (xsrc, (cairo_image_surface_t 
*)src,
--                                           draw_x, draw_y,
--                                           upload.width, upload.height,
--                                           0, 0);
--    cairo_surface_destroy (src);
--
-     _cairo_xlib_surface_ensure_picture (xsrc);
-     if (! picture_set_properties (xsrc->display,
-                                 xsrc->picture,
---
-cgit v0.9.0.2-2-gbebe

Deleted: revert-xlib-map-to-image-requires-an-extents.patch
===================================================================
--- revert-xlib-map-to-image-requires-an-extents.patch  2013-01-23 18:49:38 UTC 
(rev 175900)
+++ revert-xlib-map-to-image-requires-an-extents.patch  2013-01-23 19:06:08 UTC 
(rev 175901)
@@ -1,24 +0,0 @@
-From dd20c1f4d6419238bbb37fb93a48986f83c6e6c2 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <[email protected]>
-Date: Wed, 09 Jan 2013 12:38:09 +0000
-Subject: xlib: map-to-image requires an extents
-
-Signed-off-by: Chris Wilson <[email protected]>
----
-diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c
-index d08052a..0689d82 100644
---- a/src/cairo-xlib-source.c
-+++ b/src/cairo-xlib-source.c
-@@ -968,8 +968,9 @@ surface_source (cairo_xlib_surface_t *dst,
-                                                0, 0);
-     } else {
-       cairo_image_surface_t *image;
-+      cairo_rectangle_int_t map_extents = { 0,0, upload.width,upload.height };
- 
--      image = _cairo_surface_map_to_image (&xsrc->base, NULL);
-+      image = _cairo_surface_map_to_image (&xsrc->base, &map_extents);
- 
-       _cairo_pattern_init_for_surface (&local_pattern, pattern->surface);
-       cairo_matrix_init_translate (&local_pattern.base.matrix,
---
-cgit v0.9.0.2-2-gbebe

Added: 
xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch
===================================================================
--- xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch 
                        (rev 0)
+++ xlib_Do_not_upload_the_whole_image_just_because_we_want_an_entire_row.patch 
2013-01-23 19:06:08 UTC (rev 175901)
@@ -0,0 +1,90 @@
+From fa4f48cccb6c7f4e1afb2ff4b98b906b7d8d4afc Mon Sep 17 00:00:00 2001
+From: Chris Wilson <[email protected]>
+Date: Wed, 23 Jan 2013 15:04:26 +0000
+Subject: xlib: Do not upload the whole image just because we want an entire row
+
+Fixes regression exposed by
+
+commit a73e7ff0186176bc82cd3ae1432c054c1fd3aebd
+Author: Chris Wilson <[email protected]>
+Date:   Sun Jan 6 11:29:27 2013 +0000
+
+    xlib: Simplify source creation by use of map-to-image
+
+but ultimately from
+
+commit 74941f822015cc50cd8477d0cf97f1a70dbff60b
+Author: Chris Wilson <[email protected]>
+Date:   Wed Jan 2 22:27:55 2013 +0000
+
+    xlib: Use SHM transport for ordinary image uploads
+
+Reported-by: Gökçen Eraslan <[email protected]>
+Reported-by: Guillaume Ayoub <[email protected]>
+Reported-by: Emmanuel Benisty <[email protected]>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59635
+Signed-off-by: Chris Wilson <[email protected]>
+---
+diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c
+index 24290f7..ca55278 100644
+--- a/src/cairo-xlib-source.c
++++ b/src/cairo-xlib-source.c
+@@ -1035,7 +1035,13 @@ surface_source (cairo_xlib_surface_t *dst,
+ 
+       status = _cairo_surface_unmap_image (&xsrc->base, image);
+       if (unlikely (status)) {
+-          cairo_surface_destroy (src);
++          cairo_surface_destroy (&xsrc->base);
++          return _cairo_surface_create_in_error (status);
++      }
++
++      status = _cairo_xlib_surface_put_shm (xsrc);
++      if (unlikely (status)) {
++          cairo_surface_destroy (&xsrc->base);
+           return _cairo_surface_create_in_error (status);
+       }
+     }
+diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c
+index dbc677e..ee69b66 100644
+--- a/src/cairo-xlib-surface.c
++++ b/src/cairo-xlib-surface.c
+@@ -1139,26 +1139,24 @@ _cairo_xlib_surface_draw_image (cairo_xlib_surface_t   
*surface,
+               max_request_size = XMaxRequestSize (display->display);
+           if (max_request_size > 8192)
+               max_request_size = 8192;
+-          if (image->stride * image->height > max_request_size) {
++          if (width * height * 4 > max_request_size) {
+               shm_image = _cairo_xlib_surface_create_shm__image (surface,
+                                                                  
image->pixman_format,
+-                                                                 image->width,
+-                                                                 
image->height);
++                                                                 width, 
height);
+               if (shm_image && shm_image->status == CAIRO_STATUS_SUCCESS) {
+                   cairo_image_surface_t *clone = (cairo_image_surface_t *) 
shm_image;
+-                  if (clone->stride == image->stride) {
+-                      memcpy (clone->data, image->data, clone->stride * 
clone->height);
+-                  } else {
+-                      pixman_image_composite32 (PIXMAN_OP_SRC,
+-                                                image->pixman_image, NULL, 
clone->pixman_image,
+-                                                0, 0,
+-                                                0, 0,
+-                                                0, 0,
+-                                                image->width, image->height);
+-                  }
++                  pixman_image_composite32 (PIXMAN_OP_SRC,
++                                            image->pixman_image, NULL, 
clone->pixman_image,
++                                            src_x, src_y,
++                                            0, 0,
++                                            0, 0,
++                                            width, height);
+                   ximage.obdata = _cairo_xlib_shm_surface_get_obdata 
(shm_image);
+                   ximage.data = (char *)clone->data;
+                   ximage.bytes_per_line = clone->stride;
++                  ximage.width = width;
++                  ximage.height = height;
++                  src_x = src_y = 0;
+               }
+           }
+       } else
+--
+cgit v0.9.0.2-2-gbebe

Reply via email to