diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c index c44502c..3e85336 100644 --- a/src/radeon_exa_render.c +++ b/src/radeon_exa_render.c @@ -2089,7 +2089,7 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst, RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE | (3 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } else if (IS_R300_3D || IS_R500_3D) { - BEGIN_RING(4 * vtx_count + 4); + BEGIN_RING(4 * vtx_count + 6); OUT_RING(CP_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2, 4 * vtx_count)); OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_QUAD_LIST | @@ -2106,7 +2106,7 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst, #else /* ACCEL_CP */ if (IS_R300_3D || IS_R500_3D) - BEGIN_ACCEL(2 + vtx_count * 4); + BEGIN_ACCEL(3 + vtx_count * 4); else BEGIN_ACCEL(1 + vtx_count * 3); @@ -2154,9 +2154,11 @@ static void FUNC_NAME(RadeonCompositeTile)(PixmapPtr pDst, xFixedToFloat(srcTopRight.x) / info->accel_state->texW[0], xFixedToFloat(srcTopRight.y) / info->accel_state->texH[0]); } - if (IS_R300_3D || IS_R500_3D) + if (IS_R300_3D || IS_R500_3D) { + OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xAAAA); /* flushing is pipelined, free/finish is not */ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D); + } #ifdef ACCEL_CP ADVANCE_RING(); diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c index c6ed472..df334ce 100644 --- a/src/radeon_textured_videofuncs.c +++ b/src/radeon_textured_videofuncs.c @@ -1564,14 +1564,14 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv (3 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } else if (IS_R300_3D || IS_R500_3D) { if (use_quad) { - BEGIN_RING(4 * vtx_count + 4); + BEGIN_RING(4 * vtx_count + 6); OUT_RING(CP_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2, 4 * vtx_count)); OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_QUAD_LIST | RADEON_CP_VC_CNTL_PRIM_WALK_RING | (4 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } else { - BEGIN_RING(3 * vtx_count + 4); + BEGIN_RING(3 * vtx_count + 6); OUT_RING(CP_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2, 3 * vtx_count)); OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_LIST | @@ -1589,9 +1589,9 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv #else /* ACCEL_CP */ if (IS_R300_3D || IS_R500_3D) { if (use_quad) - BEGIN_ACCEL(2 + vtx_count * 4); + BEGIN_ACCEL(3 + vtx_count * 4); else - BEGIN_ACCEL(2 + vtx_count * 3); + BEGIN_ACCEL(3 + vtx_count * 3); } else BEGIN_ACCEL(1 + vtx_count * 3); @@ -1685,9 +1685,11 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv } } - if (IS_R300_3D || IS_R500_3D) + if (IS_R300_3D || IS_R500_3D) { + OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xAAAA); /* flushing is pipelined, free/finish is not */ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D); + } #ifdef ACCEL_CP ADVANCE_RING();