nouveau: use nv04_surface_copy_swizzle only for POT sizes
authorPatrice Mandin <patmandin@gmail.com>
Fri, 24 Jul 2009 21:37:46 +0000 (23:37 +0200)
committerPatrice Mandin <patmandin@gmail.com>
Fri, 24 Jul 2009 21:37:46 +0000 (23:37 +0200)
src/gallium/drivers/nv04/nv04_surface_2d.c

index d794c076f0fa97a1875b0b54f927c88acdf91b03..c0adf7ce85f0fe0204c18b094b85b79daaece62a 100644 (file)
@@ -110,10 +110,12 @@ nv04_surface_copy_swizzle(struct nv04_surface_2d *ctx,
        unsigned cx;
        unsigned cy;
 
+#if 0
        /* POT or GTFO */
        assert(!(w & (w - 1)) && !(h & (h - 1)));
        /* That's the way she likes it */
        assert(src_pitch == ((struct nv04_surface *)dst)->pitch);
+#endif
 
        BEGIN_RING(chan, swzsurf, NV04_SWIZZLED_SURFACE_DMA_IMAGE, 1);
        OUT_RELOCo(chan, dst_bo,
@@ -258,7 +260,8 @@ nv04_surface_copy(struct nv04_surface_2d *ctx, struct pipe_surface *dst,
        assert(src->format == dst->format);
 
        /* Setup transfer to swizzle the texture to vram if needed */
-       if (src_linear && !dst_linear && w > 1 && h > 1) {
+       if (src_linear && !dst_linear && w > 1 && h > 1 &&
+           !(w & (w - 1)) && !(h & (h - 1))) { /* POT only */
                nv04_surface_copy_swizzle(ctx, dst, dx, dy, src, sx, sy, w, h);
                return;
        }