Wrap AddTraps in exa and damage.
This fine (and unused) function wasn't ever wrapped which made it not work under exa. (cherry picked from commit 06e7e1d0486e8c516a9b3219a2c86026f88825fc)
This commit is contained in:
parent
4c926dbac6
commit
8767fc8d47
|
@ -757,6 +757,7 @@ exaCloseScreen(int i, ScreenPtr pScreen)
|
|||
ps->Glyphs = pExaScr->SavedGlyphs;
|
||||
ps->Trapezoids = pExaScr->SavedTrapezoids;
|
||||
ps->Triangles = pExaScr->SavedTriangles;
|
||||
ps->AddTraps = pExaScr->SavedAddTraps;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -928,6 +929,9 @@ exaDriverInit (ScreenPtr pScreen,
|
|||
|
||||
pExaScr->SavedTrapezoids = ps->Trapezoids;
|
||||
ps->Trapezoids = exaTrapezoids;
|
||||
|
||||
pExaScr->SavedAddTraps = ps->AddTraps;
|
||||
ps->AddTraps = ExaCheckAddTraps;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -147,6 +147,7 @@ typedef struct {
|
|||
TrianglesProcPtr SavedTriangles;
|
||||
GlyphsProcPtr SavedGlyphs;
|
||||
TrapezoidsProcPtr SavedTrapezoids;
|
||||
AddTrapsProcPtr SavedAddTraps;
|
||||
#endif
|
||||
|
||||
Bool swappedOut;
|
||||
|
@ -331,6 +332,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
|
||||
|
|
|
@ -353,6 +353,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.
|
||||
|
|
|
@ -722,6 +722,58 @@ damageGlyphs (CARD8 op,
|
|||
damageRegionProcessPending (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
|
||||
|
||||
/**********************************************************/
|
||||
|
@ -1838,6 +1890,7 @@ DamageSetup (ScreenPtr pScreen)
|
|||
if (ps) {
|
||||
wrap (pScrPriv, ps, Glyphs, damageGlyphs);
|
||||
wrap (pScrPriv, ps, Composite, damageComposite);
|
||||
wrap (pScrPriv, ps, AddTraps, damageAddTraps);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ typedef struct _damageScrPriv {
|
|||
#ifdef RENDER
|
||||
CompositeProcPtr Composite;
|
||||
GlyphsProcPtr Glyphs;
|
||||
AddTrapsProcPtr AddTraps;
|
||||
#endif
|
||||
} DamageScrPrivRec, *DamageScrPrivPtr;
|
||||
|
||||
|
|
Loading…
Reference in New Issue