debian/changelog                                      |    8 +
 debian/patches/102_remove_surface_binding_cache.patch |  119 ++++++++++++++++++
 debian/patches/series                                 |    1 
 3 files changed, 128 insertions(+)

New commits:
commit 439c2005691e3f2697050def97620630439cfa63
Author: Robert Hooker <sarv...@ubuntu.com>
Date:   Thu Nov 3 20:21:13 2011 -0400

    Add 102_remove_surface_binding_cache.patch, backport of 2174f8401

diff --git a/debian/changelog b/debian/changelog
index 263e290..6ab25b3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+xserver-xorg-video-intel (2:2.15.901-1ubuntu3) precise; urgency=low
+
+  * Add 102_remove_surface_binding_cache.patch:
+    Backport of upstream commit 2174f8401 to fix transparency on
+    LTSP. (LP: #785280)
+
+ -- Robert Hooker <sarv...@ubuntu.com>  Thu, 03 Nov 2011 19:01:44 -0400
+
 xserver-xorg-video-intel (2:2.15.901-1ubuntu2) oneiric; urgency=low
 
   * 101_copy-fb.patch: intel_batch_submit_internal is no longer added by
diff --git a/debian/patches/102_remove_surface_binding_cache.patch 
b/debian/patches/102_remove_surface_binding_cache.patch
new file mode 100644
index 0000000..3dd8b7d
--- /dev/null
+++ b/debian/patches/102_remove_surface_binding_cache.patch
@@ -0,0 +1,119 @@
+From 2174f840158aa9cfa370ade38be28f8dc8e4b526 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <ch...@chris-wilson.co.uk>
+Date: Thu, 03 Nov 2011 20:41:31 +0000
+Subject: uxa: Remove caching of surface binding location
+
+If the pixmap were to be used multiple times within a batch with
+mulitple formats, the cache would only return the initial location with
+the incorrect format and so cause rendering glitches. For instance, GTK+
+uses the same pixmap as an xrgb source and as an argb mask in order to
+premultiply and composite in a single pass. Rather than introduce an
+overly complication caching (handle, format) mechanism, kiss and remove
+the invalid implementation.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=40926
+Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
+---
+diff --git a/src/i965_render.c b/src/i965_render.c
+index 825fc13..8907139 100644
+--- a/src/i965_render.c
++++ b/src/i965_render.c
+@@ -1292,14 +1292,6 @@ gen4_set_picture_surface_state(intel_screen_private 
*intel,
+       }
+       intel_batch_mark_pixmap_domains(intel, priv,
+                                       read_domains, write_domain);
+-      if (is_dst) {
+-              if (priv->dst_bound)
+-                      return priv->dst_bound;
+-      } else {
+-              if (priv->src_bound)
+-                      return priv->src_bound;
+-      }
+-
+       ss = (struct brw_surface_state *)
+               (intel->surface_data + intel->surface_used);
+ 
+@@ -1330,11 +1322,6 @@ gen4_set_picture_surface_state(intel_screen_private 
*intel,
+       offset = intel->surface_used;
+       intel->surface_used += SURFACE_STATE_PADDED_SIZE;
+ 
+-      if (is_dst)
+-              priv->dst_bound = offset;
+-      else
+-              priv->src_bound = offset;
+-
+       return offset;
+ }
+ 
+@@ -1357,14 +1344,6 @@ gen7_set_picture_surface_state(intel_screen_private 
*intel,
+       }
+       intel_batch_mark_pixmap_domains(intel, priv,
+                                       read_domains, write_domain);
+-      if (is_dst) {
+-              if (priv->dst_bound)
+-                      return priv->dst_bound;
+-      } else {
+-              if (priv->src_bound)
+-                      return priv->src_bound;
+-      }
+-
+       ss = (struct gen7_surface_state *)
+               (intel->surface_data + intel->surface_used);
+ 
+@@ -1393,11 +1372,6 @@ gen7_set_picture_surface_state(intel_screen_private 
*intel,
+       offset = intel->surface_used;
+       intel->surface_used += SURFACE_STATE_PADDED_SIZE;
+ 
+-      if (is_dst)
+-              priv->dst_bound = offset;
+-      else
+-              priv->src_bound = offset;
+-
+       return offset;
+ }
+ 
+@@ -1750,8 +1724,6 @@ static Bool 
i965_composite_check_aperture(intel_screen_private *intel)
+ 
+ static void i965_surface_flush(struct intel_screen_private *intel)
+ {
+-      struct intel_pixmap *priv;
+-
+       drm_intel_bo_subdata(intel->surface_bo,
+                            0, intel->surface_used,
+                            intel->surface_data);
+@@ -1768,9 +1740,6 @@ static void i965_surface_flush(struct 
intel_screen_private *intel)
+       intel->surface_bo =
+               drm_intel_bo_alloc(intel->bufmgr, "surface data",
+                                  sizeof(intel->surface_data), 4096);
+-
+-      list_foreach_entry(priv, struct intel_pixmap, &intel->batch_pixmaps, 
batch)
+-              priv->dst_bound = priv->src_bound = 0;
+ }
+ 
+ static void
+diff --git a/src/intel.h b/src/intel.h
+index 4acd0f2..3b3f87d 100644
+--- a/src/intel.h
++++ b/src/intel.h
+@@ -176,7 +176,6 @@ struct intel_pixmap {
+ 
+       struct list flush, batch, in_flight;
+ 
+-      uint16_t src_bound, dst_bound;
+       uint16_t stride;
+       uint8_t tiling;
+       int8_t busy :2;
+diff --git a/src/intel_uxa.c b/src/intel_uxa.c
+index 9e58c69..8c6f754 100644
+--- a/src/intel_uxa.c
++++ b/src/intel_uxa.c
+@@ -636,7 +636,6 @@ void intel_set_pixmap_bo(PixmapPtr pixmap, dri_bo * bo)
+               if (priv->bo == bo)
+                       return;
+ 
+-              priv->dst_bound = priv->src_bound = 0;
+               if (list_is_empty(&priv->batch)) {
+                       dri_bo_unreference(priv->bo);
+               } else if (!drm_intel_bo_is_reusable(priv->bo)) {
+--
+cgit v0.9.0.2-2-gbebe
diff --git a/debian/patches/series b/debian/patches/series
index d890ef3..45b3cfa 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,4 +2,5 @@
 
 # Ubuntu patches
 101_copy-fb.patch
+102_remove_surface_binding_cache.patch
 120_check_privates.patch


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/e1rm9yx-00044u...@vasks.debian.org

Reply via email to