ChangeLog             |  114 ++++++++++++++++++++++++++++++++++++++++++++++++
 NEWS                  |   30 ++++++++++++
 configure.ac          |    2 
 debian/changelog      |   21 ++++++++
 debian/control        |    2 
 man/intel.man         |   34 ++++++++++----
 src/drmmode_display.c |    2 
 src/i830_driver.c     |    2 
 src/i830_render.c     |   67 +++++++---------------------
 src/i830_uxa.c        |   29 ++++++++++++
 src/i915_render.c     |   23 ++-------
 uxa/uxa-render.c      |  117 ++++++++++++++++++--------------------------------
 12 files changed, 292 insertions(+), 151 deletions(-)

New commits:
commit f0a6efadeb339a28a1f91ecf2bcd4607131907da
Author: Brice Goglin <bgog...@debian.org>
Date:   Tue Mar 23 07:39:32 2010 +0100

    Prepare changelog for upload

diff --git a/debian/changelog b/debian/changelog
index a9bc5e9..af3f09c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,8 @@
-xserver-xorg-video-intel (2:2.10.903-1) UNRELEASED; urgency=low
+xserver-xorg-video-intel (2:2.10.903-1) experimental; urgency=low
 
   * New upstream release candidate.
 
- -- Brice Goglin <bgog...@debian.org>  Tue, 23 Mar 2010 07:38:21 +0100
+ -- Brice Goglin <bgog...@debian.org>  Tue, 23 Mar 2010 07:39:23 +0100
 
 xserver-xorg-video-intel (2:2.10.902-1) experimental; urgency=low
 

commit bac709198c4a9754d3e68fd61459b9568c87fe0d
Author: Brice Goglin <bgog...@debian.org>
Date:   Tue Mar 23 07:38:49 2010 +0100

    New upstream release candidate

diff --git a/ChangeLog b/ChangeLog
index 66579fc..20a5740 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,117 @@
+commit 9c037f61a490c96f9095f7ff3fecbf41f5efe9f7
+Author: Carl Worth <cwo...@cworth.org>
+Date:   Mon Mar 22 15:23:04 2010 -0700
+
+    Update version to 2.10.903
+    
+    For today's snapshot.
+
+commit 11142cffe4bc81e1ce465ea725fcaef024130082
+Author: Carl Worth <cwo...@cworth.org>
+Date:   Mon Mar 22 15:22:28 2010 -0700
+
+    NEWS: Add notes for 2.10.903
+    
+    For today's snapshot.
+
+commit f206816154fd44e61b0bdeaab1aa4c5359c3b70a
+Author: Carl Worth <cwo...@cworth.org>
+Date:   Mon Mar 22 14:14:46 2010 -0700
+
+    man: Update list of available 'sclaing mode' property values.
+    
+    Include the names from the current kernel driver along with accurate
+    descriptions of each. Indicate how to use the values with:
+    
+       xrandr --output output --set property value
+    
+    and point the user to "xrandr --prop" for an accurate list of
+    currently available values.
+    
+    Closes bug:
+    
+       xf86-video-intel manpage needs update for KMS xrandr properties
+       http://bugs.freedesktop.org/show_bug.cgi?id=25606
+
+commit d1dfab6b1649214177435629d8e85239dbe44d89
+Author: Matthias Hopf <mh...@suse.de>
+Date:   Wed Mar 17 15:13:51 2010 +0100
+
+    Clear drmmode_output->mode_output in drmmode_output_destroy().
+
+commit 10cd04a84bcb6313903fc23b2d7791658ebc6b8e
+Author: Li Peng <peng...@linux.intel.com>
+Date:   Sat Mar 20 00:21:48 2010 +0800
+
+    Initialize flip_count before using it
+    
+    Otherwise it would be a random value and drmmode_page_flip_handler()
+    won't have a chance to call I830DRI2FlipEventHandler() and indicate
+    a full page flip is complete.
+    
+    Signed-off-by: Li Peng <peng...@intel.com>
+
+commit 3d4b3f257fbbb69c6f236d9803abe54a90d7d434
+Author: Dave Airlie <airl...@redhat.com>
+Date:   Thu Mar 18 12:48:39 2010 +1000
+
+    intel: free bus id in error path after printing it out.
+    
+    the error message prints out a freed string, spotted during
+    code reappropriation to radeon driver.
+    
+    Signed-off-by: Dave Airlie <airl...@redhat.com>
+
+commit 31d5f84bb4416ef92abd97264d52cdab7a184687
+Author: Chris Wilson <ch...@chris-wilson.co.uk>
+Date:   Wed Mar 17 09:11:05 2010 +0000
+
+    i915: Correct preamble for emit_composite
+    
+    Fixes:
+    http://bugs.freedesktop.org/show_bug.cgi?id=27123
+    
+    Fatal server error:
+    i915_emit_composite_setup: ADVANCE_BATCH: under-used allocation 100/104
+    
+    Introduced with commit d6b7f96fde1add92fd11f5a75869ae6fc688bf77.
+    
+    Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
+
+commit d6b7f96fde1add92fd11f5a75869ae6fc688bf77
+Author: Chris Wilson <ch...@chris-wilson.co.uk>
+Date:   Sat Mar 6 15:49:04 2010 +0000
+
+    Fill alpha on xrgb images.
+    
+    Do not try to fixup the alpha in the ff/shaders as this has the
+    side-effect of overriding the alpha value of the border color, causing
+    images to be padded with black rather than transparent. This can
+    generate large and obnoxious visual artefacts.
+    
+    Fixes:
+    
+      Bug 17933 - x8r8g8b8 doesn't sample alpha=0 outside surface bounds
+      http://bugs.freedesktop.org/show_bug.cgi?id=17933
+    
+    and many related cairo test suite failures.
+    
+    Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
+
+commit 910fd171a00227025abc8bcc286a740f5bae895b
+Author: Chris Wilson <ch...@chris-wilson.co.uk>
+Date:   Fri Mar 5 14:32:13 2010 +0000
+
+    i830: Remove coord-adjust for nearest centre-sampling.
+    
+    Fixes a number of cairo test suite failures.
+    
+    Also affects:
+      Bug 16917 - Blur on y-axis also when only x-axis is scaled bilinear
+      http://bugs.freedesktop.org/show_bug.cgi?id=16917
+    
+    Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
+
 commit 753914acc31947df8e9f2fa3b9c39de745098709
 Author: Carl Worth <cwo...@cworth.org>
 Date:   Mon Mar 15 17:32:57 2010 -0700
diff --git a/debian/changelog b/debian/changelog
index 5085fa3..a9bc5e9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+xserver-xorg-video-intel (2:2.10.903-1) UNRELEASED; urgency=low
+
+  * New upstream release candidate.
+
+ -- Brice Goglin <bgog...@debian.org>  Tue, 23 Mar 2010 07:38:21 +0100
+
 xserver-xorg-video-intel (2:2.10.902-1) experimental; urgency=low
 
   [ Julien Cristau ]

commit 9c037f61a490c96f9095f7ff3fecbf41f5efe9f7
Author: Carl Worth <cwo...@cworth.org>
Date:   Mon Mar 22 15:23:04 2010 -0700

    Update version to 2.10.903
    
    For today's snapshot.

diff --git a/configure.ac b/configure.ac
index 3877064..108e283 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ(2.57)
 AC_INIT([xf86-video-intel],
-        2.10.902,
+        2.10.903,
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         xf86-video-intel)
 

commit 11142cffe4bc81e1ce465ea725fcaef024130082
Author: Carl Worth <cwo...@cworth.org>
Date:   Mon Mar 22 15:22:28 2010 -0700

    NEWS: Add notes for 2.10.903
    
    For today's snapshot.

diff --git a/NEWS b/NEWS
index ee18bd2..8fdf442 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,33 @@
+Snapshot 2.10.903 (2010-03-22)
+==============================
+Some notable bug fixes
+----------------------
+* Fix unpredictable results in page-flipping code due to access of an
+  uninitialized variable.
+
+* Two fixes that address a number of long-outstanding failures in the
+  cairo test suite:
+
+    Remove coord-adjust for nearest centre-sampling.
+
+    Fill alpha on xrgb images. Closes:
+
+       Bug 17933 - x8r8g8b8 doesn't sample alpha=0 outside surface bounds
+       http://bugs.freedesktop.org/show_bug.cgi?id=17933
+
+* Fix a regression introduced in 2.10.902:
+
+    Fatal server error:
+    i915_emit_composite_setup: ADVANCE_BATCH:
+    under-used allocation 100/104
+
+       Bug 21723 [i915 bisected] rendering makes X crash
+       http://bugs.freedesktop.org/show_bug.cgi?id=27123
+
+Other minor fixes (avoid trying to print an error message with a freed
+string, set a variable to NULL after freeing), and documentation
+updates are also included.
+
 Snapshot 2.10.902 (2010-03-15)
 ==============================
 Some significant bug fixes

commit f206816154fd44e61b0bdeaab1aa4c5359c3b70a
Author: Carl Worth <cwo...@cworth.org>
Date:   Mon Mar 22 14:14:46 2010 -0700

    man: Update list of available 'sclaing mode' property values.
    
    Include the names from the current kernel driver along with accurate
    descriptions of each. Indicate how to use the values with:
    
        xrandr --output output --set property value
    
    and point the user to "xrandr --prop" for an accurate list of
    currently available values.
    
    Closes bug:
    
        xf86-video-intel manpage needs update for KMS xrandr properties
        http://bugs.freedesktop.org/show_bug.cgi?id=25606

diff --git a/man/intel.man b/man/intel.man
index ef8d372..c2447be 100644
--- a/man/intel.man
+++ b/man/intel.man
@@ -183,10 +183,20 @@ Default: Disabled.
 On 830M and better chipsets, the driver supports runtime configuration of
 detected outputs.  You can use the
 .B xrandr
-tool to control outputs on the command line.  Each output listed below may have
-one or more properties associated with it (like a binary EDID block if one is
-found).  Some outputs have unique properties which are described below.  See 
the "MULTIHEAD CONFIGURATIONS" section below for additional information.
+tool to control outputs on the command line as follows:
 
+.RS
+.B xrandr \-\-output
+.I output
+.B \-\-set
+.I property value
+.RE
+
+Note that you may need to quote property and value arguments that contain 
spaces.
+Each output listed below may have one or more properties associated
+with it (like a binary EDID block if one is found).  Some outputs have
+unique properties which are described below.  See the "MULTIHEAD
+CONFIGURATIONS" section below for additional information.
 .SS "VGA"
 VGA output port (typically exposed via an HD15 connector).
 
@@ -203,22 +213,26 @@ By adjusting the BACKLIGHT property, the brightness on 
the LVDS output can be ad
 .B scaling mode
 - control LCD panel scaling mode
 .TP 2
-By default, the driver will attempt to upscale resolutions smaller than the 
LCD's native size while preserving the aspect ratio.  Other modes are available 
however:
+When the currently selected display mode differs from the native panel 
resolution, various scaling options are available. These include
 .RS
 .PP
-.B center
+.B Center
 .TP 4
-Simply center the image on-screen, without scaling.
+Simply center the image on-screen without scaling. This is the only scaling 
mode that guarantees a one-to-one correspondence between native and displayed 
pixels, but some portions of the panel may be unused (so-called "letterboxing").
 .PP
-.B full_aspect
+.B Full aspect
 .TP 4
-The default mode.  Try to upscale the image to the screen size, while 
preserving aspect ratio.  May result in letterboxing or pillar-boxing with some 
resolutions.
+Scale the image as much as possible while preserving aspect ratio. Pixels may 
not be displayed one-to-one (there may be some blurriness). Some portions of 
the panel may be unused if the aspect ratio of the selected mode does not match 
that of the panel.
 .PP
-.B full
+.B Full
 .TP 4
-Upscale the image to the native screen size without regard to aspect ratio.  
In this mode, the full screen image may appear distorted in some resolutions.
+Scale the image to the panel size without regard to aspect ratio. This is the 
only mode which guarantees that every pixel of the panel will be used. But the 
displayed image may be distorted by stretching either horizontally or 
vertically, and pixels may not be displayed one-to-one (there may be some 
blurriness).
 .RE
 
+The precise names of these options may differ depending on the kernel
+video driver, (but the functionality should be similar). See the output of
+.B xrandr \-\-prop
+for a list of currently available scaling modes.
 .SS "TV"
 Integrated TV output.  Available properties include:
 

commit d1dfab6b1649214177435629d8e85239dbe44d89
Author: Matthias Hopf <mh...@suse.de>
Date:   Wed Mar 17 15:13:51 2010 +0100

    Clear drmmode_output->mode_output in drmmode_output_destroy().

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 0172a2e..1348e08 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -817,6 +817,7 @@ drmmode_output_destroy(xf86OutputPtr output)
        }
        xfree(drmmode_output->props);
        drmModeFreeConnector(drmmode_output->mode_output);
+       drmmode_output->mode_output = NULL;
        if (drmmode_output->private_data) {
                xfree(drmmode_output->private_data);
                drmmode_output->private_data = NULL;

commit 10cd04a84bcb6313903fc23b2d7791658ebc6b8e
Author: Li Peng <peng...@linux.intel.com>
Date:   Sat Mar 20 00:21:48 2010 +0800

    Initialize flip_count before using it
    
    Otherwise it would be a random value and drmmode_page_flip_handler()
    won't have a chance to call I830DRI2FlipEventHandler() and indicate
    a full page flip is complete.
    
    Signed-off-by: Li Peng <peng...@intel.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index ae200ca..0172a2e 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1464,6 +1464,7 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp)
                xf86DrvMsg(scrn->scrnIndex, X_INFO,
                           "Kernel page flipping support detected, enabling\n");
                intel->use_pageflipping = TRUE;
+               drmmode->flip_count = 0;
                drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION;
                drmmode->event_context.vblank_handler = drmmode_vblank_handler;
                drmmode->event_context.page_flip_handler =

commit 46cea29b03aaed697d9a53ed04ab365db121ebb4
Author: Brice Goglin <bgog...@debian.org>
Date:   Sun Mar 21 10:25:40 2010 +0100

    Prepare changelog for upload

diff --git a/debian/changelog b/debian/changelog
index e77141f..8e04679 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-xserver-xorg-video-intel (2:2.9.1-3) UNRELEASED; urgency=low
+xserver-xorg-video-intel (2:2.9.1-3) unstable; urgency=low
 
   [ Julien Cristau ]
   * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
@@ -11,7 +11,7 @@ xserver-xorg-video-intel (2:2.9.1-3) UNRELEASED; urgency=low
   [ Brice Goglin ]
   * Bump Standards-Version to 3.8.4, no changes.
 
- -- Julien Cristau <jcris...@debian.org>  Sat, 16 Jan 2010 16:47:17 +0000
+ -- Brice Goglin <bgog...@debian.org>  Sun, 21 Mar 2010 10:25:27 +0100
 
 xserver-xorg-video-intel (2:2.9.1-2) unstable; urgency=low
 

commit 355d3a86a8c3fc8adaea9fec5ae8ebb5d660a706
Author: Brice Goglin <bgog...@debian.org>
Date:   Sun Mar 21 10:25:25 2010 +0100

    Bump Standards-Version to 3.8.4

diff --git a/debian/changelog b/debian/changelog
index 473b1d7..e77141f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
 xserver-xorg-video-intel (2:2.9.1-3) UNRELEASED; urgency=low
 
+  [ Julien Cristau ]
   * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
     good reason.  Thanks, Colin Watson!
   * Remove myself from Uploaders
@@ -7,6 +8,9 @@ xserver-xorg-video-intel (2:2.9.1-3) UNRELEASED; urgency=low
   * Backport KMS video overlay from upstream 2.10 (closes: #565328).
   * Bump libdrm-dev build-dep for the above.
 
+  [ Brice Goglin ]
+  * Bump Standards-Version to 3.8.4, no changes.
+
  -- Julien Cristau <jcris...@debian.org>  Sat, 16 Jan 2010 16:47:17 +0000
 
 xserver-xorg-video-intel (2:2.9.1-2) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 40cc39e..52bd4e5 100644
--- a/debian/control
+++ b/debian/control
@@ -31,7 +31,7 @@ Build-Depends:
  automake,
  libtool,
  xutils-dev
-Standards-Version: 3.8.3
+Standards-Version: 3.8.4
 Vcs-Git: git://git.debian.org/git/pkg-xorg/driver/xserver-xorg-video-intel
 Vcs-Browser: 
http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-intel.git
 

commit 3d4b3f257fbbb69c6f236d9803abe54a90d7d434
Author: Dave Airlie <airl...@redhat.com>
Date:   Thu Mar 18 12:48:39 2010 +1000

    intel: free bus id in error path after printing it out.
    
    the error message prints out a freed string, spotted during
    code reappropriation to radeon driver.
    
    Signed-off-by: Dave Airlie <airl...@redhat.com>

diff --git a/src/i830_driver.c b/src/i830_driver.c
index 53d8663..22e8472 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -649,10 +649,10 @@ static Bool i830_open_drm_master(ScrnInfoPtr scrn)
 
        intel->drmSubFD = drmOpen("i915", busid);
        if (intel->drmSubFD == -1) {
-               xfree(busid);
                xf86DrvMsg(scrn->scrnIndex, X_ERROR,
                           "[drm] Failed to open DRM device for %s: %s\n",
                           busid, strerror(errno));
+               xfree(busid);
                return FALSE;
        }
 

commit cf2d7aa99f30737dbc15c385fbf6aa43d4f2b5b8
Author: Julien Cristau <jcris...@debian.org>
Date:   Wed Mar 17 20:10:15 2010 +0100

    Bump libdrm-dev build-dep for the kms video overlay changes

diff --git a/debian/changelog b/debian/changelog
index a793d60..473b1d7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ xserver-xorg-video-intel (2:2.9.1-3) UNRELEASED; urgency=low
   * Remove myself from Uploaders
   * Add a NEWS.Debian entry about KMS.
   * Backport KMS video overlay from upstream 2.10 (closes: #565328).
+  * Bump libdrm-dev build-dep for the above.
 
  -- Julien Cristau <jcris...@debian.org>  Sat, 16 Jan 2010 16:47:17 +0000
 
diff --git a/debian/control b/debian/control
index e1f558e..40cc39e 100644
--- a/debian/control
+++ b/debian/control
@@ -15,7 +15,7 @@ Build-Depends:
  x11proto-xext-dev,
  x11proto-video-dev,
  libx11-dev,
- libdrm-dev (>= 2.4.11),
+ libdrm-dev (>= 2.4.18-3),
  x11proto-xf86dri-dev,
  x11proto-gl-dev,
  libgl1-mesa-dev | libgl-dev,

commit 2ae5615f76f255e34154953c1dabafc77b14eea4
Author: Julien Cristau <jcris...@debian.org>
Date:   Wed Mar 17 20:00:35 2010 +0100

    Xv: enable drmmode overlay
    
    Essentially the same as commit bd81734465912d79d6320a6fb021ce43d258b906
    but that one doesn't cherry-pick cleanly.

diff --git a/src/i830_video.c b/src/i830_video.c
index a2c9a98..2084131 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -360,7 +360,6 @@ I830SetOneLineModeRatio(ScrnInfoPtr pScrn);
 static Bool
 drmmode_has_overlay(ScrnInfoPtr pScrn)
 {
-#ifdef DRM_MODE_OVERLAY_LANDED
     I830Ptr p830 = I830PTR(pScrn);
     struct drm_i915_getparam gp;
     int has_overlay = 0;
@@ -371,15 +370,11 @@ drmmode_has_overlay(ScrnInfoPtr pScrn)
                              &gp, sizeof(gp));
 
     return has_overlay ? TRUE : FALSE;
-#else
-    return FALSE;
-#endif
 }
 
 static void
 drmmode_overlay_update_attrs(ScrnInfoPtr pScrn)
 {
-#ifdef DRM_MODE_OVERLAY_LANDED
     I830Ptr p830 = I830PTR(pScrn);
     I830PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
     struct drm_intel_overlay_attrs attrs;
@@ -402,13 +397,11 @@ drmmode_overlay_update_attrs(ScrnInfoPtr pScrn)
 
     if (ret != 0)
            OVERLAY_DEBUG("overlay attrs ioctl failed: %i\n", ret);
-#endif
 }
 
 static void
 drmmode_overlay_off(ScrnInfoPtr pScrn)
 {
-#ifdef DRM_MODE_OVERLAY_LANDED
     I830Ptr p830 = I830PTR(pScrn);
     struct drm_intel_overlay_put_image request;
     int ret;
@@ -420,7 +413,6 @@ drmmode_overlay_off(ScrnInfoPtr pScrn)
 
     if (ret != 0)
            OVERLAY_DEBUG("overlay switch-off ioctl failed: %i\n", ret);
-#endif
 }
 
 static Bool
@@ -429,7 +421,6 @@ drmmode_overlay_put_image(ScrnInfoPtr pScrn, xf86CrtcPtr 
crtc,
                   int dstPitch, int x1, int y1, int x2, int y2, BoxPtr dstBox,
                   short src_w, short src_h, short drw_w, short drw_h)
 {
-#ifdef DRM_MODE_OVERLAY_LANDED
     I830Ptr p830 = I830PTR(pScrn);
     I830PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
     struct drm_intel_overlay_put_image request;
@@ -495,9 +486,6 @@ drmmode_overlay_put_image(ScrnInfoPtr pScrn, xf86CrtcPtr 
crtc,
        return FALSE;
     } else
        return TRUE;
-#else
-    return FALSE;
-#endif
 }
 
 static void

commit 1dceba2603969870ee87ea4b467e454fff6ab18f
Author: Daniel Vetter <daniel.vet...@ffwll.ch>
Date:   Wed Oct 14 18:09:08 2009 +0200

    Xv overlay: fix planar YUV copy for right rotated crtcs
    
    While copying and rotating the buffer, array access was out of bounds when
    rotated to the right (RR_Rotate_270).  My buffer handling changes probably
    made this bug much more likely to actually result in a SIGSEGV.
    
    I've checked the logs and the bug exists since rotation has been supported,
    i.e.  this looks like a candidate for cherry-picking for all supported
    releases.
    
    Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch>
    Signed-off-by: Eric Anholt <e...@anholt.net>
    (manually cherry-picked from commit 
aaedeffe00d9414bb03723dbc30b4938a07ce5fa)

diff --git a/src/i830_video.c b/src/i830_video.c
index 5e98f27..a2c9a98 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -1502,10 +1502,10 @@ I830CopyPackedData(I830PortPrivPtr pPriv,
            for (j = 0; j < w; j+=2) {
                /* Copy U */
                dst[(((h - i)*2) - 3) + (j * dstPitch)] = src[(j*2) + 1 + (i * 
srcPitch)];
-               dst[(((h - i)*2) - 3) + ((j - 1) * dstPitch)] = src[(j*2) + 1 + 
((i+1) * srcPitch)];
+               dst[(((h - i)*2) - 3) + ((j + 1) * dstPitch)] = src[(j*2) + 1 + 
((i+1) * srcPitch)];
                /* Copy V */
                dst[(((h - i)*2) - 1) + (j * dstPitch)] = src[(j*2) + 3 + (i * 
srcPitch)];
-               dst[(((h - i)*2) - 1) + ((j - 1) * dstPitch)] = src[(j*2) + 3 + 
((i+1) * srcPitch)];
+               dst[(((h - i)*2) - 1) + ((j + 1) * dstPitch)] = src[(j*2) + 3 + 
((i+1) * srcPitch)];
            }
        }
        break;

commit 31d5f84bb4416ef92abd97264d52cdab7a184687
Author: Chris Wilson <ch...@chris-wilson.co.uk>
Date:   Wed Mar 17 09:11:05 2010 +0000

    i915: Correct preamble for emit_composite
    
    Fixes:
    http://bugs.freedesktop.org/show_bug.cgi?id=27123
    
    Fatal server error:
    i915_emit_composite_setup: ADVANCE_BATCH: under-used allocation 100/104
    
    Introduced with commit d6b7f96fde1add92fd11f5a75869ae6fc688bf77.
    
    Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>

diff --git a/src/i915_render.c b/src/i915_render.c
index c4aa9a4..819b963 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -504,7 +504,7 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
        tex_count += ! is_solid_src;
        tex_count += mask && ! is_solid_mask;
 
-       t = 16;
+       t = 15;
        if (tex_count)
            t += 6 * tex_count + 4;
        if (is_solid_src)

commit d6b7f96fde1add92fd11f5a75869ae6fc688bf77
Author: Chris Wilson <ch...@chris-wilson.co.uk>
Date:   Sat Mar 6 15:49:04 2010 +0000

    Fill alpha on xrgb images.
    
    Do not try to fixup the alpha in the ff/shaders as this has the
    side-effect of overriding the alpha value of the border color, causing
    images to be padded with black rather than transparent. This can
    generate large and obnoxious visual artefacts.
    
    Fixes:
    
      Bug 17933 - x8r8g8b8 doesn't sample alpha=0 outside surface bounds
      http://bugs.freedesktop.org/show_bug.cgi?id=17933
    
    and many related cairo test suite failures.
    
    Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>

diff --git a/src/i830_render.c b/src/i830_render.c
index 0d6a803..71296d2 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -491,43 +491,23 @@ i830_prepare_composite(int op, PicturePtr source_picture,
                         * is a8, in which case src.G is what's written, and 
the other
                         * channels are ignored.
                         */
-                       if (PICT_FORMAT_A(source_picture->format) != 0) {
-                               ablend |= TB0A_ARG1_SEL_TEXEL0;
-                               cblend |=
-                                   TB0C_ARG1_SEL_TEXEL0 |
-                                   TB0C_ARG1_REPLICATE_ALPHA;
-                       } else {
-                               ablend |= TB0A_ARG1_SEL_ONE;
-                               cblend |= TB0C_ARG1_SEL_ONE;
-                       }
+                       ablend |= TB0A_ARG1_SEL_TEXEL0;
+                       cblend |= TB0C_ARG1_SEL_TEXEL0 | 
TB0C_ARG1_REPLICATE_ALPHA;
                } else {
-                       if (PICT_FORMAT_A(source_picture->format) != 0) {
-                               ablend |= TB0A_ARG1_SEL_TEXEL0;
-                       } else {
-                               ablend |= TB0A_ARG1_SEL_ONE;
-                       }
                        if (PICT_FORMAT_RGB(source_picture->format) != 0)
                                cblend |= TB0C_ARG1_SEL_TEXEL0;
                        else
                                cblend |= TB0C_ARG1_SEL_ONE | TB0C_ARG1_INVERT; 
/* 0.0 */
+                       ablend |= TB0A_ARG1_SEL_TEXEL0;
                }
 
                if (mask) {
-                       if (dest_picture->format != PICT_a8 &&
-                           (mask_picture->componentAlpha &&
-                            PICT_FORMAT_RGB(mask_picture->format))) {
-                               cblend |= TB0C_ARG2_SEL_TEXEL1;
-                       } else {
-                               if (PICT_FORMAT_A(mask_picture->format) != 0)
-                                       cblend |= TB0C_ARG2_SEL_TEXEL1 |
-                                           TB0C_ARG2_REPLICATE_ALPHA;
-                               else
-                                       cblend |= TB0C_ARG2_SEL_ONE;
-                       }
-                       if (PICT_FORMAT_A(mask_picture->format) != 0)
-                               ablend |= TB0A_ARG2_SEL_TEXEL1;
-                       else
-                               ablend |= TB0A_ARG2_SEL_ONE;
+                       cblend |= TB0C_ARG2_SEL_TEXEL1;
+                       if (dest_picture->format == PICT_a8 ||
+                           ! mask_picture->componentAlpha ||
+                           ! PICT_FORMAT_RGB(mask_picture->format))
+                               cblend |= TB0C_ARG2_REPLICATE_ALPHA;
+                       ablend |= TB0A_ARG2_SEL_TEXEL1;
                } else {
                        cblend |= TB0C_ARG2_SEL_ONE;
                        ablend |= TB0A_ARG2_SEL_ONE;
diff --git a/src/i830_uxa.c b/src/i830_uxa.c
index 9904311..fec5378 100644
--- a/src/i830_uxa.c
+++ b/src/i830_uxa.c
@@ -237,6 +237,8 @@ i830_uxa_prepare_solid(PixmapPtr pixmap, int alu, Pixel 
planemask, Pixel fg)
        case 32:
                /* RGB8888 */
                intel->BR[13] |= ((1 << 24) | (1 << 25));
+               if (pixmap->drawable.depth == 24)
+                   fg |= 0xff000000;
                break;
        }
        intel->BR[16] = fg;
@@ -710,6 +712,33 @@ static Bool i830_uxa_put_image(PixmapPtr pixmap,
        GCPtr gc;
        Bool ret;
 
+       if (pixmap->drawable.depth == 24) {
+           /* fill alpha channel */
+           pixman_image_t *src_image, *dst_image;
+
+           src_image = pixman_image_create_bits (PIXMAN_x8r8g8b8,
+                                                 w, h,
+                                                 (uint32_t *) src, src_pitch);
+
+           dst_image = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+                                                 w, h,
+                                                 (uint32_t *) src, src_pitch);
+
+           if (src_image && dst_image)
+               pixman_image_composite (PictOpSrc,
+                                       src_image, NULL, dst_image,
+                                       0, 0,
+                                       0, 0,
+                                       0, 0,
+                                       w, h);
+
+           if (src_image)
+               pixman_image_unref (src_image);
+
+           if (dst_image)
+               pixman_image_unref (dst_image);
+       }
+
        if (x == 0 && y == 0 &&
            w == pixmap->drawable.width &&
            h == pixmap->drawable.height)
diff --git a/src/i915_render.c b/src/i915_render.c
index 37af72b..c4aa9a4 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -385,8 +385,9 @@ i915_prepare_composite(int op, PicturePtr source_picture,
                                            source_picture->format,
                                            PICT_a8r8g8b8,
                                            &intel->render_source_solid))
-               return FALSE;
-       } else if (!intel_check_pitch_3d(source))
+               intel->render_source_is_solid = FALSE;
+       }
+       if (!intel->render_source_is_solid && !intel_check_pitch_3d(source))
                return FALSE;
 
 
@@ -402,8 +403,9 @@ i915_prepare_composite(int op, PicturePtr source_picture,
                                                mask_picture->format,
                                                PICT_a8r8g8b8,
                                                &intel->render_mask_solid))
-                   return FALSE;
-           } else if (!intel_check_pitch_3d(mask))
+                   intel->render_mask_is_solid = FALSE;
+           }
+           if (!intel->render_mask_is_solid && !intel_check_pitch_3d(mask))
                    return FALSE;
        }
 
@@ -475,7 +477,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
 {
        intel_screen_private *intel = intel_get_screen_private(scrn);
        int op = intel->i915_render_state.op;
-       PicturePtr source_picture = intel->render_source_picture;
        PicturePtr mask_picture = intel->render_mask_picture;
        PicturePtr dest_picture = intel->render_dest_picture;
        PixmapPtr mask = intel->render_mask;
@@ -589,7 +590,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
                OUT_BATCH(0x00000000);
        }
 
-       OUT_BATCH(MI_NOOP);
        ADVANCE_BATCH();
 
        {
@@ -629,10 +629,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
                    i915_fs_texldp(FS_R0, FS_S0, FS_T0);
                }
 
-               /* If the texture lacks an alpha channel, force the alpha to 1. 
*/
-               if (PICT_FORMAT_A(source_picture->format) == 0)
-                   i915_fs_mov_masked(FS_R0, MASK_W, i915_fs_operand_one());
-
                src_reg = FS_R0;
            }
 
@@ -647,11 +643,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
                    } else {
                        i915_fs_texldp(FS_R1, FS_S0 + t, FS_T0 + t);
                    }
-                   /* If the texture lacks an alpha channel, force the alpha 
to 1.
-                    */
-                   if (PICT_FORMAT_A(mask_picture->format) == 0)
-                       i915_fs_mov_masked(FS_R1, MASK_W,
-                                          i915_fs_operand_one());
 
                    mask_reg = FS_R1;
                }
diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c
index e70a845..ca46a2a 100644
--- a/uxa/uxa-render.c
+++ b/uxa/uxa-render.c
@@ -262,13 +262,15 @@ uxa_get_color_for_pixmap (PixmapPtr        pixmap,
 
        *pixel = uxa_get_pixmap_first_pixel(pixmap);
 
-       if (!uxa_get_rgba_from_pixel(*pixel, &red, &green, &blue, &alpha,
-                                    src_format))
+       if (src_format != dst_format) {
+           if (!uxa_get_rgba_from_pixel(*pixel, &red, &green, &blue, &alpha,
+                                        src_format))
                return FALSE;
 
-       if (!uxa_get_pixel_from_rgba(pixel, red, green, blue, alpha,
-                                    dst_format))
+           if (!uxa_get_pixel_from_rgba(pixel, red, green, blue, alpha,
+                                        dst_format))
                return FALSE;
+       }
 
        return TRUE;
 }
@@ -364,6 +366,10 @@ uxa_picture_for_pixman_format(ScreenPtr pScreen,
        if (format == PIXMAN_a1)
                format = PIXMAN_a8;
 
+       /* fill alpha if unset */
+       if (PIXMAN_FORMAT_A(format) == 0)
+           format = PIXMAN_a8r8g8b8;
+
        pPixmap = (*pScreen->CreatePixmap)(pScreen, width, height,
                                           PIXMAN_FORMAT_DEPTH(format),
                                           UXA_CREATE_PIXMAP_FOR_MAP);
@@ -384,64 +390,6 @@ uxa_picture_for_pixman_format(ScreenPtr pScreen,
        return pPicture;
 }
 
-/* In order to avoid fallbacks when using an a1 source/mask,
- * for example with non-antialiased trapezoids, we need to
- * expand the bitmap into an a8 Picture. We do so by using the generic
- * composition routines, which while may not be perfect is far faster
- * than causing a fallback.
- */
-static PicturePtr
-uxa_picture_from_a1_pixman_image(ScreenPtr pScreen, pixman_image_t * image)
-{
-       PicturePtr pPicture;
-       PicturePtr pSrc;
-       PixmapPtr pPixmap;
-       int width, height;
-       int error;
-
-       width = pixman_image_get_width(image);
-       height = pixman_image_get_height(image);
-
-       pPicture = uxa_picture_for_pixman_format (pScreen, PIXMAN_a1,
-                                                 width, height);
-       if (!pPicture)
-               return 0;
-
-       pPixmap = GetScratchPixmapHeader(pScreen, width, height, 1, 1,
-                                        pixman_image_get_stride(image),
-                                        pixman_image_get_data(image));
-       if (!pPixmap) {
-               FreePicture(pPicture, 0);
-               return 0;
-       }
-
-       pSrc = CreatePicture(0, &pPixmap->drawable,
-                            PictureMatchFormat(pScreen, 1, PICT_a1),
-                            0, 0, serverClient, &error);
-       if (!pSrc) {
-               FreeScratchPixmapHeader(pPixmap);
-               FreePicture(pPicture, 0);
-               return 0;
-       }
-
-       ValidatePicture(pSrc);
-
-       /* force the fallback path */
-       if (uxa_prepare_access(pPicture->pDrawable, UXA_ACCESS_RW)) {
-               fbComposite(PictOpSrc, pSrc, NULL, pPicture,
-                           0, 0, 0, 0, 0, 0, width, height);
-               uxa_finish_access(pPicture->pDrawable);
-       } else {
-               FreePicture(pPicture, 0);
-               pPicture = 0;
-       }
-
-       FreePicture(pSrc, 0);
-       FreeScratchPixmapHeader(pPixmap);
-
-       return pPicture;
-}
-
 static PicturePtr
 uxa_picture_from_pixman_image(ScreenPtr pScreen,
                              pixman_image_t * image,
@@ -449,12 +397,8 @@ uxa_picture_from_pixman_image(ScreenPtr pScreen,
 {
        PicturePtr pPicture;
        PixmapPtr pPixmap;
-       GCPtr pGC;
        int width, height;
 
-       if (format == PICT_a1)
-               return uxa_picture_from_a1_pixman_image(pScreen, image);
-
        width = pixman_image_get_width(image);
        height = pixman_image_get_height(image);
 
@@ -473,18 +417,45 @@ uxa_picture_from_pixman_image(ScreenPtr pScreen,
                return 0;
        }
 
-       pGC = GetScratchGC(PIXMAN_FORMAT_DEPTH(format), pScreen);
-       if (!pGC) {
+       if (((pPicture->pDrawable->depth << 24) | pPicture->format) == format) {
+           GCPtr pGC;
+
+           pGC = GetScratchGC(PIXMAN_FORMAT_DEPTH(format), pScreen);
+           if (!pGC) {
                FreeScratchPixmapHeader(pPixmap);
                FreePicture(pPicture, 0);
                return 0;
-       }
-       ValidateGC(pPicture->pDrawable, pGC);
+           }
+           ValidateGC(pPicture->pDrawable, pGC);
 
-       (*pGC->ops->CopyArea) (&pPixmap->drawable, pPicture->pDrawable,
-                              pGC, 0, 0, width, height, 0, 0);
+           (*pGC->ops->CopyArea) (&pPixmap->drawable, pPicture->pDrawable,
+                                  pGC, 0, 0, width, height, 0, 0);
 
-       FreeScratchGC(pGC);
+           FreeScratchGC(pGC);
+       } else {
+           PicturePtr pSrc;
+           int error;
+
+           pSrc = CreatePicture(0, &pPixmap->drawable,
+                                PictureMatchFormat(pScreen,
+                                                   PIXMAN_FORMAT_DEPTH(format),
+                                                   format),
+                                0, 0, serverClient, &error);
+           if (!pSrc) {
+               FreeScratchPixmapHeader(pPixmap);
+               FreePicture(pPicture, 0);
+               return 0;
+           }
+           ValidatePicture(pSrc);
+
+           if (uxa_prepare_access(pPicture->pDrawable, UXA_ACCESS_RW)) {
+               fbComposite(PictOpSrc, pSrc, NULL, pPicture,
+                           0, 0, 0, 0, 0, 0, width, height);
+               uxa_finish_access(pPicture->pDrawable);
+           }
+
+           FreePicture(pSrc, 0);
+       }


-- 
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/e1ntxqw-0002u3...@alioth.debian.org

Reply via email to