From f1e6c73be073c8816319104b2fde329bc286f5ec Mon Sep 17 00:00:00 2001 From: Connor Behan Date: Mon, 24 Aug 2015 13:48:29 -0400 Subject: Composite fixup A driver like this that tries to composite a lot will definitely need to avoid crashing for solid pictures. Signed-off-by: Connor Behan --- src/mga_exa.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mga_exa.c b/src/mga_exa.c index a011c91..c4e4d90 100644 --- a/src/mga_exa.c +++ b/src/mga_exa.c @@ -318,6 +318,11 @@ mgaGetTexFormat(PicturePtr pPict) static Bool mgaCheckSourceTexture(int tmu, PicturePtr pPict) { + if (!pPict->pDrawable) { + DEBUG_MSG(("Solid / gradient pictures not supported\n")); + return FALSE; + } + int w = pPict->pDrawable->width; int h = pPict->pDrawable->height; @@ -354,7 +359,7 @@ static Bool mgaCheckComposite(int op, PicturePtr pSrcPict, PicturePtr pMaskPict, PicturePtr pDstPict) { - MGAPtr pMga = xf86ScreenToScrn(pSrcPict->pDrawable->pScreen)->driverPrivate; + MGAPtr pMga = xf86ScreenToScrn(pDstPict->pDrawable->pScreen)->driverPrivate; if (op >= sizeof(mgaBlendOp) / sizeof(mgaBlendOp[0])) { DEBUG_MSG(("unsupported op %x\n", op)); @@ -521,6 +526,7 @@ mgaPrepareComposite(int op, PicturePtr pSrcPict, PicturePtr pMaskPict, { PMGA(pDst); CARD32 fcol = 0xff000000, ds0 = 0, ds1 = 0, cmd, blendcntl; + if (!pSrc || !pSrcPict->pDrawable) return FALSE; mgaSetup(pMga, pDst, pDstPict, 2); OUTREG(MGAREG_DSTORG, exaGetPixmapOffset(pDst)); -- cgit v1.2.3