Wrap AddTraps in exa and damage.
This fine (and unused) function wasn't ever wrapped which made it not work under exa.
This commit is contained in:
parent
436a549e73
commit
06e7e1d048
|
@ -700,6 +700,7 @@ exaCloseScreen(int i, ScreenPtr pScreen)
|
|||
if (ps) {
|
||||
ps->Composite = pExaScr->SavedComposite;
|
||||
ps->Trapezoids = pExaScr->SavedTrapezoids;
|
||||
ps->AddTraps = pExaScr->SavedAddTraps;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -863,6 +864,9 @@ exaDriverInit (ScreenPtr pScreen,
|
|||
|
||||
pExaScr->SavedTrapezoids = ps->Trapezoids;
|
||||
ps->Trapezoids = exaTrapezoids;
|
||||
|
||||
pExaScr->SavedAddTraps = ps->AddTraps;
|
||||
ps->AddTraps = ExaCheckAddTraps;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -113,6 +113,7 @@ typedef struct {
|
|||
TrianglesProcPtr SavedTriangles;
|
||||
GlyphsProcPtr SavedGlyphs;
|
||||
TrapezoidsProcPtr SavedTrapezoids;
|
||||
AddTrapsProcPtr SavedAddTraps;
|
||||
#endif
|
||||
|
||||
Bool swappedOut;
|
||||
|
@ -291,6 +292,13 @@ ExaCheckGetSpans (DrawablePtr pDrawable,
|
|||
int nspans,
|
||||
char *pdstStart);
|
||||
|
||||
void
|
||||
ExaCheckAddTraps (PicturePtr pPicture,
|
||||
INT16 x_off,
|
||||
INT16 y_off,
|
||||
int ntrap,
|
||||
xTrap *traps);
|
||||
|
||||
/* exa_accel.c */
|
||||
|
||||
static _X_INLINE Bool
|
||||
|
|
|
@ -350,6 +350,20 @@ ExaCheckComposite (CARD8 op,
|
|||
REGION_UNINIT(pScreen, ®ion);
|
||||
}
|
||||
|
||||
void
|
||||
ExaCheckAddTraps (PicturePtr pPicture,
|
||||
INT16 x_off,
|
||||
INT16 y_off,
|
||||
int ntrap,
|
||||
xTrap *traps)
|
||||
{
|
||||
EXA_FALLBACK(("to pict %p (%c)\n",
|
||||
exaDrawableLocation(pPicture->pDrawable)));
|
||||
exaPrepareAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
|
||||
fbAddTraps (pPicture, x_off, y_off, ntrap, traps);
|
||||
exaFinishAccess(pPicture->pDrawable, EXA_PREPARE_DEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the 0,0 pixel of a pixmap. Used for doing solid fills of tiled pixmaps
|
||||
* that happen to be 1x1. Pixmap must be at least 8bpp.
|
||||
|
|
|
@ -655,6 +655,58 @@ damageGlyphs (CARD8 op,
|
|||
damageReportPostOp (pDst->pDrawable);
|
||||
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
|
||||
}
|
||||
|
||||
static void
|
||||
damageAddTraps (PicturePtr pPicture,
|
||||
INT16 x_off,
|
||||
INT16 y_off,
|
||||
int ntrap,
|
||||
xTrap *traps)
|
||||
{
|
||||
ScreenPtr pScreen = pPicture->pDrawable->pScreen;
|
||||
PictureScreenPtr ps = GetPictureScreen(pScreen);
|
||||
damageScrPriv(pScreen);
|
||||
|
||||
if (checkPictureDamage (pPicture))
|
||||
{
|
||||
BoxRec box;
|
||||
int i;
|
||||
int x, y;
|
||||
xTrap *t = traps;
|
||||
|
||||
box.x1 = 32767;
|
||||
box.y1 = 32767;
|
||||
box.x2 = -32767;
|
||||
box.y2 = -32767;
|
||||
x = pPicture->pDrawable->x + x_off;
|
||||
y = pPicture->pDrawable->y + y_off;
|
||||
for (i = 0; i < ntrap; i++)
|
||||
{
|
||||
pixman_fixed_t l = min (t->top.l, t->bot.l);
|
||||
pixman_fixed_t r = max (t->top.r, t->bot.r);
|
||||
int x1 = x + pixman_fixed_to_int (l);
|
||||
int x2 = x + pixman_fixed_to_int (pixman_fixed_ceil (r));
|
||||
int y1 = y + pixman_fixed_to_int (t->top.y);
|
||||
int y2 = y + pixman_fixed_to_int (pixman_fixed_ceil (t->bot.y));
|
||||
|
||||
if (x1 < box.x1)
|
||||
box.x1 = x1;
|
||||
if (x2 > box.x2)
|
||||
box.x2 = x2;
|
||||
if (y1 < box.y1)
|
||||
box.y1 = y1;
|
||||
if (y2 > box.y2)
|
||||
box.y2 = y2;
|
||||
}
|
||||
TRIM_PICTURE_BOX (box, pPicture);
|
||||
if (BOX_NOT_EMPTY(box))
|
||||
damageDamageBox (pPicture->pDrawable, &box, pPicture->subWindowMode);
|
||||
}
|
||||
unwrap (pScrPriv, ps, AddTraps);
|
||||
(*ps->AddTraps) (pPicture, x_off, y_off, ntrap, traps);
|
||||
damageReportPostOp (pPicture->pDrawable);
|
||||
wrap (pScrPriv, ps, AddTraps, damageAddTraps);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**********************************************************/
|
||||
|
@ -1767,6 +1819,7 @@ DamageSetup (ScreenPtr pScreen)
|
|||
if (ps) {
|
||||
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
|
||||
wrap (pScrPriv, ps, Composite, damageComposite);
|
||||
wrap (pScrPriv, ps, AddTraps, damageAddTraps);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ typedef struct _damageScrPriv {
|
|||
#ifdef RENDER
|
||||
CompositeProcPtr Composite;
|
||||
GlyphsProcPtr Glyphs;
|
||||
AddTrapsProcPtr AddTraps;
|
||||
#endif
|
||||
} DamageScrPrivRec, *DamageScrPrivPtr;
|
||||
|
||||
|
|
Loading…
Reference in New Issue