summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nv04
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/nv04')
-rw-r--r--src/gallium/drivers/nv04/nv04_surface_2d.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/nv04/nv04_surface_2d.c b/src/gallium/drivers/nv04/nv04_surface_2d.c
index 538f8233197..63f212556f7 100644
--- a/src/gallium/drivers/nv04/nv04_surface_2d.c
+++ b/src/gallium/drivers/nv04/nv04_surface_2d.c
@@ -106,7 +106,7 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
const unsigned max_h = 1024;
const unsigned sub_w = w > max_w ? max_w : w;
const unsigned sub_h = h > max_h ? max_h : h;
- unsigned cx, cy;
+ unsigned cx, cy, level_w, level_h;
int i, src_offset = src->offset, dst_offset = dst->offset;
/* POT or GTFO */
@@ -128,9 +128,13 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
OUT_RING (chan, swzsurf->handle);
/* FIXME: Find right src and dst offset, given mipmap level */
+ level_w = w;
+ level_h = h;
for (i=0; i<src->level; i++) {
- src_offset += w * h * src->block.size;
- dst_offset += w * h * dst->block.size;
+ src_offset += level_w * level_h * src->block.size;
+ dst_offset += level_w * level_h * dst->block.size;
+ level_w >>= 1;
+ level_h >>= 1;
}
for (cy = 0; cy < h; cy += sub_h) {