Please name the new indices in a more general way, something like EXA_PREPARE_AUX1, sometime in the future it might prove convient to have them for other purposes as well. A minor bump is probably nice, the question is, should the new indices be used on drivers claiming an older minor version? A major bump would avoid this problem, but might be overdone?
Maarten. On Sun, Feb 22, 2009 at 4:40 PM, Michel Dänzer <[email protected]> wrote: > From: Michel Dänzer <[email protected]> > > Fixes https://bugs.freedesktop.org/show_bug.cgi?id=18710 . > > Signed-off-by: Michel Dänzer <[email protected]> > --- > exa/exa.h | 4 ++++ > exa/exa_unaccel.c | 23 +++++++++++++++++++++++ > 2 files changed, 27 insertions(+), 0 deletions(-) > > A couple of doubts: > > * Can we just add new PrepareAccess indices like this, or do we need to bump > the EXA major/minor version? > * Does the separate alpha map matter for the Composite destination? > > diff --git a/exa/exa.h b/exa/exa.h > index 21a0f1a..8f5d49c 100644 > --- a/exa/exa.h > +++ b/exa/exa.h > @@ -672,6 +672,10 @@ typedef struct _ExaDriver { > * from. > */ > #define EXA_PREPARE_MASK 2 > + > + #define EXA_PREPARE_ALPHAMAP_DEST 3 > + #define EXA_PREPARE_ALPHAMAP_SRC 4 > + #define EXA_PREPARE_ALPHAMAP_MASK 5 > /** @} */ > > /** > diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c > index c821f0d..4530e15 100644 > --- a/exa/exa_unaccel.c > +++ b/exa/exa_unaccel.c > @@ -387,6 +387,7 @@ ExaCheckComposite (CARD8 op, > PictureScreenPtr ps = GetPictureScreen(pScreen); > #endif /* RENDER */ > ExaScreenPriv(pScreen); > + ExaPixmapPrivPtr pExaDstAlphaPix = NULL, pExaMaskAlphaPix = NULL, > pExaSrcAlphaPix = NULL; > RegionRec region; > int xoff, yoff; > > @@ -408,13 +409,29 @@ ExaCheckComposite (CARD8 op, > } else > exaPrepareAccess (pDst->pDrawable, EXA_PREPARE_DEST); > > + if (pDst->alphaMap && pDst->alphaMap->pDrawable) { > + pExaDstAlphaPix = > + ExaGetPixmapPriv(exaGetDrawablePixmap(pDst->alphaMap->pDrawable)); > + exaPrepareAccess(pDst->alphaMap->pDrawable, > EXA_PREPARE_ALPHAMAP_DEST); > + } > + > EXA_FALLBACK(("from picts %p/%p to pict %p\n", > pSrc, pMask, pDst)); > > if (pSrc->pDrawable != NULL) > exaPrepareAccess (pSrc->pDrawable, EXA_PREPARE_SRC); > + if (pSrc->alphaMap && pSrc->alphaMap->pDrawable) { > + pExaSrcAlphaPix = > + ExaGetPixmapPriv(exaGetDrawablePixmap(pSrc->alphaMap->pDrawable)); > + exaPrepareAccess(pSrc->alphaMap->pDrawable, EXA_PREPARE_ALPHAMAP_SRC); > + } > if (pMask && pMask->pDrawable != NULL) > exaPrepareAccess (pMask->pDrawable, EXA_PREPARE_MASK); > + if (pMask && pMask->alphaMap && pMask->alphaMap->pDrawable) { > + pExaMaskAlphaPix = > + > ExaGetPixmapPriv(exaGetDrawablePixmap(pMask->alphaMap->pDrawable)); > + exaPrepareAccess(pMask->alphaMap->pDrawable, > EXA_PREPARE_ALPHAMAP_MASK); > + } > #ifdef RENDER > swap(pExaScr, ps, Composite); > ps->Composite (op, > @@ -433,9 +450,15 @@ ExaCheckComposite (CARD8 op, > #endif /* RENDER */ > if (pMask && pMask->pDrawable != NULL) > exaFinishAccess (pMask->pDrawable, EXA_PREPARE_MASK); > + if (pExaMaskAlphaPix) > + exaFinishAccess(pMask->alphaMap->pDrawable, > EXA_PREPARE_ALPHAMAP_MASK); > if (pSrc->pDrawable != NULL) > exaFinishAccess (pSrc->pDrawable, EXA_PREPARE_SRC); > + if (pExaSrcAlphaPix) > + exaFinishAccess(pSrc->alphaMap->pDrawable, EXA_PREPARE_ALPHAMAP_SRC); > exaFinishAccess (pDst->pDrawable, EXA_PREPARE_DEST); > + if (pExaDstAlphaPix) > + exaFinishAccess(pDst->alphaMap->pDrawable, EXA_PREPARE_ALPHAMAP_DEST); > > REGION_UNINIT(pScreen, ®ion); > } > -- > 1.6.2.rc1 > > > _______________________________________________ > xorg-devel mailing list > [email protected] > http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
