+++ /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
-
--- /dev/null
+From bdf0ee509c26ab35e60f3ed02549efa435be032f Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Thu, 8 Apr 2010 13:29:04 +0200
+Subject: [PATCH 1/3] i965 Xv: fix chroma pitch
+
+In my recent fix for the chroma pitch for i915 xvmc I've forgotten about
+i965 class hw. For videos with a non-even sized stride (measured in dwords)
+the chroma pitch was internally incosistent and one dword off.
+
+Fix this by using pitch2 for the chroma pitch in i965 textured video like
+everywhere else.
+
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=27417
+Tested-by: Nick Bowler <nbowler@draconx.ca>
+Tested-by: Sven Arvidsson <sa@whiz.se>
+---
+ src/i830_video.c | 2 +-
+ src/i830_video.h | 2 +-
+ src/i965_video.c | 5 +++--
+ 3 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/i830_video.c b/src/i830_video.c
+index c8edcd6..45213cb 100644
+--- a/src/i830_video.c
++++ b/src/i830_video.c
+@@ -1525,7 +1525,7 @@ I830PutImageTextured(ScrnInfoPtr scrn,
+
+ if (IS_I965G(intel)) {
+ I965DisplayVideoTextured(scrn, adaptor_priv, id, clipBoxes,
+- width, height, dstPitch,
++ width, height, dstPitch, dstPitch2,
+ src_w, src_h,
+ drw_w, drw_h, pixmap);
+ } else {
+diff --git a/src/i830_video.h b/src/i830_video.h
+index fcdae73..b5753bf 100644
+--- a/src/i830_video.h
++++ b/src/i830_video.h
+@@ -76,7 +76,7 @@ void I915DisplayVideoTextured(ScrnInfoPtr scrn,
+ void I965DisplayVideoTextured(ScrnInfoPtr scrn,
+ intel_adaptor_private *adaptor_priv,
+ int id, RegionPtr dstRegion, short width,
+- short height, int video_pitch,
++ short height, int video_pitch, int video_pitch2,
+ short src_w, short src_h,
+ short drw_w, short drw_h, PixmapPtr pixmap);
+
+diff --git a/src/i965_video.c b/src/i965_video.c
+index 05dd2c3..c537860 100644
+--- a/src/i965_video.c
++++ b/src/i965_video.c
+@@ -980,7 +980,8 @@ void
+ I965DisplayVideoTextured(ScrnInfoPtr scrn,
+ intel_adaptor_private *adaptor_priv, int id,
+ RegionPtr dstRegion,
+- short width, short height, int video_pitch,
++ short width, short height,
++ int video_pitch, int video_pitch2,
+ short src_w, short src_h,
+ short drw_w, short drw_h, PixmapPtr pixmap)
+ {
+@@ -1023,7 +1024,7 @@ I965DisplayVideoTextured(ScrnInfoPtr scrn,
+ src_surf_format = BRW_SURFACEFORMAT_R8_UNORM;
+ src_width[1] = src_width[0] = width;
+ src_height[1] = src_height[0] = height;
+- src_pitch[1] = src_pitch[0] = video_pitch * 2;
++ src_pitch[1] = src_pitch[0] = video_pitch2;
+ src_width[4] = src_width[5] = src_width[2] = src_width[3] =
+ width / 2;
+ src_height[4] = src_height[5] = src_height[2] = src_height[3] =
+--
+1.6.4.4
+