diff options
author | Eric Anholt <eric@anholt.net> | 2012-11-17 13:11:13 -0800 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-11-20 11:39:47 +0000 |
commit | fa5c573455cf63090dbb6d167d4e5f1cb23daf72 (patch) | |
tree | bafe850975e27cbc3d5fbc231ca818078d02f35d /uxa | |
parent | edefb64d2b1c95b0b678cb222273ab64b2e6db2a (diff) |
uxa: Refactor early-exit paths of uxa_try_driver_composite().
Saves 200b of code at -O2.
Diffstat (limited to 'uxa')
-rw-r--r-- | uxa/uxa-render.c | 79 |
1 files changed, 28 insertions, 51 deletions
diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c index d783ea26..3678f6a5 100644 --- a/uxa/uxa-render.c +++ b/uxa/uxa-render.c @@ -965,8 +965,9 @@ uxa_try_driver_composite(CARD8 op, int xDst_copy = 0, yDst_copy = 0; int src_off_x, src_off_y, mask_off_x, mask_off_y, dst_off_x, dst_off_y; PixmapPtr pSrcPix, pMaskPix = NULL, pDstPix; - PicturePtr localSrc, localMask = NULL; + PicturePtr localSrc = NULL, localMask = NULL; PicturePtr localDst = pDst; + int ret = 0; if (uxa_screen->info->check_composite && !(*uxa_screen->info->check_composite) (op, pSrc, pMask, pDst, width, height)) @@ -1018,9 +1019,8 @@ uxa_try_driver_composite(CARD8 op, pDstPix = uxa_get_offscreen_pixmap(localDst->pDrawable, &dst_off_x, &dst_off_y); if (!pDstPix) { - if (localDst != pDst) - FreePicture(localDst, 0); - return -1; + ret = -1; + goto error; } xDst += localDst->pDrawable->x; @@ -1031,9 +1031,8 @@ uxa_try_driver_composite(CARD8 op, width, height, &xSrc, &ySrc); if (!localSrc) { - if (localDst != pDst) - FreePicture(localDst, 0); - return 0; + ret = 0; + goto error; } if (pMask) { @@ -1042,72 +1041,38 @@ uxa_try_driver_composite(CARD8 op, width, height, &xMask, &yMask); if (!localMask) { - if (localSrc != pSrc) - FreePicture(localSrc, 0); - if (localDst != pDst) - FreePicture(localDst, 0); - - return 0; + ret = 0; + goto error; } } if (!miComputeCompositeRegion(®ion, localSrc, localMask, localDst, xSrc, ySrc, xMask, yMask, xDst, yDst, width, height)) { - if (localSrc != pSrc) - FreePicture(localSrc, 0); - if (localMask && localMask != pMask) - FreePicture(localMask, 0); - if (localDst != pDst) - FreePicture(localDst, 0); - - return 1; + ret = 1; + goto error; } pSrcPix = uxa_get_offscreen_pixmap(localSrc->pDrawable, &src_off_x, &src_off_y); if (!pSrcPix) { - REGION_UNINIT(screen, ®ion); - - if (localSrc != pSrc) - FreePicture(localSrc, 0); - if (localMask && localMask != pMask) - FreePicture(localMask, 0); - if (localDst != pDst) - FreePicture(localDst, 0); - - return 0; + ret = 0; + goto error; } if (localMask) { pMaskPix = uxa_get_offscreen_pixmap(localMask->pDrawable, &mask_off_x, &mask_off_y); if (!pMaskPix) { - REGION_UNINIT(screen, ®ion); - - if (localSrc != pSrc) - FreePicture(localSrc, 0); - if (localMask && localMask != pMask) - FreePicture(localMask, 0); - if (localDst != pDst) - FreePicture(localDst, 0); - - return 0; + ret = 0; + goto error; } } if (!(*uxa_screen->info->prepare_composite) (op, localSrc, localMask, localDst, pSrcPix, pMaskPix, pDstPix)) { - REGION_UNINIT(screen, ®ion); - - if (localSrc != pSrc) - FreePicture(localSrc, 0); - if (localMask && localMask != pMask) - FreePicture(localMask, 0); - if (localDst != pDst) - FreePicture(localDst, 0); - - return -1; + ret = -1; + goto error; } if (pMask) { @@ -1156,6 +1121,18 @@ uxa_try_driver_composite(CARD8 op, } return 1; + +error: + REGION_UNINIT(screen, ®ion); + + if (localSrc && localSrc != pSrc) + FreePicture(localSrc, 0); + if (localMask && localMask != pMask) + FreePicture(localMask, 0); + if (localDst != pDst) + FreePicture(localDst, 0); + + return ret; } /** |