i965/tiled_memcpy: linear_to_ytiled a cache line at a time
authorScott D Phillips <scott.d.phillips@intel.com>
Sat, 27 Jan 2018 00:07:15 +0000 (16:07 -0800)
committerScott D Phillips <scott.d.phillips@intel.com>
Wed, 14 Feb 2018 20:38:34 +0000 (12:38 -0800)
commitecaad89525338ae637bd03004da78b9d937fb05b
tree3f23cc85fc0b62d147bb18c8d1ff9e05fbf296df
parenteb2e17e2d15bf58b60460437330d719131fb859e
i965/tiled_memcpy: linear_to_ytiled a cache line at a time

TileY's low 6 address bits are: v1 v0 u3 u2 u1 u0
Thus a cache line in the tiled surface is composed of a 2d area of
16x4 bytes of the linear surface.

Add a special case where the area being copied is 4-line aligned
and a multiple of 4-lines so that entire cache lines will be
written at a time.

On Apollolake, this increases tiling throughput to wc maps by
84.0103% +/- 0.862818%

v2: Split [y0, y1) and [y2, y3) loops apart for clarity (Jason Ekstrand)
v3: Don't reset src var (Jason), Ensure y0 <= y1 <= y2 <= y3

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/intel_tiled_memcpy.c