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