summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vivante.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/vivante.c b/src/vivante.c
index 8823896..255d27f 100644
--- a/src/vivante.c
+++ b/src/vivante.c
@@ -555,12 +555,27 @@ vivante_Composite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
CARD16 width, CARD16 height)
{
struct vivante *vivante = vivante_get_screen_priv(pDst->pDrawable->pScreen);
+ Bool ret;
- if (vivante->force_fallback ||
- !vivante_accel_Composite(op, pSrc, pMask, pDst, xSrc, ySrc,
- xMask, yMask, xDst, yDst, width, height))
- vivante_unaccel_Composite(op, pSrc, pMask, pDst, xSrc, ySrc,
- xMask, yMask, xDst, yDst, width, height);
+ if (!vivante->force_fallback) {
+ unsigned src_repeat, mask_repeat;
+
+ src_repeat = pSrc->repeat;
+ if (pMask)
+ mask_repeat = pMask->repeat;
+
+ ret = vivante_accel_Composite(op, pSrc, pMask, pDst,
+ xSrc, ySrc, xMask, yMask,
+ xDst, yDst, width, height);
+ pSrc->repeat = src_repeat;
+ if (pMask)
+ pMask->repeat = mask_repeat;
+
+ if (ret)
+ return;
+ }
+ vivante_unaccel_Composite(op, pSrc, pMask, pDst, xSrc, ySrc,
+ xMask, yMask, xDst, yDst, width, height);
}
#endif