Mesa (master): nouveau: Take into account destination position for copy_swizzle, need to split copy a bit more

Patrice Mandin pmandin at kemper.freedesktop.org
Sun Jul 26 14:19:21 UTC 2009


Module: Mesa
Branch: master
Commit: 2b8a8f75f33931622a46287a2bf633879f23285e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b8a8f75f33931622a46287a2bf633879f23285e

Author: Patrice Mandin <patmandin at gmail.com>
Date:   Sun Jul 26 16:18:06 2009 +0200

nouveau: Take into account destination position for copy_swizzle, need to split copy a bit more

---

 src/gallium/drivers/nv04/nv04_surface_2d.c |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/nv04/nv04_surface_2d.c b/src/gallium/drivers/nv04/nv04_surface_2d.c
index 143b858..ff4e511 100644
--- a/src/gallium/drivers/nv04/nv04_surface_2d.c
+++ b/src/gallium/drivers/nv04/nv04_surface_2d.c
@@ -133,7 +133,7 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
 	for (cy = 0; cy < h; cy += sub_h) {
 	  for (cx = 0; cx < w; cx += sub_w) {
 	    BEGIN_RING(chan, swzsurf, NV04_SWIZZLED_SURFACE_OFFSET, 1);
-	    OUT_RELOCl(chan, dst_bo, dst->offset + nv04_swizzle_bits(cx, cy) *
+	    OUT_RELOCl(chan, dst_bo, dst->offset + nv04_swizzle_bits(cx+dx, cy+dy) *
 			     dst->texture->block.size, NOUVEAU_BO_GART |
 			     NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
 
@@ -264,19 +264,29 @@ nv04_surface_copy(struct nv04_surface_2d *ctx, struct pipe_surface *dst,
 		int remainWidth = w-potWidth;
 		int remainHeight = h-potHeight;
 
+		/* top left is always POT */
 		nv04_surface_copy_swizzle(ctx, dst, dx, dy, src, sx, sy,
 		                          potWidth, potHeight);
 
+		/* top right */
 		if (remainWidth>0) {
 			nv04_surface_copy(ctx, dst, dx+potWidth, dy,
 			                  src, sx+potWidth, sy,
 			                  remainWidth, potHeight);
 		}
 
+		/* bottom left */
 		if (remainHeight>0) {
 			nv04_surface_copy(ctx, dst, dx, dy+potHeight,
 			                  src, sx, sy+potHeight,
-			                  w, remainHeight);
+			                  potWidth, remainHeight);
+		}
+
+		/* bottom right */
+		if ((remainWidth>0) && (remainHeight>0)) {
+			nv04_surface_copy(ctx, dst, dx+potWidth, dy+potHeight,
+			                  src, sx+potWidth, sy+potHeight,
+			                  remainWidth, remainHeight);
 		}
 
 		return;




More information about the mesa-commit mailing list