diff options
author | Alex Deucher <alex@botch2.com> | 2008-04-14 14:10:40 -0400 |
---|---|---|
committer | Alex Deucher <alex@botch2.com> | 2008-04-14 14:10:40 -0400 |
commit | f72a4b805db26f10f69330b88459cbeae661189b (patch) | |
tree | ca9849f10a968d8c177443646ad9dbf3fa3fe4fc | |
parent | 4cd4acf1092aeb696b086a382a033aee471d2de9 (diff) |
EXA: Don't wait for 3D idle after each Composite()
wait in CompositeDone() instead
-rw-r--r-- | src/radeon_exa_funcs.c | 6 | ||||
-rw-r--r-- | src/radeon_exa_render.c | 30 |
2 files changed, 18 insertions, 18 deletions
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c index d5ee5a67..272ffa92 100644 --- a/src/radeon_exa_funcs.c +++ b/src/radeon_exa_funcs.c @@ -543,7 +543,7 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen) info->exa->PrepareComposite = FUNC_NAME(R300PrepareComposite); info->exa->Composite = FUNC_NAME(RadeonComposite); - info->exa->DoneComposite = RadeonDoneComposite; + info->exa->DoneComposite = FUNC_NAME(RadeonDoneComposite); } else if ((info->ChipFamily == CHIP_FAMILY_RV250) || (info->ChipFamily == CHIP_FAMILY_RV280) || (info->ChipFamily == CHIP_FAMILY_RS300) || @@ -554,7 +554,7 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen) info->exa->PrepareComposite = FUNC_NAME(R200PrepareComposite); info->exa->Composite = FUNC_NAME(RadeonComposite); - info->exa->DoneComposite = RadeonDoneComposite; + info->exa->DoneComposite = FUNC_NAME(RadeonDoneComposite); } else { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Render acceleration " "enabled for R100 type cards.\n"); @@ -562,7 +562,7 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen) info->exa->PrepareComposite = FUNC_NAME(R100PrepareComposite); info->exa->Composite = FUNC_NAME(RadeonComposite); - info->exa->DoneComposite = RadeonDoneComposite; + info->exa->DoneComposite = FUNC_NAME(RadeonDoneComposite); } } #endif diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c index 926f7c59..83366e88 100644 --- a/src/radeon_exa_render.c +++ b/src/radeon_exa_render.c @@ -1889,10 +1889,8 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst, RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE | (4 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } else { - if (IS_R300_3D) + if (IS_R300_3D | IS_R500_3D) BEGIN_RING(4 * vtx_count + 4); - else if (IS_R500_3D) - BEGIN_RING(4 * vtx_count + 6); else BEGIN_RING(4 * vtx_count + 2); @@ -1904,10 +1902,8 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst, } #else /* ACCEL_CP */ - if (IS_R300_3D) + if (IS_R300_3D | IS_R500_3D) BEGIN_ACCEL(2 + vtx_count * 4); - else if (IS_R500_3D) - BEGIN_ACCEL(3 + vtx_count * 4); else BEGIN_ACCEL(1 + vtx_count * 4); @@ -1936,14 +1932,9 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst, xFixedToFloat(srcTopRight.x) / info->texW[0], xFixedToFloat(srcTopRight.y) / info->texH[0], xFixedToFloat(maskTopRight.x) / info->texW[1], xFixedToFloat(maskTopRight.y) / info->texH[1]); - if (IS_R300_3D) + if (IS_R300_3D | IS_R500_3D) /* flushing is pipelined, free/finish is not */ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D); - else if (IS_R500_3D) { - /* r500 shows corruption on small things like glyphs without a 3D idle */ - OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D); - OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN); - } #ifdef ACCEL_CP ADVANCE_RING(); @@ -1955,13 +1946,22 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst, } #undef VTX_OUT -#ifdef ONLY_ONCE -static void RadeonDoneComposite(PixmapPtr pDst) +static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst) { + RINFO_FROM_SCREEN(pDst->drawable.pScreen); + ACCEL_PREAMBLE(); + ENTER_DRAW(0); + + if (IS_R500_3D) { + /* r500 shows corruption on small things like glyphs without a 3D idle */ + BEGIN_ACCEL(1); + OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN); + FINISH_ACCEL(); + } + LEAVE_DRAW(0); } -#endif /* ONLY_ONCE */ #undef ONLY_ONCE #undef FUNC_NAME |