xf86-video-ati: Branch 'master' - 4 commits

Alex Deucher agd5f at kemper.freedesktop.org
Tue Dec 2 22:40:45 PST 2008


 src/radeon.h                     |   35 ++++++++++++++++++++++++++
 src/radeon_exa.c                 |   34 -------------------------
 src/radeon_exa_render.c          |   52 +++++++++++++++++++--------------------
 src/radeon_textured_videofuncs.c |   44 ++++++++++++++++++---------------
 4 files changed, 85 insertions(+), 80 deletions(-)

New commits:
commit 927aee181f3637bda1b761caf93fbc0652e1207b
Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Wed Dec 3 01:39:38 2008 -0500

    Only flush IB when direct rendering is enabled

diff --git a/src/radeon.h b/src/radeon.h
index 227ffc6..902d1c0 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1303,7 +1303,7 @@ do {									\
 	case EXA_ENGINEMODE_2D:						\
 	    break;							\
 	}								\
-	if (flush)                                                      \
+	if (flush && info->directRenderingEnabled)                      \
 	    RADEONCPFlushIndirect(pScrn, 1);                            \
         info->accel_state->engineMode = EXA_ENGINEMODE_2D;              \
 } while (0);
@@ -1318,7 +1318,7 @@ do {									\
 	case EXA_ENGINEMODE_3D:						\
 	    break;							\
 	}								\
-	if (flush)                                                      \
+	if (flush && info->directRenderingEnabled)                      \
 	    RADEONCPFlushIndirect(pScrn, 1);                            \
         info->accel_state->engineMode = EXA_ENGINEMODE_3D;              \
 } while (0);
commit ca74ebf8813b7fab8d08465ef9600f001c948e94
Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Tue Dec 2 22:26:21 2008 -0500

    move 3d state init after RADEON_SWITCH_TO_3D()

diff --git a/src/radeon.h b/src/radeon.h
index 605b057..227ffc6 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1292,6 +1292,41 @@ do {									\
 
 #endif /* XF86DRI */
 
+#if defined(XF86DRI) && defined(USE_EXA)
+#define RADEON_SWITCH_TO_2D()						\
+do {									\
+	uint32_t flush = 0;                                             \
+	switch (info->accel_state->engineMode) {			\
+	case EXA_ENGINEMODE_UNKNOWN:					\
+	case EXA_ENGINEMODE_3D:						\
+	    flush = 1;                                                  \
+	case EXA_ENGINEMODE_2D:						\
+	    break;							\
+	}								\
+	if (flush)                                                      \
+	    RADEONCPFlushIndirect(pScrn, 1);                            \
+        info->accel_state->engineMode = EXA_ENGINEMODE_2D;              \
+} while (0);
+
+#define RADEON_SWITCH_TO_3D()						\
+do {									\
+	uint32_t flush = 0;						\
+	switch (info->accel_state->engineMode) {			\
+	case EXA_ENGINEMODE_UNKNOWN:					\
+	case EXA_ENGINEMODE_2D:						\
+	    flush = 1;                                                  \
+	case EXA_ENGINEMODE_3D:						\
+	    break;							\
+	}								\
+	if (flush)                                                      \
+	    RADEONCPFlushIndirect(pScrn, 1);                            \
+        info->accel_state->engineMode = EXA_ENGINEMODE_3D;              \
+} while (0);
+#else
+#define RADEON_SWITCH_TO_2D()
+#define RADEON_SWITCH_TO_3D()
+#endif
+
 static __inline__ void RADEON_MARK_SYNC(RADEONInfoPtr info, ScrnInfoPtr pScrn)
 {
 #ifdef USE_EXA
diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 6d31a13..04c097b 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -295,41 +295,6 @@ static void RADEONFinishAccess(PixmapPtr pPix, int index)
 
 #endif /* X_BYTE_ORDER == X_BIG_ENDIAN */
 
-#ifdef XF86DRI
-#define RADEON_SWITCH_TO_2D()						\
-do {									\
-	uint32_t flush = 0;                                             \
-	switch (info->accel_state->engineMode) {			\
-	case EXA_ENGINEMODE_UNKNOWN:					\
-	case EXA_ENGINEMODE_3D:						\
-	    flush = 1;                                                  \
-	case EXA_ENGINEMODE_2D:						\
-	    break;							\
-	}								\
-	if (flush)                                                      \
-	    RADEONCPFlushIndirect(pScrn, 1);                            \
-        info->accel_state->engineMode = EXA_ENGINEMODE_2D;              \
-} while (0);
-
-#define RADEON_SWITCH_TO_3D()						\
-do {									\
-	uint32_t flush = 0;						\
-	switch (info->accel_state->engineMode) {			\
-	case EXA_ENGINEMODE_UNKNOWN:					\
-	case EXA_ENGINEMODE_2D:						\
-	    flush = 1;                                                  \
-	case EXA_ENGINEMODE_3D:						\
-	    break;							\
-	}								\
-	if (flush)                                                      \
-	    RADEONCPFlushIndirect(pScrn, 1);                            \
-        info->accel_state->engineMode = EXA_ENGINEMODE_3D;              \
-} while (0);
-#else
-#define RADEON_SWITCH_TO_2D()
-#define RADEON_SWITCH_TO_3D()
-#endif
-
 #define ENTER_DRAW(x) TRACE
 #define LEAVE_DRAW(x) TRACE
 /***********************************************************************/
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 68a7a76..c75c6a5 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -527,9 +527,6 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
 
     TRACE;
 
-    if (!info->accel_state->XInited3D)
-	RADEONInit3DEngine(pScrn);
-
     if (!RADEONGetDestFormat(pDstPicture, &dst_format))
 	return FALSE;
 
@@ -561,6 +558,9 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
 
     RADEON_SWITCH_TO_3D();
 
+    if (!info->accel_state->XInited3D)
+	RADEONInit3DEngine(pScrn);
+
     if (!FUNC_NAME(R100TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
@@ -830,9 +830,6 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
 
     TRACE;
 
-    if (!info->accel_state->XInited3D)
-	RADEONInit3DEngine(pScrn);
-
     if (!RADEONGetDestFormat(pDstPicture, &dst_format))
 	return FALSE;
 
@@ -862,6 +859,9 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
 
     RADEON_SWITCH_TO_3D();
 
+    if (!info->accel_state->XInited3D)
+	RADEONInit3DEngine(pScrn);
+
     if (!FUNC_NAME(R200TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
@@ -1194,9 +1194,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
 
     TRACE;
 
-    if (!info->accel_state->XInited3D)
-	RADEONInit3DEngine(pScrn);
-
     if (!R300GetDestFormat(pDstPicture, &dst_format))
 	return FALSE;
 
@@ -1226,6 +1223,9 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
 
     RADEON_SWITCH_TO_3D();
 
+    if (!info->accel_state->XInited3D)
+	RADEONInit3DEngine(pScrn);
+
     if (!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     txenable = R300_TEX_0_ENABLE;
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index 8a4a31d..7a4ffc2 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -124,23 +124,29 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
     dstyoff = 0;
 #endif
 
+#ifdef USE_EXA
+    if (info->useEXA) {
+	RADEON_SWITCH_TO_3D();
+    } else
+#endif
+	{
+	    BEGIN_ACCEL(2);
+	    if (IS_R300_3D || IS_R500_3D)
+		OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D);
+	    else
+		OUT_ACCEL_REG(RADEON_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH);
+	    /* We must wait for 3d to idle, in case source was just written as a dest. */
+	    OUT_ACCEL_REG(RADEON_WAIT_UNTIL,
+			  RADEON_WAIT_HOST_IDLECLEAN |
+			  RADEON_WAIT_2D_IDLECLEAN |
+			  RADEON_WAIT_3D_IDLECLEAN |
+			  RADEON_WAIT_DMA_GUI_IDLE);
+	    FINISH_ACCEL();
+	}
+
     if (!info->accel_state->XInited3D)
 	RADEONInit3DEngine(pScrn);
 
-    /* we can probably improve this */
-    BEGIN_ACCEL(2);
-    if (IS_R300_3D || IS_R500_3D)
-	OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D);
-    else
-	OUT_ACCEL_REG(RADEON_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH);
-    /* We must wait for 3d to idle, in case source was just written as a dest. */
-    OUT_ACCEL_REG(RADEON_WAIT_UNTIL,
-		  RADEON_WAIT_HOST_IDLECLEAN |
-		  RADEON_WAIT_2D_IDLECLEAN |
-		  RADEON_WAIT_3D_IDLECLEAN |
-		  RADEON_WAIT_DMA_GUI_IDLE);
-    FINISH_ACCEL();
-
     if (pPriv->bicubic_enabled)
 	vtx_count = 6;
     else
commit fc079c5267baf431bbecee7744e484783d393152
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Dec 2 22:11:57 2008 -0500

    Don't mix 2D and 3D in the same IB
    
    fix from radeon-gem-cs

diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 0f86fdd..6d31a13 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -295,39 +295,40 @@ static void RADEONFinishAccess(PixmapPtr pPix, int index)
 
 #endif /* X_BYTE_ORDER == X_BIG_ENDIAN */
 
+#ifdef XF86DRI
 #define RADEON_SWITCH_TO_2D()						\
 do {									\
-	uint32_t wait_until = 0;			\
-	BEGIN_ACCEL(1);							\
+	uint32_t flush = 0;                                             \
 	switch (info->accel_state->engineMode) {			\
 	case EXA_ENGINEMODE_UNKNOWN:					\
-	    wait_until |= RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_2D_IDLECLEAN;	\
 	case EXA_ENGINEMODE_3D:						\
-	    wait_until |= RADEON_WAIT_3D_IDLECLEAN;			\
+	    flush = 1;                                                  \
 	case EXA_ENGINEMODE_2D:						\
 	    break;							\
 	}								\
-	OUT_ACCEL_REG(RADEON_WAIT_UNTIL, wait_until);			\
-	FINISH_ACCEL();							\
+	if (flush)                                                      \
+	    RADEONCPFlushIndirect(pScrn, 1);                            \
         info->accel_state->engineMode = EXA_ENGINEMODE_2D;              \
 } while (0);
 
 #define RADEON_SWITCH_TO_3D()						\
 do {									\
-	uint32_t wait_until = 0;			\
-	BEGIN_ACCEL(1);							\
+	uint32_t flush = 0;						\
 	switch (info->accel_state->engineMode) {			\
 	case EXA_ENGINEMODE_UNKNOWN:					\
-	    wait_until |= RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_3D_IDLECLEAN;	\
 	case EXA_ENGINEMODE_2D:						\
-	    wait_until |= RADEON_WAIT_2D_IDLECLEAN | RADEON_WAIT_DMA_GUI_IDLE;		\
+	    flush = 1;                                                  \
 	case EXA_ENGINEMODE_3D:						\
 	    break;							\
 	}								\
-	OUT_ACCEL_REG(RADEON_WAIT_UNTIL, wait_until);			\
-	FINISH_ACCEL();							\
+	if (flush)                                                      \
+	    RADEONCPFlushIndirect(pScrn, 1);                            \
         info->accel_state->engineMode = EXA_ENGINEMODE_3D;              \
 } while (0);
+#else
+#define RADEON_SWITCH_TO_2D()
+#define RADEON_SWITCH_TO_3D()
+#endif
 
 #define ENTER_DRAW(x) TRACE
 #define LEAVE_DRAW(x) TRACE
commit 678693aabd0b4c1812ab44bf5abb4c8394b254bb
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Dec 2 22:02:21 2008 -0500

    Stability fixes from radeon-gem-cs

diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index e5cc196..68a7a76 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -559,6 +559,8 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
     if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
 	return FALSE;
 
+    RADEON_SWITCH_TO_3D();
+
     if (!FUNC_NAME(R100TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
@@ -571,8 +573,6 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
 	info->accel_state->is_transform[1] = FALSE;
     }
 
-    RADEON_SWITCH_TO_3D();
-
     BEGIN_ACCEL(8);
     OUT_ACCEL_REG(RADEON_PP_CNTL, pp_cntl);
     OUT_ACCEL_REG(RADEON_RB3D_CNTL, dst_format | RADEON_ALPHA_BLEND_ENABLE);
@@ -860,6 +860,8 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
     if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
 	return FALSE;
 
+    RADEON_SWITCH_TO_3D();
+
     if (!FUNC_NAME(R200TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
@@ -872,8 +874,6 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
 	info->accel_state->is_transform[1] = FALSE;
     }
 
-    RADEON_SWITCH_TO_3D();
-
     BEGIN_ACCEL(11);
 
     OUT_ACCEL_REG(RADEON_PP_CNTL, pp_cntl);
@@ -1224,6 +1224,8 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
     if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE))
 	return FALSE;
 
+    RADEON_SWITCH_TO_3D();
+
     if (!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0))
 	return FALSE;
     txenable = R300_TEX_0_ENABLE;
@@ -1236,8 +1238,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
 	info->accel_state->is_transform[1] = FALSE;
     }
 
-    RADEON_SWITCH_TO_3D();
-
     /* setup the VAP */
     if (info->accel_state->has_tcl) {
 	if (pMask)
@@ -1845,11 +1845,16 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
 
     FINISH_ACCEL();
 
+    BEGIN_ACCEL(1);
+    if (info->accel_state->has_mask)
+	OUT_ACCEL_REG(R300_VAP_VTX_SIZE, 6);
+    else
+	OUT_ACCEL_REG(R300_VAP_VTX_SIZE, 4);
+    FINISH_ACCEL();
+
     return TRUE;
 }
 
-#define VTX_COUNT_MASK 6
-#define VTX_COUNT 4
 
 #ifdef ACCEL_CP
 
@@ -1955,15 +1960,9 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst,
     }
 
     if (info->accel_state->has_mask)
-	vtx_count = VTX_COUNT_MASK;
+	vtx_count = 6;
     else
-	vtx_count = VTX_COUNT;
-
-    if (IS_R300_3D || IS_R500_3D) {
-	BEGIN_ACCEL(1);
-	OUT_ACCEL_REG(R300_VAP_VTX_SIZE, vtx_count);
-	FINISH_ACCEL();
-    }
+	vtx_count = 4;
 
 #ifdef ACCEL_CP
     if (info->ChipFamily < CHIP_FAMILY_R200) {
@@ -2127,7 +2126,8 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
     ENTER_DRAW(0);
 
     if (IS_R300_3D || IS_R500_3D) {
-	BEGIN_ACCEL(2);
+	BEGIN_ACCEL(3);
+	OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xAAAA);
 	OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_RB3D_DC_FLUSH_ALL);
     } else
 	BEGIN_ACCEL(1);
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index c5ad0e1..8a4a31d 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -45,9 +45,6 @@
 #endif
 #endif
 
-#define VTX_DWORD_COUNT_FILTER 6
-#define VTX_DWORD_COUNT 4
-
 #ifdef ACCEL_CP
 
 #define VTX_OUT_FILTER(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY)	\
@@ -145,9 +142,9 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
     FINISH_ACCEL();
 
     if (pPriv->bicubic_enabled)
-	vtx_count = VTX_DWORD_COUNT_FILTER;
+	vtx_count = 6;
     else
-	vtx_count = VTX_DWORD_COUNT;
+	vtx_count = 4;
 
     if (IS_R300_3D || IS_R500_3D) {
 	uint32_t output_fmt;
@@ -1237,7 +1234,8 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
     }
 
     if (IS_R300_3D || IS_R500_3D) {
-	BEGIN_ACCEL(2);
+	BEGIN_ACCEL(3);
+	OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xAAAA);
 	OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_RB3D_DC_FLUSH_ALL);
     } else
 	BEGIN_ACCEL(1);


More information about the xorg-commit mailing list