[Nouveau] [PATCH] Reflow logic to make it easier to follow

Francisco Jerez currojerez at riseup.net
Fri Jul 30 03:52:17 PDT 2010


Tomas Carnecky <tom at dbservice.com> writes:

> The control flow was:
>
> if (!y) {
>   ppix = ...
> }
>
> if (y) {
>   ...
> } else if (x) {
>   use ppix for something
> } else {
>   use ppix for something
> }
>
> Merge the if(!y) block with the two else branches. This avoids
> a false-positive in the clang static analyzer, it can't know that
> !y and x are mutually exclusive.
>
> The result looks something like this:
>
> if (y) {
>   ...
> } else {
>   ppix = ...
>   if (x) {
>     use ppix for something
>   } else {
>     use ppix for something
>   }
> }

This patch makes the code go above the 80-column limit, that's probably
the reason it was structured that way.

>
> Signed-off-by: Tomas Carnecky <tom at dbservice.com>
> ---
>
> This patch actually compiles. There are still a couple clang warnings, but
> those are dead assignments and one dead initialization. If there is interest
> I can send patches for those as well. The clang results can be viewed at
> http://stuff.caurea.org/clang-static-analyzer/nouveau
>
Sure, patches are welcome. I wouldn't bother with the warnings found in
the overlay code though, those functions are currently unused and
they'll eventually be moved to the kernel.

>  src/nouveau_xv.c |  114 ++++++++++++++++++++++++++----------------------------
>  1 files changed, 55 insertions(+), 59 deletions(-)
>
> diff --git a/src/nouveau_xv.c b/src/nouveau_xv.c
> index 4437aa6..eb43207 100644
> --- a/src/nouveau_xv.c
> +++ b/src/nouveau_xv.c
> @@ -920,7 +920,6 @@ NVPutImage(ScrnInfoPtr pScrn, short src_x, short src_y, short drw_x,
>  {
>  	NVPortPrivPtr pPriv = (NVPortPrivPtr)data;
>  	NVPtr pNv = NVPTR(pScrn);
> -	PixmapPtr ppix;
>  	/* source box */
>  	INT32 xa = 0, xb = 0, ya = 0, yb = 0;
>  	/* size to allocate in VRAM and in GART respectively */
> @@ -1249,11 +1248,29 @@ CPU_copy:
>  	if (pPriv->currentHostBuffer != NO_PRIV_HOST_BUFFER_AVAILABLE)
>  		pPriv->currentHostBuffer ^= 1;
>  
> -	/* If we're not using the hw overlay, we're rendering into a pixmap
> -	 * and need to take a couple of additional steps...
> -	 */
> -	if (!(action_flags & USE_OVERLAY)) {
> -		ppix = NVGetDrawablePixmap(pDraw);
> +	if (action_flags & USE_OVERLAY) {
> +		if (pNv->Architecture == NV_ARCH_04) {
> +			NV04PutOverlayImage(pScrn, pPriv->video_mem, offset,
> +					    id, dstPitch, &dstBox, 0, 0,
> +					    xb, yb, npixels, nlines,
> +					    src_w, src_h, drw_w, drw_h,
> +					    clipBoxes);
> +		} else {
> +			NV10PutOverlayImage(pScrn, pPriv->video_mem, offset,
> +					    uv_offset, id, dstPitch, &dstBox,
> +					    0, 0, xb, yb,
> +					    npixels, nlines, src_w, src_h,
> +					    drw_w, drw_h, clipBoxes);
> +		}
> +
> +		pPriv->currentBuffer ^= 1;
> +	} else {
> +		int ret = BadImplementation;
> +
> +		/* If we're not using the hw overlay, we're rendering into a pixmap
> +		 * and need to take a couple of additional steps...
> +		 */
> +		PixmapPtr ppix = NVGetDrawablePixmap(pDraw);
>  
>  		/* Ensure pixmap is in offscreen memory */
>  		pNv->exa_force_cp = TRUE;
> @@ -1274,69 +1291,48 @@ CPU_copy:
>  			dstBox.y2 -= ppix->screen_y;
>  		}
>  #endif
> -	}
> -
> -	if (action_flags & USE_OVERLAY) {
> -		if (pNv->Architecture == NV_ARCH_04) {
> -			NV04PutOverlayImage(pScrn, pPriv->video_mem, offset,
> -					    id, dstPitch, &dstBox, 0, 0,
> -					    xb, yb, npixels, nlines,
> -					    src_w, src_h, drw_w, drw_h,
> -					    clipBoxes);
> -		} else {
> -			NV10PutOverlayImage(pScrn, pPriv->video_mem, offset,
> -					    uv_offset, id, dstPitch, &dstBox,
> -					    0, 0, xb, yb,
> -					    npixels, nlines, src_w, src_h,
> -					    drw_w, drw_h, clipBoxes);
> -		}
>  
> -		pPriv->currentBuffer ^= 1;
> -	} else 
> -	if (action_flags & USE_TEXTURE) {
> -		int ret = BadImplementation;
>  
> -		if (pNv->Architecture == NV_ARCH_30) {
> -			ret = NV30PutTextureImage(pScrn, pPriv->video_mem,
> -						  offset, uv_offset,
> -						  id, dstPitch, &dstBox, 0, 0,
> -						  xb, yb, npixels, nlines,
> -						  src_w, src_h, drw_w, drw_h,
> -						  clipBoxes, ppix, pPriv);
> -		} else
> -		if (pNv->Architecture == NV_ARCH_40) {
> -			ret = NV40PutTextureImage(pScrn, pPriv->video_mem, 
> -						  offset, uv_offset,
> -						  id, dstPitch, &dstBox, 0, 0,
> -						  xb, yb, npixels, nlines,
> -						  src_w, src_h, drw_w, drw_h,
> -						  clipBoxes, ppix, pPriv);
> -		} else
> -		if (pNv->Architecture == NV_ARCH_50) {
> -			ret = nv50_xv_image_put(pScrn, pPriv->video_mem,
> -						offset, uv_offset,
> -						id, dstPitch, &dstBox, 0, 0,
> -						xb, yb, npixels, nlines,
> -						src_w, src_h, drw_w, drw_h,
> -						clipBoxes, ppix, pPriv);
> +		if (action_flags & USE_TEXTURE) {
> +			if (pNv->Architecture == NV_ARCH_30) {
> +				ret = NV30PutTextureImage(pScrn, pPriv->video_mem,
> +							  offset, uv_offset,
> +							  id, dstPitch, &dstBox, 0, 0,
> +							  xb, yb, npixels, nlines,
> +							  src_w, src_h, drw_w, drw_h,
> +							  clipBoxes, ppix, pPriv);
> +			} else
> +			if (pNv->Architecture == NV_ARCH_40) {
> +				ret = NV40PutTextureImage(pScrn, pPriv->video_mem, 
> +							  offset, uv_offset,
> +							  id, dstPitch, &dstBox, 0, 0,
> +							  xb, yb, npixels, nlines,
> +							  src_w, src_h, drw_w, drw_h,
> +							  clipBoxes, ppix, pPriv);
> +			} else
> +			if (pNv->Architecture == NV_ARCH_50) {
> +				ret = nv50_xv_image_put(pScrn, pPriv->video_mem,
> +							offset, uv_offset,
> +							id, dstPitch, &dstBox, 0, 0,
> +							xb, yb, npixels, nlines,
> +							src_w, src_h, drw_w, drw_h,
> +							clipBoxes, ppix, pPriv);
> +			}
> +		} else {
> +			ret = NVPutBlitImage(pScrn, pPriv->video_mem, offset, id,
> +					     dstPitch, &dstBox, 0, 0, xb, yb, npixels,
> +					     nlines, src_w, src_h, drw_w, drw_h,
> +					     clipBoxes, ppix);
>  		}
>  
>  		if (ret != Success)
>  			return ret;
> -	} else {
> -		ret = NVPutBlitImage(pScrn, pPriv->video_mem, offset, id,
> -				     dstPitch, &dstBox, 0, 0, xb, yb, npixels,
> -				     nlines, src_w, src_h, drw_w, drw_h,
> -				     clipBoxes, ppix);
> -		if (ret != Success)
> -			return ret;
> -	}
>  
>  #ifdef COMPOSITE
> -	/* Damage tracking */
> -	if (!(action_flags & USE_OVERLAY))
> +		/* Damage tracking */
>  		DamageDamageRegion(&ppix->drawable, clipBoxes);
>  #endif
> +	}
>  
>  	return Success;
>  }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20100730/3405aba8/attachment.pgp>


More information about the Nouveau mailing list