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

Author: Patrice Mandin <[email protected]>
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;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to