diff --git a/ChangeLog b/ChangeLog index 9e131e7d5..9af4ff44a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-05-11 Matthias Hopf + + * hw/xfree86/xaa/xaaPict.c: (XAAComposite): + Bug #4320: Improved XAA Composite fastpath. + 2006-05-10 Adam Jackson * record/record.c: diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c index 847ccb2e0..f7c1f3dd0 100644 --- a/hw/xfree86/xaa/xaaPict.c +++ b/hw/xfree86/xaa/xaaPict.c @@ -507,12 +507,19 @@ XAAComposite (CARD8 op, XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen); XAA_RENDER_PROLOGUE(pScreen, Composite); - if((op == PictOpSrc) && !pMask && infoRec->pScrn->vtSema && - infoRec->ScreenToScreenBitBlt && - pSrc->pDrawable && - DRAWABLE_IS_ON_CARD(pSrc->pDrawable) && - DRAWABLE_IS_ON_CARD(pDst->pDrawable) && - !pSrc->transform && !pSrc->repeat && (pSrc->format == pDst->format)) + if(!pMask && infoRec->pScrn->vtSema && + infoRec->ScreenToScreenBitBlt && + pSrc->pDrawable && + DRAWABLE_IS_ON_CARD(pSrc->pDrawable) && + DRAWABLE_IS_ON_CARD(pDst->pDrawable) && + !pSrc->transform && + (!pSrc->repeat || (xSrc >= 0 && ySrc >= 0 && + xSrc+width<=pSrc->pDrawable->width && + ySrc+height<=pSrc->pDrawable->height)) && + ((op == PictOpSrc && pSrc->format == pDst->format) || + (op == PictOpOver && !pSrc->alphaMap && !pDst->alphaMap && + pSrc->format==pDst->format && + (pSrc->format==PICT_x8r8g8b8 || pSrc->format==PICT_x8b8g8r8)))) { XAACompositeSrcCopy(pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height); } else if(!pSrc->pDrawable || (pMask && !pMask->pDrawable) ||