xf86-video-intel: Branch 'exa' - 3 commits - src/i830_dri.c src/i830_driver.c src/i830_exa.c src/i830_exa_render.c src/i830.h src/i830_rotate.c src/i915_3d.c src/i915_exa_render.c src/i915_video.c

Eric Anholt anholt at kemper.freedesktop.org
Fri Oct 27 02:43:00 EEST 2006


 src/i830.h            |    9 ++++
 src/i830_dri.c        |    2 
 src/i830_driver.c     |   13 ++++++
 src/i830_exa.c        |    1 
 src/i830_exa_render.c |    2 
 src/i830_rotate.c     |  106 ++++++--------------------------------------------
 src/i915_3d.c         |   34 +++++++++-------
 src/i915_exa_render.c |   20 +--------
 src/i915_video.c      |   53 +------------------------
 9 files changed, 67 insertions(+), 173 deletions(-)

New commits:
diff-tree 25e6e497824a23eb231fc6fd6e483f601d612cee (from 0bdcce2e4541c6e441c44aad49254ad3093cedb2)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Oct 26 15:47:49 2006 -0700

    Major cleanup of 3D invariant state, fixing hangs with rotation and render.
    
    Now, the generic invariant state is always set while the X Server is active,
    and happens automatically when the X Server grabs the DRI lock.  More 3D state
    is moved to the generic code.
    
    Then, the 3D consumers (video, rotation, render) set last_3d to their enum
    entry, and can update their own invariant state when another consumer was
    active.

diff --git a/src/i830.h b/src/i830.h
index df1c171..9c37068 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -192,6 +192,13 @@ typedef struct _region {
     int x0,x1,y0,y1;
 } region;
 
+/** enumeration of 3d consumers so some can maintain invariant state. */
+enum last_3d {
+    LAST_3D_OTHER,
+    LAST_3D_VIDEO,
+    LAST_3D_RENDER,
+    LAST_3D_ROTATION
+};
 
 typedef struct _I830Rec {
    unsigned char *MMIOBase;
@@ -453,6 +460,8 @@ typedef struct _I830Rec {
 
    CARD32 savedAsurf;
    CARD32 savedBsurf;
+
+    enum last_3d last_3d;
 } I830Rec;
 
 #define I830PTR(p) ((I830Ptr)((p)->driverPrivate))
diff --git a/src/i830_dri.c b/src/i830_dri.c
index 8a52750..b844d33 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -1000,6 +1000,8 @@ I830DRISwapContext(ScreenPtr pScreen, DR
       if (I810_DEBUG & DEBUG_VERBOSE_DRI)
 	 ErrorF("i830DRISwapContext (in)\n");
 
+      pI830->last_3d = LAST_3D_OTHER;
+
       if (!pScrn->vtSema)
      	 return;
       pI830->LockHeld = 1;
diff --git a/src/i830_driver.c b/src/i830_driver.c
index f9ca77c..12fc524 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -7041,10 +7041,23 @@ IntelEmitInvarientState(ScrnInfoPtr pScr
 {
    I830Ptr pI830 = I830PTR(pScrn);
    CARD32 ctx_addr;
+#ifdef XF86DRI
+   drmI830Sarea *sarea;
+#endif
 
    if (pI830->noAccel)
       return;
 
+#ifdef XF86DRI
+   if (pI830->directRenderingEnabled) {
+      sarea = DRIGetSAREAPrivate(pScrn->pScreen);
+
+      /* Mark that the X Server was the last holder of the context */
+      if (sarea)
+	 sarea->ctxOwner = DRIGetContext(pScrn->pScreen);
+   }
+#endif
+
    ctx_addr = pI830->ContextMem.Start;
    /* Align to a 2k boundry */
    ctx_addr = ((ctx_addr + 2048 - 1) / 2048) * 2048;
diff --git a/src/i830_exa_render.c b/src/i830_exa_render.c
index 86e11d2..f63313f 100644
--- a/src/i830_exa_render.c
+++ b/src/i830_exa_render.c
@@ -404,6 +404,8 @@ I830EXAPrepareComposite(int op, PictureP
     dst_offset = exaGetPixmapOffset(pDst);
     dst_pitch = exaGetPixmapPitch(pDst);
 
+    pI830->last_3d = LAST_3D_RENDER;
+
     if (!I830TextureSetup(pSrcPicture, pSrc, 0))
 	I830FALLBACK("fail to setup src texture\n");
     if (pMask != NULL) {
diff --git a/src/i830_rotate.c b/src/i830_rotate.c
index 76effa2..3cdb3ae 100644
--- a/src/i830_rotate.c
+++ b/src/i830_rotate.c
@@ -211,11 +211,6 @@ I915UpdateRotate (ScreenPtr      pScreen
    struct matrix23 rotMatrix;
    int j;
    int use_fence;
-   Bool updateInvarient = FALSE;
-#ifdef XF86DRI
-   drmI830Sarea *sarea = NULL;
-   drm_context_t myContext = 0;
-#endif
    Bool didLock = FALSE;
 
    if (I830IsPrimary(pScrn)) {
@@ -246,58 +241,20 @@ I915UpdateRotate (ScreenPtr      pScreen
    }
 
 #ifdef XF86DRI
-   if (pI8301->directRenderingEnabled) {
-      sarea = DRIGetSAREAPrivate(pScrn1->pScreen);
-      myContext = DRIGetContext(pScrn1->pScreen);
+   if (pI8301->directRenderingEnabled)
       didLock = I830DRILock(pScrn1);
-   }
 #endif
 
+   /* If another screen was active, we don't know the current state. */
    if (pScrn->scrnIndex != *pI830->used3D)
-      updateInvarient = TRUE;
- 
-#ifdef XF86DRI
-   if (sarea && sarea->ctxOwner != myContext)
-      updateInvarient = TRUE;
-#endif
+      pI830->last_3d = LAST_3D_OTHER;
 
-   if (updateInvarient) {
+   if (pI830->last_3d != LAST_3D_ROTATION) {
       FS_LOCALS(3);
       *pI830->used3D = pScrn->scrnIndex;
-#ifdef XF86DRI
-      if (sarea)
-         sarea->ctxOwner = myContext;
-#endif
-      BEGIN_LP_RING(54);
-      /* invarient state */
-      OUT_RING(MI_NOOP);
-      OUT_RING(_3DSTATE_AA_CMD |
-	       AA_LINE_ECAAR_WIDTH_ENABLE | AA_LINE_ECAAR_WIDTH_1_0 |
-	       AA_LINE_REGION_WIDTH_ENABLE | AA_LINE_REGION_WIDTH_1_0);
-
-      OUT_RING(_3DSTATE_DFLT_DIFFUSE_CMD);
-      OUT_RING(0x00000000);
-
-      OUT_RING(_3DSTATE_DFLT_SPEC_CMD);
-      OUT_RING(0x00000000);
-
-      OUT_RING(_3DSTATE_DFLT_Z_CMD);
-      OUT_RING(0x00000000);
 
-      OUT_RING(_3DSTATE_COORD_SET_BINDINGS |
-	       CSB_TCB(0, 0) | CSB_TCB(1, 1) |
-	       CSB_TCB(2, 2) | CSB_TCB(3, 3) |
-	       CSB_TCB(4, 4) | CSB_TCB(5, 5) |
-	       CSB_TCB(6, 6) | CSB_TCB(7, 7));
-
-      OUT_RING(_3DSTATE_RASTER_RULES_CMD |
-	       ENABLE_TRI_FAN_PROVOKE_VRTX | TRI_FAN_PROVOKE_VRTX(2) |
-	       ENABLE_LINE_STRIP_PROVOKE_VRTX | LINE_STRIP_PROVOKE_VRTX(1) |
-	       ENABLE_TEXKILL_3D_4D | TEXKILL_4D |
-	       ENABLE_POINT_RASTER_RULE | OGL_POINT_RASTER_RULE);
-
-      OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | 1);
-      OUT_RING(0x00000000);
+      BEGIN_LP_RING(34);
+      /* invarient state */
 
       /* flush map & render cache */
       OUT_RING(MI_FLUSH | MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE);
@@ -313,24 +270,13 @@ I915UpdateRotate (ScreenPtr      pScreen
 
       OUT_RING(MI_NOOP);
 
-      OUT_RING(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT);
-      OUT_RING(_3DSTATE_SCISSOR_RECT_0_CMD);
-      OUT_RING(0x00000000); /* ymin, xmin */
-      OUT_RING(0x00000000); /* ymax, xmax */
-
       OUT_RING(0x7c000003); /* XXX: magic numbers */
       OUT_RING(0x7d070000);
       OUT_RING(0x00000000);
       OUT_RING(0x68000002);
 
-      /* context setup */
-      OUT_RING(_3DSTATE_MODES_4_CMD |
-	       ENABLE_LOGIC_OP_FUNC | LOGIC_OP_FUNC(LOGICOP_COPY) |
-	       MODE4_ENABLE_STENCIL_WRITE_MASK |
-	       MODE4_ENABLE_STENCIL_TEST_MASK);
-
       OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 |
-	       I1_LOAD_S(2) | I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 4);
+	       I1_LOAD_S(2) | I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 3);
 
       OUT_RING(S2_TEXCOORD_FMT(0, TEXCOORDFMT_2D) |
 	       S2_TEXCOORD_FMT(1, TEXCOORDFMT_NOT_PRESENT) |
@@ -349,14 +295,6 @@ I915UpdateRotate (ScreenPtr      pScreen
 	       (1 << S6_CBUF_DST_BLEND_FACT_SHIFT) | S6_COLOR_WRITE_ENABLE |
 	       (2 << S6_TRISTRIP_PV_SHIFT));
 
-      OUT_RING(_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
-	       IAB_MODIFY_ENABLE |
-	       IAB_MODIFY_FUNC | (BLENDFUNC_ADD << IAB_FUNC_SHIFT) |
-	       IAB_MODIFY_SRC_FACTOR |
-	       (BLENDFACT_ONE << IAB_SRC_FACTOR_SHIFT) |
-	       IAB_MODIFY_DST_FACTOR |
-	       (BLENDFACT_ZERO << IAB_DST_FACTOR_SHIFT));
-
       OUT_RING(_3DSTATE_CONST_BLEND_COLOR_CMD);
       OUT_RING(0x00000000);
 
@@ -373,9 +311,6 @@ I915UpdateRotate (ScreenPtr      pScreen
 		  DEPTH_FRMT_24_FIXED_8_OTHER);
       }
 
-      OUT_RING(_3DSTATE_STIPPLE);
-      OUT_RING(0x00000000);
-
       /* texture sampler state */
       OUT_RING(_3DSTATE_SAMPLER_STATE | 3);
       OUT_RING(0x00000001);
@@ -493,13 +428,8 @@ I830UpdateRotate (ScreenPtr      pScreen
    CARD32	vb[32];	/* 32 dword vertex buffer */
    float verts[4][2], tex[4][2];
    struct matrix23 rotMatrix;
-   Bool updateInvarient = FALSE;
    int use_fence;
    int j;
-#ifdef XF86DRI
-   drmI830Sarea *sarea = NULL;
-   drm_context_t myContext = 0;
-#endif
    Bool didLock = FALSE;
 
    if (I830IsPrimary(pScrn)) {
@@ -530,28 +460,18 @@ I830UpdateRotate (ScreenPtr      pScreen
    }
 
 #ifdef XF86DRI
-   if (pI8301->directRenderingEnabled) {
-      sarea = DRIGetSAREAPrivate(pScrn1->pScreen);
-      myContext = DRIGetContext(pScrn1->pScreen);
+   if (pI8301->directRenderingEnabled)
       didLock = I830DRILock(pScrn1);
-   }
 #endif
 
    if (pScrn->scrnIndex != *pI830->used3D)
-      updateInvarient = TRUE;
+      pI830->last_3d = LAST_3D_OTHER;
 
-#ifdef XF86DRI
-   if (sarea && sarea->ctxOwner != myContext)
-      updateInvarient = TRUE;
-#endif
-
-   if (updateInvarient) {
+   if (pI830->last_3d != LAST_3D_ROTATION) {
       *pI830->used3D = pScrn->scrnIndex;
-#ifdef XF86DRI
-      if (sarea)
-         sarea->ctxOwner = myContext;
-#endif
-      
+
+      pI830->last_3d = LAST_3D_ROTATION;
+
       BEGIN_LP_RING(48);
       OUT_RING(0x682008a1);
       OUT_RING(0x6f402100);
diff --git a/src/i915_3d.c b/src/i915_3d.c
index e70bb24..ff59171 100644
--- a/src/i915_3d.c
+++ b/src/i915_3d.c
@@ -38,7 +38,7 @@ void I915EmitInvarientState( ScrnInfoPtr
 {
    I830Ptr pI830 = I830PTR(pScrn);
 
-   BEGIN_LP_RING(20);
+   BEGIN_LP_RING(24);
 
    OUT_RING(_3DSTATE_AA_CMD |
 	     AA_LINE_ECAAR_WIDTH_ENABLE |
@@ -46,6 +46,13 @@ void I915EmitInvarientState( ScrnInfoPtr
 	     AA_LINE_REGION_WIDTH_ENABLE |
 	     AA_LINE_REGION_WIDTH_1_0);
 
+   /* Disable independent alpha blend */
+   OUT_RING(_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
+	    IAB_MODIFY_ENABLE |
+	    IAB_MODIFY_FUNC | (BLENDFUNC_ADD << IAB_FUNC_SHIFT) |
+	    IAB_MODIFY_SRC_FACTOR | (BLENDFACT_ONE << IAB_SRC_FACTOR_SHIFT) |
+	    IAB_MODIFY_DST_FACTOR | (BLENDFACT_ZERO << IAB_DST_FACTOR_SHIFT));
+
    OUT_RING(_3DSTATE_DFLT_DIFFUSE_CMD);
    OUT_RING(0);
 
@@ -76,15 +83,15 @@ void I915EmitInvarientState( ScrnInfoPtr
 	     ENABLE_TEXKILL_3D_4D |
 	     TEXKILL_4D);
 
-   /* Need to initialize this to zero.
-    */
+   OUT_RING(_3DSTATE_MODES_4_CMD |
+	    ENABLE_LOGIC_OP_FUNC | LOGIC_OP_FUNC(LOGICOP_COPY) |
+	    ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff) |
+	    ENABLE_STENCIL_TEST_MASK | STENCIL_TEST_MASK(0xff));
+
    OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | 0);
-   OUT_RING(0);
- 
-   /* XXX: Use this */
-   OUT_RING(_3DSTATE_SCISSOR_ENABLE_CMD | 
-	     DISABLE_SCISSOR_RECT);
+   OUT_RING(0x00000000);	/* Disable texture coordinate wrap-shortest */
 
+   OUT_RING(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT);
    OUT_RING(_3DSTATE_SCISSOR_RECT_0_CMD);
    OUT_RING(0);
    OUT_RING(0);
@@ -94,12 +101,11 @@ void I915EmitInvarientState( ScrnInfoPtr
    OUT_RING(_3DSTATE_LOAD_INDIRECT | 0); /* disable indirect state */
    OUT_RING(0);
 
-   /* Don't support twosided stencil yet */
-   OUT_RING(_3DSTATE_BACKFACE_STENCIL_OPS |
-	     BFO_ENABLE_STENCIL_TWO_SIDE |
-	     0 );
+   OUT_RING(_3DSTATE_STIPPLE);
+   OUT_RING(0x00000000);
+
+   OUT_RING(_3DSTATE_BACKFACE_STENCIL_OPS | BFO_ENABLE_STENCIL_TWO_SIDE | 0 );
+   OUT_RING(MI_NOOP);
 
-   OUT_RING(0);
-   
    ADVANCE_LP_RING();
 }
diff --git a/src/i915_exa_render.c b/src/i915_exa_render.c
index 13fe3ee..eae8171 100644
--- a/src/i915_exa_render.c
+++ b/src/i915_exa_render.c
@@ -329,6 +329,8 @@ I915EXAPrepareComposite(int op, PictureP
     ErrorF("Enter i915 prepareComposite\n");
 #endif
 
+    pI830->last_3d = LAST_3D_RENDER;
+
     I915GetDestFormat(pDstPicture, &dst_format);
     dst_offset = exaGetPixmapOffset(pDst);
     dst_pitch = exaGetPixmapPitch(pDst);
@@ -383,7 +385,7 @@ I915EXAPrepareComposite(int op, PictureP
     {
 	CARD32 ss2;
 
-	BEGIN_LP_RING(26);
+	BEGIN_LP_RING(18);
 	/* color buffer
 	 * XXX: Need to add USE_FENCE if we ever tile the X Server's pixmaps or
 	 * visible screen.
@@ -391,23 +393,12 @@ I915EXAPrepareComposite(int op, PictureP
 	OUT_RING(_3DSTATE_BUF_INFO_CMD);
 	OUT_RING(BUF_3D_ID_COLOR_BACK| BUF_3D_PITCH(dst_pitch));
 	OUT_RING(BUF_3D_ADDR(dst_offset));
-	OUT_RING(MI_NOOP);
 
 	OUT_RING(_3DSTATE_DST_BUF_VARS_CMD);
 	OUT_RING(dst_format);
 
-	/* XXX: defaults */
-	OUT_RING(_3DSTATE_DFLT_Z_CMD);
-	OUT_RING(0x00000000);
-
-	OUT_RING(_3DSTATE_DFLT_DIFFUSE_CMD);
-	OUT_RING(0x00000000);
-
-	OUT_RING(_3DSTATE_DFLT_SPEC_CMD);
-	OUT_RING(0x00000000);
-
 	OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(2) |
-		 I1_LOAD_S(3) | I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 4);
+		 I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 3);
 	ss2 = S2_TEXCOORD_FMT(0, TEXCOORDFMT_2D);
 	if (pMask)
 		ss2 |= S2_TEXCOORD_FMT(1, TEXCOORDFMT_2D);
@@ -420,7 +411,6 @@ I915EXAPrepareComposite(int op, PictureP
 	ss2 |= S2_TEXCOORD_FMT(6, TEXCOORDFMT_NOT_PRESENT);
 	ss2 |= S2_TEXCOORD_FMT(7, TEXCOORDFMT_NOT_PRESENT);
 	OUT_RING(ss2);
-	OUT_RING(0x00000000); /* Disable texture coordinate wrap-shortest */
 	OUT_RING((1 << S4_POINT_WIDTH_SHIFT) | S4_LINE_WIDTH_ONE |
 		 S4_CULLMODE_NONE| S4_VFMT_XY);
 	blendctl = I915GetBlendCntl(op, pMaskPicture, pDstPicture->format);
diff --git a/src/i915_video.c b/src/i915_video.c
index 0833d50..aa192af 100644
--- a/src/i915_video.c
+++ b/src/i915_video.c
@@ -89,35 +89,9 @@ I915DisplayVideoTextured(ScrnInfoPtr pSc
     */
    *pI830->used3D |= 1 << 30;
 
-   BEGIN_LP_RING(44);
+   pI830->last_3d = LAST_3D_VIDEO;
 
-   /* invarient state */
-   OUT_RING(MI_NOOP);
-   OUT_RING(_3DSTATE_AA_CMD |
-	    AA_LINE_ECAAR_WIDTH_ENABLE | AA_LINE_ECAAR_WIDTH_1_0 |
-	    AA_LINE_REGION_WIDTH_ENABLE | AA_LINE_REGION_WIDTH_1_0);
-
-   OUT_RING(_3DSTATE_DFLT_DIFFUSE_CMD);
-   OUT_RING(0x00000000);
-
-   OUT_RING(_3DSTATE_DFLT_SPEC_CMD);
-   OUT_RING(0x00000000);
-
-   OUT_RING(_3DSTATE_DFLT_Z_CMD);
-   OUT_RING(0x00000000);
-
-   OUT_RING(_3DSTATE_COORD_SET_BINDINGS | CSB_TCB(0, 0) | CSB_TCB(1, 1) |
-	    CSB_TCB(2,2) | CSB_TCB(3,3) | CSB_TCB(4,4) | CSB_TCB(5,5) |
-	    CSB_TCB(6,6) | CSB_TCB(7,7));
-
-   OUT_RING(_3DSTATE_RASTER_RULES_CMD |
-	    ENABLE_TRI_FAN_PROVOKE_VRTX | TRI_FAN_PROVOKE_VRTX(2) |
-	    ENABLE_LINE_STRIP_PROVOKE_VRTX | LINE_STRIP_PROVOKE_VRTX(1) |
-	    ENABLE_TEXKILL_3D_4D | TEXKILL_4D |
-	    ENABLE_POINT_RASTER_RULE | OGL_POINT_RASTER_RULE);
-
-   OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | 1);
-   OUT_RING(0x00000000); /* texture coordinate wrap */
+   BEGIN_LP_RING(24);
 
    /* flush map & render cache */
    OUT_RING(MI_FLUSH | MI_WRITE_DIRTY_STATE | MI_INVALIDATE_MAP_CACHE);
@@ -132,25 +106,13 @@ I915DisplayVideoTextured(ScrnInfoPtr pSc
    OUT_RING(0x00000000);	/* yorigin, xorigin */
    OUT_RING(MI_NOOP);
 
-   /* scissor */
-   OUT_RING(_3DSTATE_SCISSOR_ENABLE_CMD | DISABLE_SCISSOR_RECT);
-   OUT_RING(_3DSTATE_SCISSOR_RECT_0_CMD);
-   OUT_RING(0x00000000);	/* ymin, xmin */
-   OUT_RING(0x00000000);	/* ymax, xmax */
-
    OUT_RING(0x7c000003);	/* unknown command */
    OUT_RING(0x7d070000);
    OUT_RING(0x00000000);
    OUT_RING(0x68000002);
 
-   /* context setup */
-   OUT_RING(_3DSTATE_MODES_4_CMD |
-	    ENABLE_LOGIC_OP_FUNC | LOGIC_OP_FUNC(LOGICOP_COPY) |
-	    ENABLE_STENCIL_WRITE_MASK | STENCIL_WRITE_MASK(0xff) |
-	    ENABLE_STENCIL_TEST_MASK | STENCIL_TEST_MASK(0xff));
-
    OUT_RING(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(2) |
-	    I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 4);
+	    I1_LOAD_S(4) | I1_LOAD_S(5) | I1_LOAD_S(6) | 3);
    s2 = S2_TEXCOORD_FMT(0, TEXCOORDFMT_2D);
    if (planar)
       s2 |= S2_TEXCOORD_FMT(1, TEXCOORDFMT_2D);
@@ -171,12 +133,6 @@ I915DisplayVideoTextured(ScrnInfoPtr pSc
 	    (1 << S6_CBUF_DST_BLEND_FACT_SHIFT) | S6_COLOR_WRITE_ENABLE |
 	    (2 << S6_TRISTRIP_PV_SHIFT));
 
-   OUT_RING(_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
-	    IAB_MODIFY_ENABLE |
-	    IAB_MODIFY_FUNC | (BLENDFUNC_ADD << IAB_FUNC_SHIFT) |
-	    IAB_MODIFY_SRC_FACTOR | (BLENDFACT_ONE << IAB_SRC_FACTOR_SHIFT) |
-	    IAB_MODIFY_DST_FACTOR | (BLENDFACT_ZERO << IAB_DST_FACTOR_SHIFT));
-
    OUT_RING(_3DSTATE_CONST_BLEND_COLOR_CMD);
    OUT_RING(0x00000000);
 
@@ -189,9 +145,6 @@ I915DisplayVideoTextured(ScrnInfoPtr pSc
    OUT_RING(LOD_PRECLAMP_OGL |
      DSTORG_HORT_BIAS(0x80) | DSTORG_VERT_BIAS(0x80) | format);
 
-   OUT_RING(_3DSTATE_STIPPLE);
-   OUT_RING(0x00000000);
-
    /* front buffer, pitch, offset */
    OUT_RING(_3DSTATE_BUF_INFO_CMD);
    OUT_RING(BUF_3D_ID_COLOR_BACK | BUF_3D_USE_FENCE |
diff-tree 0bdcce2e4541c6e441c44aad49254ad3093cedb2 (from c3666a968b1cfac61b7867874d5fbe2acd894720)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Oct 26 14:30:46 2006 -0700

    Note alignment requirement for i915 3D (texturing).

diff --git a/src/i830_exa.c b/src/i830_exa.c
index a1c7546..7de5617 100644
--- a/src/i830_exa.c
+++ b/src/i830_exa.c
@@ -457,6 +457,7 @@ I830EXAInit(ScreenPtr pScreen)
 	/* disable Xv here... */
     }
 
+    /* i915 3D requires 16 byte alignment (4k if tiled) */
     pI830->EXADriverPtr->pixmapOffsetAlign = 256;
     pI830->EXADriverPtr->pixmapPitchAlign = 64;
 
diff-tree c3666a968b1cfac61b7867874d5fbe2acd894720 (from f272f0d811f9ee059e8f8617a516e6c8bff917a1)
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Oct 26 14:30:25 2006 -0700

    Don't write unused values beyond the end of scale_units array.

diff --git a/src/i915_exa_render.c b/src/i915_exa_render.c
index 3bc2c0b..13fe3ee 100644
--- a/src/i915_exa_render.c
+++ b/src/i915_exa_render.c
@@ -332,8 +332,6 @@ I915EXAPrepareComposite(int op, PictureP
     I915GetDestFormat(pDstPicture, &dst_format);
     dst_offset = exaGetPixmapOffset(pDst);
     dst_pitch = exaGetPixmapPitch(pDst);
-    scale_units[2][0] = pDst->drawable.width;
-    scale_units[2][1] = pDst->drawable.height;
     FS_LOCALS(20);
 
     if (!I915TextureSetup(pSrcPicture, pSrc, 0))



More information about the xorg-commit mailing list