--- /dev/null
+From eca670dc31eb1793297b524760c057b80da194a9 Mon Sep 17 00:00:00 2001
+From: Nick Bowler <nbowler@elliptictech.com>
+Date: Mon, 5 Apr 2010 08:38:58 -0400
+Subject: [PATCH] Revert "Xv: fixup XvMC on i915"
+
+This reverts commit cb06aa32d433f54affe87da2cf964f0308d3c258.
+
+Conflicts:
+
+ src/i830_video.c
+---
+ src/i830_video.c | 67 +++++++++++++++++++++++++++++------------------------
+ 1 files changed, 37 insertions(+), 30 deletions(-)
+
+diff --git a/src/i830_video.c b/src/i830_video.c
+index db72863..1def5e1 100644
+--- a/src/i830_video.c
++++ b/src/i830_video.c
+@@ -267,7 +267,7 @@ static void drmmode_overlay_off(ScrnInfoPtr scrn)
+ static Bool
+ drmmode_overlay_put_image(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
+ int id, short width, short height,
+- int dstPitch, int dstPitch2,
++ int dstPitch,
+ BoxPtr dstBox, short src_w, short src_h, short drw_w,
+ short drw_h)
+ {
+@@ -282,7 +282,7 @@ drmmode_overlay_put_image(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
+
+ request.bo_handle = adaptor_priv->buf->handle;
+ if (planar) {
+- request.stride_Y = dstPitch2;
++ request.stride_Y = dstPitch * 2;
+ request.stride_UV = dstPitch;
+ } else {
+ request.stride_Y = dstPitch;
+@@ -959,12 +959,12 @@ static void i830_memcpy_plane(unsigned char *dst, unsigned char *src,
+
+ static void
+ I830CopyPlanarData(intel_adaptor_private *adaptor_priv,
+- unsigned char *buf, int srcPitch, int srcPitch2,
+- int dstPitch, int dstPitch2,
+- int srcH, int top, int left,
++ unsigned char *buf, int srcPitch,
++ int srcPitch2, int dstPitch, int srcH, int top, int left,
+ int h, int w, int id)
+ {
+ unsigned char *src1, *src2, *src3, *dst_base, *dst1, *dst2, *dst3;
++ int dstPitch2 = dstPitch << 1;
+
+ #if 0
+ ErrorF("I830CopyPlanarData: srcPitch %d, srcPitch %d, dstPitch %d\n"
+@@ -1181,7 +1181,7 @@ static int xvmc_passthrough(int id)
+ static Bool
+ i830_display_overlay(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
+ int id, short width, short height,
+- int dstPitch, int dstPitch2,
++ int dstPitch,
+ BoxPtr dstBox, short src_w, short src_h, short drw_w,
+ short drw_h)
+ {
+@@ -1214,7 +1214,7 @@ i830_display_overlay(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
+ }
+
+ return drmmode_overlay_put_image(scrn, crtc, id, width, height,
+- dstPitch, dstPitch2, dstBox,
++ dstPitch, dstBox,
+ src_w, src_h, drw_w, drw_h);
+ }
+
+@@ -1362,33 +1362,28 @@ i830_setup_dst_params(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv, sho
+ if (IS_I965G(intel))
+ pitchAlignMask = 255;
+ else
+- pitchAlignMask = 255;
++ pitchAlignMask = 63;
+ }
+
+-#if INTEL_XVMC
+- /* for i915 xvmc, hw requires 1kb aligned surfaces */
+- if ((id == FOURCC_XVMC) && IS_I915(intel))
+- pitchAlignMask = 0x3ff;
+-#endif
+-
+ /* Determine the desired destination pitch (representing the chroma's pitch,
+ * in the planar case.
+ */
+- if (is_planar_fourcc(id)) {
++ switch (id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
+ if (adaptor_priv->rotation & (RR_Rotate_90 | RR_Rotate_270)) {
+ *dstPitch =
+ ((height / 2) + pitchAlignMask) & ~pitchAlignMask;
+- *dstPitch2 =
+- (height + pitchAlignMask) & ~pitchAlignMask;
+ *size = *dstPitch * width * 3;
+ } else {
+ *dstPitch =
+ ((width / 2) + pitchAlignMask) & ~pitchAlignMask;
+- *dstPitch2 =
+- (width + pitchAlignMask) & ~pitchAlignMask;
+ *size = *dstPitch * height * 3;
+ }
+- } else {
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++
+ if (adaptor_priv->rotation & (RR_Rotate_90 | RR_Rotate_270)) {
+ *dstPitch =
+ ((height << 1) + pitchAlignMask) & ~pitchAlignMask;
+@@ -1398,7 +1393,18 @@ i830_setup_dst_params(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv, sho
+ ((width << 1) + pitchAlignMask) & ~pitchAlignMask;
+ *size = *dstPitch * height;
+ }
+- *dstPitch2 = 0;
++ break;
++#ifdef INTEL_XVMC
++ case FOURCC_XVMC:
++ *dstPitch = ((width / 2) + pitchAlignMask) & ~pitchAlignMask;
++ *dstPitch2 = (width + pitchAlignMask) & ~pitchAlignMask;
++ *size = 0;
++ break;
++#endif
++ default:
++ *dstPitch = 0;
++ *size = 0;
++ break;
+ }
+ #if 0
+ ErrorF("srcPitch: %d, dstPitch: %d, size: %d\n", srcPitch, *dstPitch,
+@@ -1409,12 +1415,12 @@ i830_setup_dst_params(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv, sho
+
+ if (adaptor_priv->rotation & (RR_Rotate_90 | RR_Rotate_270)) {
+ adaptor_priv->UBufOffset =
+- adaptor_priv->YBufOffset + (*dstPitch2 * width);
++ adaptor_priv->YBufOffset + (*dstPitch * 2 * width);
+ adaptor_priv->VBufOffset =
+ adaptor_priv->UBufOffset + (*dstPitch * width / 2);
+ } else {
+ adaptor_priv->UBufOffset =
+- adaptor_priv->YBufOffset + (*dstPitch2 * height);
++ adaptor_priv->YBufOffset + (*dstPitch * 2 * height);
+ adaptor_priv->VBufOffset =
+ adaptor_priv->UBufOffset + (*dstPitch * height / 2);
+ }
+@@ -1445,8 +1451,7 @@ i830_copy_video_data(ScrnInfoPtr scrn, intel_adaptor_private *adaptor_priv,
+ /* copy data */
+ if (is_planar_fourcc(id)) {
+ I830CopyPlanarData(adaptor_priv, buf, srcPitch, srcPitch2,
+- *dstPitch, *dstPitch2,
+- height, top, left, nlines,
++ *dstPitch, height, top, left, nlines,
+ npixels, id);
+ } else {
+ I830CopyPackedData(adaptor_priv, buf, srcPitch, *dstPitch, top, left,
+@@ -1483,7 +1488,8 @@ I830PutImageTextured(ScrnInfoPtr scrn,
+ intel_screen_private *intel = intel_get_screen_private(scrn);
+ intel_adaptor_private *adaptor_priv = (intel_adaptor_private *) data;
+ PixmapPtr pixmap = get_drawable_pixmap(drawable);
+- int dstPitch, dstPitch2;
++ int dstPitch;
++ int dstPitch2 = 0;
+ BoxRec dstBox;
+ xf86CrtcPtr crtc;
+ int top, left, npixels, nlines;
+@@ -1509,8 +1515,8 @@ I830PutImageTextured(ScrnInfoPtr scrn,
+ int size;
+ i830_free_video_buffers(adaptor_priv);
+
+- i830_setup_dst_params(scrn, adaptor_priv, width, height,
+- &dstPitch, &dstPitch2, &size, id);
++ i830_setup_dst_params(scrn, adaptor_priv, width, height, &dstPitch,
++ &dstPitch2, &size, id);
+
+ if (IS_I915G(intel) || IS_I915GM(intel)) {
+ /* XXX: i915 is not support and needs some
+@@ -1540,7 +1546,8 @@ I830PutImageTextured(ScrnInfoPtr scrn,
+ drw_w, drw_h, pixmap);
+ } else {
+ I915DisplayVideoTextured(scrn, adaptor_priv, id, clipBoxes,
+- width, height, dstPitch, dstPitch2,
++ width, height, dstPitch,
++ dstPitch2,
+ src_w, src_h, drw_w, drw_h,
+ pixmap);
+ }
+@@ -1608,7 +1615,7 @@ I830PutImageOverlay(ScrnInfoPtr scrn,
+ return BadAlloc;
+
+ if (!i830_display_overlay
+- (scrn, crtc, id, width, height, dstPitch, dstPitch2,
++ (scrn, crtc, id, width, height, dstPitch,
+ &dstBox, src_w, src_h, drw_w, drw_h))
+ return BadAlloc;
+
+--
+1.7.0.4
+