37 lines
1.2 KiB
Diff
37 lines
1.2 KiB
Diff
|
A driver like this that tries to composite a lot will definitely need to
|
||
|
avoid crashing for solid pictures.
|
||
|
|
||
|
Signed-off-by: Connor Behan <connor.behan@gmail.com>
|
||
|
|
||
|
--- src/mga_exa.c
|
||
|
+++ 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));
|