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: