[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-intel: Changes to 'upstream-experimental'



 configure.ac                  |   30 
 man/Makefile.am               |    1 
 man/intel.man                 |   12 
 src/Makefile.am               |   21 
 src/bios_reader/Makefile.am   |    3 
 src/bios_reader/bios_dumper.c |    1 
 src/bios_reader/bios_reader.c |    4 
 src/brw_defines.h             |   26 
 src/brw_structs.h             |  119 +
 src/ch7017/Makefile.am        |    3 
 src/ch7017/ch7017.c           |   43 
 src/ch7xxx/Makefile.am        |    3 
 src/ch7xxx/ch7xxx.c           |   19 
 src/common.h                  |  129 --
 src/i810.h                    |   12 
 src/i810_cursor.c             |    6 
 src/i810_driver.c             |   14 
 src/i810_io.c                 |   24 
 src/i810_memory.c             |    4 
 src/i810_reg.h                |   91 +
 src/i810_ring.h               |   90 +
 src/i810_video.c              |   70 -
 src/i830.h                    |  197 ++-
 src/i830_3d.c                 |  322 ++---
 src/i830_accel.c              |   19 
 src/i830_bios.c               |    2 
 src/i830_bios.h               |  135 +-
 src/i830_crt.c                |   42 
 src/i830_cursor.c             |   14 
 src/i830_debug.c              |  360 ++++-
 src/i830_display.c            |  200 ++-
 src/i830_dri.c                |  125 --
 src/i830_driver.c             |  943 ++++++++-------
 src/i830_dvo.c                |   27 
 src/i830_exa.c                |  150 --
 src/i830_hwmc.c               |  154 ++
 src/i830_hwmc.h               |  106 +
 src/i830_i2c.c                |   21 
 src/i830_lvds.c               |   87 +
 src/i830_memory.c             |  133 +-
 src/i830_quirks.c             |  194 +++
 src/i830_render.c             |  441 ++++---
 src/i830_ring.h               |  113 +
 src/i830_sdvo.c               |  137 +-
 src/i830_sdvo_regs.h          |   54 
 src/i830_tv.c                 |  115 +
 src/i830_video.c              |  378 +++---
 src/i830_video.h              |   29 
 src/i830_xaa.c                |  138 +-
 src/i915_3d.c                 |   66 -
 src/i915_3d.h                 |   13 
 src/i915_hwmc.c               |  873 ++++++++++++++
 src/i915_hwmc.h               |   61 +
 src/i915_reg.h                |   10 
 src/i915_render.c             |  162 +-
 src/i915_video.c              |  297 ++--
 src/i965_render.c             |  299 ++--
 src/i965_video.c              |  235 +--
 src/ivch/Makefile.am          |    3 
 src/ivch/ivch.c               |   37 
 src/reg_dumper/.gitignore     |    2 
 src/reg_dumper/Makefile.am    |   16 
 src/reg_dumper/idle.c         |  177 ++
 src/reg_dumper/reg_dumper.h   |    1 
 src/reg_dumper/stepping.c     |  137 ++
 src/sil164/Makefile.am        |    3 
 src/sil164/sil164.c           |   27 
 src/sil164/sil164_reg.h       |   15 
 src/tfp410/Makefile.am        |    3 
 src/tfp410/tfp410.c           |   25 
 src/tfp410/tfp410_reg.h       |   15 
 src/xvmc/Makefile.am          |   20 
 src/xvmc/driDrawable.c        |  174 ++
 src/xvmc/driDrawable.h        |   64 +
 src/xvmc/i915_program.h       |  276 ++++
 src/xvmc/i915_structs.h       |  973 ++++++++++++++++
 src/xvmc/i915_xvmc.c          | 2535 ++++++++++++++++++++++++++++++++++++++++++
 src/xvmc/i915_xvmc.h          |  117 +
 src/xvmc/intel_batchbuffer.c  |  271 ++++
 src/xvmc/intel_batchbuffer.h  |   42 
 src/xvmc/intel_xvmc.c         | 1069 +++++++++++++++++
 src/xvmc/intel_xvmc.h         |  252 ++++
 src/xvmc/xf86dri.c            |  601 +++++++++
 src/xvmc/xf86dri.h            |  111 +
 src/xvmc/xf86dristr.h         |  390 ++++++
 85 files changed, 12253 insertions(+), 2480 deletions(-)

New commits:
commit 8a733ccbe054d9f7c731d9a6e1121e65ba367171
Author: Zhenyu Wang <zhenyu.z.wang@intel.com>
Date:   Thu Mar 20 10:33:03 2008 +0800

    Bump version 2.2.99.901

diff --git a/configure.ac b/configure.ac
index 0ea974f..3cced1d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ(2.57)
 AC_INIT([xf86-video-intel],
-        2.2.0,
+        2.2.99.901,
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         xf86-video-intel)
 

commit 4b9b7b007d729f94b01b0031d8ae478134b501da
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Mar 18 14:08:19 2008 -0700

    Handle projective transforms on 9xx for Composite.
    
    Projective transforms require un-normalized texture coordinates and the use
    of the texldp instruction. The coordinates are passed as x/y/z/w (the z is
    unused, but there isn't a vertext format for just x/y/w).

diff --git a/src/i830_exa.c b/src/i830_exa.c
index 0206ab9..f9df277 100644
--- a/src/i830_exa.c
+++ b/src/i830_exa.c
@@ -363,7 +363,7 @@ i830_get_transformed_coordinates(int x, int y, PictTransformPtr transform,
     }
 }
 
-**
+/**
  * Returns the un-normalized floating-point coordinates transformed by the given transform.
  *
  * transform may be null.
diff --git a/src/i830_render.c b/src/i830_render.c
index 78ae40a..87543ef 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -395,6 +395,7 @@ i830_prepare_composite(int op, PicturePtr pSrcPicture,
     ScrnInfoPtr pScrn = xf86Screens[pSrcPicture->pDrawable->pScreen->myNum];
     I830Ptr pI830 = I830PTR(pScrn);
     uint32_t dst_format, dst_offset, dst_pitch;
+    Bool is_affine_src, is_affine_mask;
 
     IntelEmitInvarientState(pScrn);
     *pI830->last_3d = LAST_3D_RENDER;
@@ -415,6 +416,12 @@ i830_prepare_composite(int op, PicturePtr pSrcPicture,
 	pI830->scale_units[1][1] = -1;
     }
 
+    is_affine_src = i830_transform_is_affine (pI830->transform[0]);
+    is_affine_mask = i830_transform_is_affine (pI830->transform[1]);
+
+    if (!is_affine_src || !is_affine_mask)
+	I830FALLBACK("non-affine transform unsupported on 8xx hardware\n");
+
     {
 	uint32_t cblend, ablend, blendctl, vf2;
 
@@ -556,7 +563,6 @@ i830_prepare_composite(int op, PicturePtr pSrcPicture,
     return TRUE;
 }
 
-
 /**
  * Do a single rectangle composite operation.
  *
@@ -569,79 +575,138 @@ i830_composite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
     ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
     I830Ptr pI830 = I830PTR(pScrn);
     Bool has_mask;
-    float src_x[3], src_y[3], mask_x[3], mask_y[3];
-
-    i830_get_transformed_coordinates(srcX, srcY,
-				     pI830->transform[0],
-				     &src_x[0], &src_y[0]);
-    i830_get_transformed_coordinates(srcX, srcY + h,
-				     pI830->transform[0],
-				     &src_x[1], &src_y[1]);
-    i830_get_transformed_coordinates(srcX + w, srcY + h,
-				     pI830->transform[0],
-				     &src_x[2], &src_y[2]);
+    Bool is_affine_src, is_affine_mask;
+    int per_vertex, num_floats;
+    float src_x[3], src_y[3], src_w[3], mask_x[3], mask_y[3], mask_w[3];
+
+    is_affine_src = i830_transform_is_affine (pI830->transform[0]);
+    is_affine_mask = i830_transform_is_affine (pI830->transform[1]);
 
     if (pI830->scale_units[1][0] == -1 || pI830->scale_units[1][1] == -1) {
 	has_mask = FALSE;
     } else {
 	has_mask = TRUE;
-	i830_get_transformed_coordinates(maskX, maskY,
-					 pI830->transform[1],
-					 &mask_x[0], &mask_y[0]);
-	i830_get_transformed_coordinates(maskX, maskY + h,
-					 pI830->transform[1],
-					 &mask_x[1], &mask_y[1]);
-	i830_get_transformed_coordinates(maskX + w, maskY + h,
-					 pI830->transform[1],
-					 &mask_x[2], &mask_y[2]);
     }
 
+    per_vertex = 2; /* dest x/y */
+    if (is_affine_src)
     {
-	int vertex_count;
-
-	if (has_mask)
-		vertex_count = 3*6;
-	else
-		vertex_count = 3*4;
-
-	BEGIN_BATCH(6+vertex_count);
-
-	OUT_BATCH(MI_NOOP);
-	OUT_BATCH(MI_NOOP);
-	OUT_BATCH(MI_NOOP);
-	OUT_BATCH(MI_NOOP);
-	OUT_BATCH(MI_NOOP);
-
-	OUT_BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST | (vertex_count-1));
+	i830_get_transformed_coordinates(srcX, srcY,
+					 pI830->transform[0],
+					 &src_x[0], &src_y[0]);
+	i830_get_transformed_coordinates(srcX, srcY + h,
+					 pI830->transform[0],
+					 &src_x[1], &src_y[1]);
+	i830_get_transformed_coordinates(srcX + w, srcY + h,
+					 pI830->transform[0],
+					 &src_x[2], &src_y[2]);
+	per_vertex += 2;    /* src x/y */
+    } else {
+	i830_get_transformed_coordinates_3d(srcX, srcY,
+					    pI830->transform[0],
+					    &src_x[0], &src_y[0],
+					    &src_w[0]);
+	i830_get_transformed_coordinates_3d(srcX, srcY + h,
+					    pI830->transform[0],
+					    &src_x[1], &src_y[1],
+					    &src_w[1]);
+	i830_get_transformed_coordinates_3d(srcX + w, srcY + h,
+					    pI830->transform[0],
+					    &src_x[2], &src_y[2],
+					    &src_w[2]);
+	per_vertex += 4;    /* src x/y/z/w */
+    }
+    if (has_mask) {
+	if (is_affine_mask) {
+	    i830_get_transformed_coordinates(maskX, maskY,
+					     pI830->transform[1],
+					     &mask_x[0], &mask_y[0]);
+	    i830_get_transformed_coordinates(maskX, maskY + h,
+					     pI830->transform[1],
+					     &mask_x[1], &mask_y[1]);
+	    i830_get_transformed_coordinates(maskX + w, maskY + h,
+					     pI830->transform[1],
+					     &mask_x[2], &mask_y[2]);
+	    per_vertex += 2;	/* mask x/y */
+	} else {
+	    i830_get_transformed_coordinates_3d(maskX, maskY,
+						pI830->transform[1],
+						&mask_x[0], &mask_y[0],
+						&mask_w[0]);
+	    i830_get_transformed_coordinates_3d(maskX, maskY + h,
+						pI830->transform[1],
+						&mask_x[1], &mask_y[1],
+						&mask_w[1]);
+	    i830_get_transformed_coordinates_3d(maskX + w, maskY + h,
+						pI830->transform[1],
+						&mask_x[2], &mask_y[2],
+						&mask_w[2]);
+	    per_vertex += 4;	/* mask x/y/z/w */
+	}
+    }
 
-	OUT_BATCH_F(-0.125 + dstX + w);
-	OUT_BATCH_F(-0.125 + dstY + h);
-	OUT_BATCH_F(src_x[2] / pI830->scale_units[0][0]);
-	OUT_BATCH_F(src_y[2] / pI830->scale_units[0][1]);
-	if (has_mask) {
-	    OUT_BATCH_F(mask_x[2] / pI830->scale_units[1][0]);
-	    OUT_BATCH_F(mask_y[2] / pI830->scale_units[1][1]);
+    num_floats = 3 * per_vertex;
+    BEGIN_BATCH(6 + num_floats);
+
+    OUT_BATCH(MI_NOOP);
+    OUT_BATCH(MI_NOOP);
+    OUT_BATCH(MI_NOOP);
+    OUT_BATCH(MI_NOOP);
+    OUT_BATCH(MI_NOOP);
+
+    OUT_BATCH(PRIM3D_INLINE | PRIM3D_RECTLIST | (num_floats-1));
+    OUT_BATCH_F(-0.125 + dstX + w);
+    OUT_BATCH_F(-0.125 + dstY + h);
+    OUT_BATCH_F(src_x[2] / pI830->scale_units[0][0]);
+    OUT_BATCH_F(src_y[2] / pI830->scale_units[0][1]);
+    if (!is_affine_src) {
+	OUT_BATCH_F(0.0);
+	OUT_BATCH_F(src_w[2]);
+    }
+    if (has_mask) {
+	OUT_BATCH_F(mask_x[2] / pI830->scale_units[1][0]);
+	OUT_BATCH_F(mask_y[2] / pI830->scale_units[1][1]);
+	if (!is_affine_mask) {
+	    OUT_BATCH_F(0.0);
+	    OUT_BATCH_F(mask_w[2]);
 	}
+    }
 
-	OUT_BATCH_F(-0.125 + dstX);
-	OUT_BATCH_F(-0.125 + dstY + h);
-	OUT_BATCH_F(src_x[1] / pI830->scale_units[0][0]);
-	OUT_BATCH_F(src_y[1] / pI830->scale_units[0][1]);
-	if (has_mask) {
-	    OUT_BATCH_F(mask_x[1] / pI830->scale_units[1][0]);
-	    OUT_BATCH_F(mask_y[1] / pI830->scale_units[1][1]);
+    OUT_BATCH_F(-0.125 + dstX);
+    OUT_BATCH_F(-0.125 + dstY + h);
+    OUT_BATCH_F(src_x[1] / pI830->scale_units[0][0]);
+    OUT_BATCH_F(src_y[1] / pI830->scale_units[0][1]);
+    if (!is_affine_src) {
+	OUT_BATCH_F(0.0);
+	OUT_BATCH_F(src_w[1]);
+    }
+    if (has_mask) {
+	OUT_BATCH_F(mask_x[1] / pI830->scale_units[1][0]);
+	OUT_BATCH_F(mask_y[1] / pI830->scale_units[1][1]);
+	if (!is_affine_mask) {
+	    OUT_BATCH_F(0.0);
+	    OUT_BATCH_F(mask_w[1]);
 	}
+    }
 
-	OUT_BATCH_F(-0.125 + dstX);
-	OUT_BATCH_F(-0.125 + dstY);
-	OUT_BATCH_F(src_x[0] / pI830->scale_units[0][0]);
-	OUT_BATCH_F(src_y[0] / pI830->scale_units[0][1]);
-	if (has_mask) {
-	    OUT_BATCH_F(mask_x[0] / pI830->scale_units[1][0]);
-	    OUT_BATCH_F(mask_y[0] / pI830->scale_units[1][1]);
+    OUT_BATCH_F(-0.125 + dstX);
+    OUT_BATCH_F(-0.125 + dstY);
+    OUT_BATCH_F(src_x[0] / pI830->scale_units[0][0]);
+    OUT_BATCH_F(src_y[0] / pI830->scale_units[0][1]);
+    if (!is_affine_src) {
+	OUT_BATCH_F(0.0);
+	OUT_BATCH_F(src_w[0]);
+    }
+    if (has_mask) {
+	OUT_BATCH_F(mask_x[0] / pI830->scale_units[1][0]);
+	OUT_BATCH_F(mask_y[0] / pI830->scale_units[1][1]);
+	if (!is_affine_mask) {
+	    OUT_BATCH_F(0.0);
+	    OUT_BATCH_F(mask_w[0]);
 	}
-	ADVANCE_BATCH();
     }
+
+    ADVANCE_BATCH();
 }
 
 /**
diff --git a/src/i915_3d.h b/src/i915_3d.h
index c2efe9a..1a0bd45 100644
--- a/src/i915_3d.h
+++ b/src/i915_3d.h
@@ -236,6 +236,11 @@ do {									\
      FS_OUT(_i915_fs_texld(T0_TEXLD, dest_reg, sampler_reg, address_reg)); \
 } while (0)
 
+#define i915_fs_texldp(dest_reg, sampler_reg, address_reg)		\
+do {									\
+     FS_OUT(_i915_fs_texld(T0_TEXLDP, dest_reg, sampler_reg, address_reg)); \
+} while (0)
+
 static inline struct i915_fs_op
 _i915_fs_texld(int load_op, int dest_reg, int sampler_reg, int address_reg)
 {
diff --git a/src/i915_render.c b/src/i915_render.c
index 8ac1b78..9c6da09 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -320,6 +320,7 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
     uint32_t blendctl;
     int out_reg = FS_OC;
     FS_LOCALS(20);
+    Bool is_affine_src, is_affine_mask;
 
     IntelEmitInvarientState(pScrn);
     *pI830->last_3d = LAST_3D_RENDER;
@@ -339,6 +340,8 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
 	pI830->scale_units[1][0] = -1;
 	pI830->scale_units[1][1] = -1;
     }
+    is_affine_src = i830_transform_is_affine (pI830->transform[0]);
+    is_affine_mask = i830_transform_is_affine (pI830->transform[1]);
 
     if (pMask == NULL) {
 	BEGIN_BATCH(10);
@@ -389,9 +392,9 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
 
 	OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(2) |
 		  I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 3);
-	ss2 = S2_TEXCOORD_FMT(0, TEXCOORDFMT_2D);
+	ss2 = S2_TEXCOORD_FMT(0, is_affine_src ? TEXCOORDFMT_2D : TEXCOORDFMT_4D);
 	if (pMask)
-		ss2 |= S2_TEXCOORD_FMT(1, TEXCOORDFMT_2D);
+		ss2 |= S2_TEXCOORD_FMT(1, is_affine_mask ? TEXCOORDFMT_2D : TEXCOORDFMT_4D);
 	else
 		ss2 |= S2_TEXCOORD_FMT(1, TEXCOORDFMT_NOT_PRESENT);
 	ss2 |= S2_TEXCOORD_FMT(2, TEXCOORDFMT_NOT_PRESENT);
@@ -435,7 +438,12 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
 	i915_fs_dcl(FS_T1);
 
     /* Load the pSrcPicture texel */
-    i915_fs_texld(FS_R0, FS_S0, FS_T0);
+    if (is_affine_src) {
+	i915_fs_texld(FS_R0, FS_S0, FS_T0);
+    } else {
+	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(pSrcPicture->format) == 0)
 	i915_fs_mov_masked(FS_R0, MASK_W, i915_fs_operand_one());
@@ -445,7 +453,11 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
 	i915_fs_mov(out_reg, i915_fs_operand_reg(FS_R0));
     } else {
 	/* Load the pMaskPicture texel */
-	i915_fs_texld(FS_R1, FS_S1, FS_T1);
+	if (is_affine_mask) {
+	    i915_fs_texld(FS_R1, FS_S1, FS_T1);
+	} else {
+	    i915_fs_texldp(FS_R1, FS_S1, FS_T1);
+	}
 	/* If the texture lacks an alpha channel, force the alpha to 1. */
 	if (PICT_FORMAT_A(pMaskPicture->format) == 0)
 	    i915_fs_mov_masked(FS_R1, MASK_W, i915_fs_operand_one());

commit f699389818f1f11f3edddcdddcd0a43be21ba4c0
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Mar 18 14:06:47 2008 -0700

    Add i830_transform_is_affine and i830_get_transformed_coordinates_3d.
    
    These are needed to deal with projective transforms in the composite
    operation.

diff --git a/src/i830.h b/src/i830.h
index ee0f03a..512938c 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -790,6 +790,9 @@ Bool i830_check_composite(int op, PicturePtr pSrc, PicturePtr pMask,
 Bool i830_prepare_composite(int op, PicturePtr pSrc, PicturePtr pMask,
 			    PicturePtr pDst, PixmapPtr pSrcPixmap,
 			    PixmapPtr pMaskPixmap, PixmapPtr pDstPixmap);
+Bool
+i830_transform_is_affine (PictTransformPtr t);
+
 void i830_composite(PixmapPtr pDst, int srcX, int srcY,
 		    int maskX, int maskY, int dstX, int dstY, int w, int h);
 void i830_done_composite(PixmapPtr pDst);
@@ -812,6 +815,10 @@ void
 i830_get_transformed_coordinates(int x, int y, PictTransformPtr transform,
 				 float *x_out, float *y_out);
 
+void
+i830_get_transformed_coordinates_3d(int x, int y, PictTransformPtr transform,
+				    float *x_out, float *y_out, float *z_out);
+
 void i830_enter_render(ScrnInfoPtr);
 
 static inline int i830_fb_compression_supported(I830Ptr pI830)
diff --git a/src/i830_exa.c b/src/i830_exa.c
index bf9fc66..0206ab9 100644
--- a/src/i830_exa.c
+++ b/src/i830_exa.c
@@ -363,6 +363,45 @@ i830_get_transformed_coordinates(int x, int y, PictTransformPtr transform,
     }
 }
 
+**
+ * Returns the un-normalized floating-point coordinates transformed by the given transform.
+ *
+ * transform may be null.
+ */
+void
+i830_get_transformed_coordinates_3d(int x, int y, PictTransformPtr transform,
+				    float *x_out, float *y_out, float *w_out)
+{
+    if (transform == NULL) {
+	*x_out = x;
+	*y_out = y;
+	*w_out = 1;
+    } else {
+	PictVector v;
+
+        v.vector[0] = IntToxFixed(x);
+        v.vector[1] = IntToxFixed(y);
+        v.vector[2] = xFixed1;
+        PictureTransformPoint3d(transform, &v);
+	*x_out = xFixedToFloat(v.vector[0]);
+	*y_out = xFixedToFloat(v.vector[1]);
+	*w_out = xFixedToFloat(v.vector[2]);
+    }
+}
+
+/**
+ * Returns whether the provided transform is affine.
+ *
+ * transform may be null.
+ */
+Bool
+i830_transform_is_affine (PictTransformPtr t)
+{
+    if (t == NULL)
+	return TRUE;
+    return t->matrix[2][0] == 0 && t->matrix[2][1] == 0;
+}
+
 /*
  * TODO:
  *   - Dual head?

commit a55974b435224fe5726fa44298d051c71e4056a5
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Mar 18 13:47:20 2008 -0700

    Add defines for 9xx S3 word in 3D_STATE_LOAD_STATE_IMMEDIATE
    
    These aren't used at this point, but what the heck.

diff --git a/src/i915_reg.h b/src/i915_reg.h
index 682a157..4340de9 100644
--- a/src/i915_reg.h
+++ b/src/i915_reg.h
@@ -360,6 +360,16 @@
 #define S2_TEXCOORD_FMT(unit, type)    ((type)<<(unit*4))
 #define S2_TEXCOORD_NONE               (~0)
 
+#define TEXCOORD_WRAP_SHORTEST_TCX	8
+#define TEXCOORD_WRAP_SHORTEST_TCY	4
+#define TEXCOORD_WRAP_SHORTEST_TCZ	2
+#define TEXCOORD_PERSPECTIVE_DISABLE	1
+
+#define S3_WRAP_SHORTEST_TCX(unit)	(TEXCOORD_WRAP_SHORTEST_TCX << ((unit) * 4))
+#define S3_WRAP_SHORTEST_TCY(unit)	(TEXCOORD_WRAP_SHORTEST_TCY << ((unit) * 4))
+#define S3_WRAP_SHORTEST_TCZ(unit)	(TEXCOORD_WRAP_SHORTEST_TCZ << ((unit) * 4))
+#define S3_PERSPECTIVE_DISABLE(unit)	(TEXCOORD_PERSPECTIVE_DISABLE << ((unit) * 4))
+
 /* S3 not interesting */
 
 #define S4_POINT_WIDTH_SHIFT           23

commit 4f5500abe209b92b39ae1f2d7a1118362ac95034
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Mar 18 13:45:46 2008 -0700

    8xx/9xx can handle textures to 2kx2k. 965 can do 8kx8k

diff --git a/src/i830_render.c b/src/i830_render.c
index 949c700..78ae40a 100644
--- a/src/i830_render.c
+++ b/src/i830_render.c
@@ -231,7 +231,7 @@ static Bool i830_check_composite_texture(PicturePtr pPict, int unit)
     int h = pPict->pDrawable->height;
     int i;
 
-    if ((w > 0x7ff) || (h > 0x7ff))
+    if ((w > 2048) || (h > 2048))
         I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h);
 
     for (i = 0; i < sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0]);
diff --git a/src/i915_render.c b/src/i915_render.c
index b15beef..8ac1b78 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -188,7 +188,7 @@ static Bool i915_check_composite_texture(PicturePtr pPict, int unit)
     int h = pPict->pDrawable->height;
     int i;
 
-    if ((w > 0x7ff) || (h > 0x7ff))
+    if ((w > 2048) || (h > 2048))
         I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h);
 
     for (i = 0; i < sizeof(i915_tex_formats) / sizeof(i915_tex_formats[0]);
diff --git a/src/i965_render.c b/src/i965_render.c
index 7f798e6..ada3919 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -182,7 +182,7 @@ static Bool i965_check_composite_texture(PicturePtr pPict, int unit)
     int h = pPict->pDrawable->height;
     int i;
 
-    if ((w > 0x7ff) || (h > 0x7ff))
+    if ((w > 8192) || (h > 8192))
         I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h);
 
     for (i = 0; i < sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0]);

commit b1b173d03b3acd300c3b0f0ceffeddf1a8137839
Author: Julien Cristau <jcristau@debian.org>
Date:   Tue Mar 18 12:02:25 2008 +0100

    Add i8[13]0_ring.h to _SOURCES to fix distcheck
    
    Thanks to Bruno <bonbons67@internet.lu>.

diff --git a/src/Makefile.am b/src/Makefile.am
index 1c0133f..8fc21d3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -77,6 +77,7 @@ intel_drv_la_SOURCES = \
          i810_io.c \
          i810_memory.c \
          i810_reg.h \
+         i810_ring.h \
          i810_video.c \
          i810_wmark.c \
 	 i830_3d.c \
@@ -102,6 +103,7 @@ intel_drv_la_SOURCES = \
          i830_video.c \
          i830_video.h \
 	 i830_reg.h \
+         i830_ring.h \
 	 i830_sdvo.c \
 	 i830_sdvo.h \
 	 i830_sdvo_regs.h \

commit ac763634069fe070b3afc073ce437959612d39fe
Author: Zhenyu Wang <zhenyu.z.wang@intel.com>
Date:   Tue Mar 18 16:52:29 2008 +0800

    Disable XvMC if DRI is not enabled.
    
    Default XvMC to disabled.

diff --git a/man/intel.man b/man/intel.man
index b9b64b9..c26264f 100644
--- a/man/intel.man
+++ b/man/intel.man
@@ -186,7 +186,7 @@ the output of 'lspci -v' and 'lspci -vn'.
 .BI "Option \*qXvMC\*q \*q" boolean \*q
 Enable XvMC driver. Current support MPEG2 MC on 915/945 and G33 series.
 User should provide absolute path to libIntelXvMC.so in XvMCConfig file.
-Default: Enabled.
+Default: Disabled.
 
 .SH OUTPUT CONFIGURATION
 On 830M and better chipsets, the driver supports runtime configuration of
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 3938e74..a40d8ce 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -1632,8 +1632,11 @@ I830PreInit(ScrnInfoPtr pScrn, int flags)
 #endif
 
 #ifdef INTEL_XVMC
-   pI830->XvMCEnabled = xf86ReturnOptValBool(pI830->Options, OPTION_XVMC, TRUE);
-   xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Intel XvMC decoder %sabled\n",
+   pI830->XvMCEnabled = FALSE;
+   from =  (!pI830->directRenderingDisabled &&
+	    xf86GetOptValBool(pI830->Options, OPTION_XVMC,
+			      &pI830->XvMCEnabled)) ? X_CONFIG : X_DEFAULT;
+   xf86DrvMsg(pScrn->scrnIndex, from, "Intel XvMC decoder %sabled\n",
 	   pI830->XvMCEnabled ? "en" : "dis");
 #endif
 

commit d72e18c10995079121eded758a60ed99b5b8ce1a
Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
Date:   Mon Mar 17 16:59:12 2008 +0800

    Compile warning fixes.
    
    Move some declarations and don't declare an extra variable with the
    same name, to fix warnings about mixed declarations and code.

diff --git a/src/i830_dri.c b/src/i830_dri.c
index 5d2539e..3493eb9 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -747,12 +747,12 @@ static void
 I830InitTextureHeap(ScrnInfoPtr pScrn)
 {
    I830Ptr pI830 = I830PTR(pScrn);
+   drmI830MemInitHeap drmHeap;
 
    if (pI830->textures == NULL)
        return;
 
    /* Start up the simple memory manager for agp space */
-   drmI830MemInitHeap drmHeap;
    drmHeap.region = I830_MEM_REGION_AGP;
    drmHeap.start  = 0;
    drmHeap.size   = pI830->textures->size;
diff --git a/src/i830_driver.c b/src/i830_driver.c
index e1ab536..d5b260c 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -1479,7 +1479,7 @@ I830PreInit(ScrnInfoPtr pScrn, int flags)
        pI830->useEXA = FALSE;
 #endif
 #if defined(I830_USE_XAA) && defined(I830_USE_EXA)
-       int from = X_DEFAULT;
+       from = X_DEFAULT;
        if ((s = (char *)xf86GetOptValString(pI830->Options,
 					    OPTION_ACCELMETHOD))) {
 	   if (!xf86NameCmp(s, "EXA")) {
diff --git a/src/i915_render.c b/src/i915_render.c
index fe02e63..b15beef 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -319,6 +319,7 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
     uint32_t dst_format, dst_offset, dst_pitch;
     uint32_t blendctl;
     int out_reg = FS_OC;
+    FS_LOCALS(20);
 
     IntelEmitInvarientState(pScrn);
     *pI830->last_3d = LAST_3D_RENDER;
@@ -327,7 +328,6 @@ i915_prepare_composite(int op, PicturePtr pSrcPicture,
 	return FALSE;
     dst_offset = intel_get_pixmap_offset(pDst);
     dst_pitch = intel_get_pixmap_pitch(pDst);
-    FS_LOCALS(20);
 
     if (!i915_texture_setup(pSrcPicture, pSrc, 0))
 	I830FALLBACK("fail to setup src texture\n");

commit 81df48d8d151907c2e9dd33a729860c39aa78175
Author: Zhenyu Wang <zhenyu.z.wang@intel.com>
Date:   Mon Mar 17 10:05:57 2008 +0800

    bug 15060: Dell Latitude X300 needs pipe A quirk

diff --git a/src/i830_quirks.c b/src/i830_quirks.c
index 7d0d142..f29083b 100644
--- a/src/i830_quirks.c
+++ b/src/i830_quirks.c
@@ -253,6 +253,8 @@ static i830_quirk i830_quirk_list[] = {
     { PCI_CHIP_I830_M, 0x1014, 0x0505, quirk_pipea_force },
     /* Dell Latitude D500 needs pipe A force quirk */
     { PCI_CHIP_I855_GM, 0x1028, 0x0152, quirk_pipea_force },
+    /* Dell Latitude X300 needs pipe A force quirk */
+    { PCI_CHIP_I855_GM, 0x1028, 0x014f, quirk_pipea_force },
     /* Dell Inspiron 510m needs pipe A force quirk */
     { PCI_CHIP_I855_GM, 0x1028, 0x0164, quirk_pipea_force },
     /* Toshiba Protege R-205, S-209 needs pipe A force quirk */

commit 24e6eb2ae683ed6614ac79c0d7811ac9fe94209f
Author: Jesse Barnes <jbarnes@jbarnes-t61.(none)>
Date:   Mon Mar 17 14:17:27 2008 -0700

    Add support for new ->get_crtc output callbacks
    
    Using the new interface allows the server to avoid some flicker at startup.

diff --git a/src/i830.h b/src/i830.h
index 9bc538c..ee0f03a 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -686,6 +686,8 @@ extern void i830_crtc_dpms_video(xf86CrtcPtr crtc, Bool on);
 int
 i830_crtc_pipe (xf86CrtcPtr crtc);
 
+extern xf86CrtcPtr i830_pipe_to_crtc(ScrnInfoPtr pScrn, int pipe);
+
 Bool
 i830_pipe_a_require_activate (ScrnInfoPtr scrn);
 
diff --git a/src/i830_crt.c b/src/i830_crt.c
index 3705233..d1ed3a8 100644
--- a/src/i830_crt.c
+++ b/src/i830_crt.c
@@ -391,6 +391,16 @@ i830_crt_destroy (xf86OutputPtr output)
 	xfree (output->driver_private);
 }
 
+static xf86CrtcPtr
+i830_crt_get_crtc(xf86OutputPtr output)
+{
+    ScrnInfoPtr	pScrn = output->scrn;
+    I830Ptr pI830 = I830PTR(pScrn);
+    int pipe = !!(INREG(ADPA) & ADPA_PIPE_SELECT_MASK);
+   
+    return i830_pipe_to_crtc(pScrn, pipe);
+}
+
 static const xf86OutputFuncsRec i830_crt_output_funcs = {
     .dpms = i830_crt_dpms,
     .save = i830_crt_save,
@@ -402,7 +412,10 @@ static const xf86OutputFuncsRec i830_crt_output_funcs = {
     .commit = i830_output_commit,
     .detect = i830_crt_detect,
     .get_modes = i830_ddc_get_modes,
-    .destroy = i830_crt_destroy
+    .destroy = i830_crt_destroy,
+#ifdef RANDR_GET_CRTC_INTERFACE
+    .get_crtc = i830_crt_get_crtc,
+#endif
 };
 
 void
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 088989d..e1ab536 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -3165,8 +3165,6 @@ I830EnterVT(int scrnIndex, int flags)
 {
    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    I830Ptr  pI830 = I830PTR(pScrn);
-   xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(pScrn);
-   int o;
 
    DPRINTF(PFX, "Enter VT\n");
 
@@ -3213,11 +3211,6 @@ I830EnterVT(int scrnIndex, int flags)
    memset(pI830->FbBase + pScrn->fbOffset, 0,
 	  pScrn->virtualY * pScrn->displayWidth * pI830->cpp);
 
-   for (o = 0; o < config->num_output; o++) {
-   	xf86OutputPtr  output = config->output[o];
-	output->funcs->dpms(output, DPMSModeOff);
-   }
-
    if (!xf86SetDesiredModes (pScrn))
       return FALSE;
    
@@ -3483,6 +3476,23 @@ I830PMEvent(int scrnIndex, pmEvent event, Bool undo)
    return TRUE;
 }
 
+xf86CrtcPtr
+i830_pipe_to_crtc(ScrnInfoPtr pScrn, int pipe)
+{
+   xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (pScrn);
+   int c;
+   
+   for (c = 0; c < config->num_crtc; c++) {
+      xf86CrtcPtr crtc = config->crtc[c];
+      I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
+
+      if (intel_crtc->pipe == pipe)
+	  return crtc;
+   }
+
+   return NULL;
+} 
+
 #if 0
 /**
  * This function is used for testing of the screen detect functions from the
diff --git a/src/i830_dvo.c b/src/i830_dvo.c
index c0f76e3..7561833 100644
--- a/src/i830_dvo.c
+++ b/src/i830_dvo.c
@@ -330,6 +330,18 @@ i830_dvo_destroy (xf86OutputPtr output)
     }
 }
 
+static xf86CrtcPtr
+i830_dvo_get_crtc(xf86OutputPtr output)
+{
+    ScrnInfoPtr	pScrn = output->scrn;
+    I830Ptr pI830 = I830PTR(pScrn);
+    I830OutputPrivatePtr intel_output = output->driver_private;
+    struct _I830DVODriver *drv = intel_output->i2c_drv;
+    int pipe = !!(INREG(drv->dvo_reg) & SDVO_PIPE_B_SELECT);
+   
+    return i830_pipe_to_crtc(pScrn, pipe);
+}
+
 static const xf86OutputFuncsRec i830_dvo_output_funcs = {
     .dpms = i830_dvo_dpms,
     .save = i830_dvo_save,
@@ -341,7 +353,10 @@ static const xf86OutputFuncsRec i830_dvo_output_funcs = {
     .commit = i830_output_commit,
     .detect = i830_dvo_detect,
     .get_modes = i830_dvo_get_modes,
-    .destroy = i830_dvo_destroy
+    .destroy = i830_dvo_destroy,
+#ifdef RANDR_GET_CRTC_INTERFACE
+    .get_crtc = i830_dvo_get_crtc,
+#endif
 };
 
 /**
diff --git a/src/i830_lvds.c b/src/i830_lvds.c
index a75d7e6..0b331ef 100644
--- a/src/i830_lvds.c
+++ b/src/i830_lvds.c
@@ -879,6 +879,16 @@ i830_lvds_get_property(xf86OutputPtr output, Atom property)
 }
 #endif /* RANDR_13_INTERFACE */
 
+static xf86CrtcPtr
+i830_lvds_get_crtc(xf86OutputPtr output)
+{
+    ScrnInfoPtr	pScrn = output->scrn;
+    I830Ptr pI830 = I830PTR(pScrn);
+    int pipe = !!(INREG(LVDS) & LVDS_PIPEB_SELECT);
+   
+    return i830_pipe_to_crtc(pScrn, pipe);
+}
+
 static const xf86OutputFuncsRec i830_lvds_output_funcs = {
     .create_resources = i830_lvds_create_resources,
     .dpms = i830_lvds_dpms,
@@ -897,7 +907,10 @@ static const xf86OutputFuncsRec i830_lvds_output_funcs = {
 #ifdef RANDR_13_INTERFACE
     .get_property = i830_lvds_get_property,
 #endif
-    .destroy = i830_lvds_destroy
+    .destroy = i830_lvds_destroy,
+#ifdef RANDR_GET_CRTC_INTERFACE
+    .get_crtc = i830_lvds_get_crtc,
+#endif
 };
 
 void
diff --git a/src/i830_sdvo.c b/src/i830_sdvo.c
index 9a89cc9..d72b913 100644
--- a/src/i830_sdvo.c
+++ b/src/i830_sdvo.c
@@ -1146,6 +1146,18 @@ i830_sdvo_destroy (xf86OutputPtr output)
     }
 }
 
+static xf86CrtcPtr
+i830_sdvo_get_crtc(xf86OutputPtr output)
+{
+    ScrnInfoPtr	pScrn = output->scrn;
+    I830Ptr pI830 = I830PTR(pScrn);
+    I830OutputPrivatePtr intel_output = output->driver_private;
+    struct i830_sdvo_priv *dev_priv = intel_output->dev_priv;
+    int pipe = !!(INREG(dev_priv->output_device) & SDVO_PIPE_B_SELECT);
+   
+    return i830_pipe_to_crtc(pScrn, pipe);
+}
+
 static const xf86OutputFuncsRec i830_sdvo_output_funcs = {
     .dpms = i830_sdvo_dpms,
     .save = i830_sdvo_save,
@@ -1157,7 +1169,10 @@ static const xf86OutputFuncsRec i830_sdvo_output_funcs = {
     .commit = i830_output_commit,
     .detect = i830_sdvo_detect,
     .get_modes = i830_sdvo_get_modes,
-    .destroy = i830_sdvo_destroy
+    .destroy = i830_sdvo_destroy,
+#ifdef RANDR_GET_CRTC_INTERFACE
+    .get_crtc = i830_sdvo_get_crtc,
+#endif
 };
 
 void
diff --git a/src/i830_tv.c b/src/i830_tv.c
index 095f59b..b478cc7 100644
--- a/src/i830_tv.c
+++ b/src/i830_tv.c
@@ -1640,6 +1640,16 @@ i830_tv_set_property(xf86OutputPtr output, Atom property,
 }
 #endif /* RANDR_12_INTERFACE */
 
+static xf86CrtcPtr
+i830_tv_get_crtc(xf86OutputPtr output)
+{
+    ScrnInfoPtr	pScrn = output->scrn;
+    I830Ptr pI830 = I830PTR(pScrn);
+    int pipe = !!(INREG(TV_CTL) & TV_ENC_PIPEB_SELECT);
+   
+    return i830_pipe_to_crtc(pScrn, pipe);
+}
+
 static const xf86OutputFuncsRec i830_tv_output_funcs = {
     .create_resources = i830_tv_create_resources,
     .dpms = i830_tv_dpms,
@@ -1656,6 +1666,9 @@ static const xf86OutputFuncsRec i830_tv_output_funcs = {
 #ifdef RANDR_12_INTERFACE
     .set_property = i830_tv_set_property,
 #endif
+#ifdef RANDR_GET_CRTC_INTERFACE
+    .get_crtc = i830_tv_get_crtc,
+#endif
 };
 
 void

commit 69fbc17441d0f894d17b058e65ae22300cd2a54c
Author: Eric Anholt <eric@anholt.net>
Date:   Fri Mar 14 10:04:18 2008 -0700

    Change OUT_RING and similar calls to OUT_BATCH for batchbuffer merge

diff --git a/src/i830.h b/src/i830.h
index 6c3fa52..9bc538c 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -828,6 +828,13 @@ static inline int i830_fb_compression_supported(I830Ptr pI830)
 
 Bool i830_pixmap_tiled(PixmapPtr p);


Reply to: