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

Tomas Carnecky tom at dbservice.com
Thu Jul 29 15:06:03 PDT 2010


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
  }
}

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

 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;
 }
-- 
1.7.2.1.g43c6fa



More information about the Nouveau mailing list