NEWS                  |   30 ++++++++++++
 configure.ac          |    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 ++++++++++++++++++--------------------------------
 9 files changed, 156 insertions(+), 150 deletions(-)

New commits:
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 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 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);
+       }
        FreeScratchPixmapHeader(pPixmap);
 
        return pPicture;

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>

diff --git a/src/i830_render.c b/src/i830_render.c
index 89e5acb..0d6a803 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -451,16 +451,7 @@ i830_prepare_composite(int op, PicturePtr source_picture,
        if (!i830_get_dest_format(dest_picture, &intel->render_dest_format))
                return FALSE;
 
-       intel->dst_coord_adjust = 0;
-       intel->src_coord_adjust = 0;
-       intel->mask_coord_adjust = 0;
-       if (source_picture->filter == PictFilterNearest)
-               intel->src_coord_adjust = 0.375;
-       if (mask != NULL) {
-               intel->mask_coord_adjust = 0;
-               if (mask_picture->filter == PictFilterNearest)
-                       intel->mask_coord_adjust = 0.375;
-       } else {
+       if (mask) {
                intel->transform[1] = NULL;
                intel->scale_units[1][0] = -1;
                intel->scale_units[1][1] = -1;
@@ -658,8 +649,7 @@ i830_emit_composite_primitive(PixmapPtr dest,
        per_vertex = 2;         /* dest x/y */
 
        {
-               float x = srcX + intel->src_coord_adjust;
-               float y = srcY + intel->src_coord_adjust;
+               float x = srcX, y = srcY;
 
                is_affine_src = i830_transform_is_affine(intel->transform[0]);
                if (is_affine_src) {
@@ -715,8 +705,7 @@ i830_emit_composite_primitive(PixmapPtr dest,
        }
 
        if (intel->render_mask) {
-               float x = maskX + intel->mask_coord_adjust;
-               float y = maskY + intel->mask_coord_adjust;
+               float x = maskX, y = maskY;
 
                is_affine_mask = i830_transform_is_affine(intel->transform[1]);
                if (is_affine_mask) {
@@ -776,8 +765,8 @@ i830_emit_composite_primitive(PixmapPtr dest,
        ATOMIC_BATCH(1 + num_floats);
 
        OUT_BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST | (num_floats - 1));
-       OUT_BATCH_F(intel->dst_coord_adjust + dstX + w);
-       OUT_BATCH_F(intel->dst_coord_adjust + dstY + h);
+       OUT_BATCH_F(dstX + w);
+       OUT_BATCH_F(dstY + h);
        OUT_BATCH_F(src_x[2] / intel->scale_units[0][0]);
        OUT_BATCH_F(src_y[2] / intel->scale_units[0][1]);
        if (!is_affine_src) {
@@ -791,8 +780,8 @@ i830_emit_composite_primitive(PixmapPtr dest,
                }
        }
 
-       OUT_BATCH_F(intel->dst_coord_adjust + dstX);
-       OUT_BATCH_F(intel->dst_coord_adjust + dstY + h);
+       OUT_BATCH_F(dstX);
+       OUT_BATCH_F(dstY + h);
        OUT_BATCH_F(src_x[1] / intel->scale_units[0][0]);
        OUT_BATCH_F(src_y[1] / intel->scale_units[0][1]);
        if (!is_affine_src) {
@@ -806,8 +795,8 @@ i830_emit_composite_primitive(PixmapPtr dest,
                }
        }
 
-       OUT_BATCH_F(intel->dst_coord_adjust + dstX);
-       OUT_BATCH_F(intel->dst_coord_adjust + dstY);
+       OUT_BATCH_F(dstX);
+       OUT_BATCH_F(dstY);
        OUT_BATCH_F(src_x[0] / intel->scale_units[0][0]);
        OUT_BATCH_F(src_y[0] / intel->scale_units[0][1]);
        if (!is_affine_src) {


-- 
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/e1ntxqk-0002sm...@alioth.debian.org

Reply via email to