sna/blt: Reuse computed partial tile offset in copy_from_tiled

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-04-15 19:26:34 +01:00
parent bb69256b52
commit d30d276aee
1 changed files with 12 additions and 10 deletions

View File

@ -721,13 +721,16 @@ memcpy_from_tiled_x__swizzle_0__sse2(const void *src, void *dst, int bpp,
width *= cpp;
assert(dst_stride >= width);
if (src_x & tile_mask) {
dst_stride -= width;
offset_x = (src_x & tile_mask) * cpp;
length_x = min(tile_width - offset_x, width);
dst_stride -= width;
dst_stride += (width - length_x) & 15;
} else
} else {
offset_x = 0;
dst_stride -= width & ~15;
}
assert(dst_stride >= 0);
src_x = (src_x >> tile_shift) * tile_size;
while (height--) {
unsigned w = width;
@ -735,17 +738,16 @@ memcpy_from_tiled_x__swizzle_0__sse2(const void *src, void *dst, int bpp,
tile_row += src_y / tile_height * src_stride * tile_height;
tile_row += (src_y & (tile_height-1)) * tile_width;
tile_row += src_x;
src_y++;
if (src_x) {
tile_row += (src_x >> tile_shift) * tile_size;
if (src_x & tile_mask) {
memcpy(dst, tile_row + offset_x, length_x);
tile_row += tile_size;
dst = (uint8_t *)dst + length_x;
w -= length_x;
}
if (offset_x) {
memcpy(dst, tile_row + offset_x, length_x);
tile_row += tile_size;
dst = (uint8_t *)dst + length_x;
w -= length_x;
}
if ((uintptr_t)dst & 15) {
while (w >= tile_width) {
from_sse128xNu(dst,