From: Michal Krol Date: Tue, 6 Apr 2010 15:19:28 +0000 (+0200) Subject: util: Respect destination stride in pipe_get_tile_swizzle(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=859642c655b149a1321f214e6a731eb1ea991dc7;p=mesa.git util: Respect destination stride in pipe_get_tile_swizzle(). --- diff --git a/src/gallium/auxiliary/util/u_tile.c b/src/gallium/auxiliary/util/u_tile.c index 33cdbe40157..9f2bb81cd8f 100644 --- a/src/gallium/auxiliary/util/u_tile.c +++ b/src/gallium/auxiliary/util/u_tile.c @@ -416,7 +416,7 @@ pipe_get_tile_swizzle(struct pipe_context *pipe, { unsigned dst_stride = w * 4; void *packed; - uint i; + uint iy; float rgba01[6]; if (pipe_clip_tile(x, y, &w, &h, pt)) { @@ -449,16 +449,22 @@ pipe_get_tile_swizzle(struct pipe_context *pipe, rgba01[PIPE_SWIZZLE_ZERO] = 0.0f; rgba01[PIPE_SWIZZLE_ONE] = 1.0f; - for (i = 0; i < w * h; i++) { - rgba01[PIPE_SWIZZLE_RED] = p[0]; - rgba01[PIPE_SWIZZLE_GREEN] = p[1]; - rgba01[PIPE_SWIZZLE_BLUE] = p[2]; - rgba01[PIPE_SWIZZLE_ALPHA] = p[3]; + for (iy = 0; iy < h; iy++) { + float *row = p; + uint ix; - *p++ = rgba01[swizzle_r]; - *p++ = rgba01[swizzle_g]; - *p++ = rgba01[swizzle_b]; - *p++ = rgba01[swizzle_a]; + for (ix = 0; ix < w; ix++) { + rgba01[PIPE_SWIZZLE_RED] = row[0]; + rgba01[PIPE_SWIZZLE_GREEN] = row[1]; + rgba01[PIPE_SWIZZLE_BLUE] = row[2]; + rgba01[PIPE_SWIZZLE_ALPHA] = row[3]; + + *row++ = rgba01[swizzle_r]; + *row++ = rgba01[swizzle_g]; + *row++ = rgba01[swizzle_b]; + *row++ = rgba01[swizzle_a]; + } + p += dst_stride; } }