diff options
author | Patrice Mandin <patmandin@gmail.com> | 2009-07-26 22:30:35 +0200 |
---|---|---|
committer | Patrice Mandin <patmandin@gmail.com> | 2009-07-26 22:30:35 +0200 |
commit | 8df35b7b57ff12721556fa7d00b4e337134da374 (patch) | |
tree | 8ecf6239109cb97a6b6324fdbf6797af552f39f0 | |
parent | 2b8a8f75f33931622a46287a2bf633879f23285e (diff) |
nouveau: only swizzle square textures for copy
-rw-r--r-- | src/gallium/drivers/nv04/nv04_surface_2d.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/gallium/drivers/nv04/nv04_surface_2d.c b/src/gallium/drivers/nv04/nv04_surface_2d.c index ff4e51178d..aba40cfaff 100644 --- a/src/gallium/drivers/nv04/nv04_surface_2d.c +++ b/src/gallium/drivers/nv04/nv04_surface_2d.c @@ -263,10 +263,17 @@ nv04_surface_copy(struct nv04_surface_2d *ctx, struct pipe_surface *dst, int potHeight = 1<<log2i(h); 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); + int squareDim = (potWidth>potHeight ? potHeight : potWidth); + int x,y; + + /* top left is always POT, but we can only swizzle squares */ + for (y=0; y<potHeight; y+=squareDim) { + for (x=0; x<potWidth; x+= squareDim) { + nv04_surface_copy_swizzle(ctx, dst, dx+x, dy+y, + src, sx+x, sy+y, + squareDim, squareDim); + } + } /* top right */ if (remainWidth>0) { |