intel: Make the fake packed depth/stencil mappings use a cached temporary.
authorEric Anholt <eric@anholt.net>
Wed, 30 Nov 2011 15:03:03 +0000 (07:03 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 7 Dec 2011 21:38:08 +0000 (13:38 -0800)
commited3aeb56ec3fde24c2fc69515c0b5d348b41caf3
treef97f6fcf3e5603f151e08f923fb0587c353cb131
parent4cb1d6a25e4749ec5e0389ca3da468adbbe5299e
intel: Make the fake packed depth/stencil mappings use a cached temporary.

Before, we had an uncached read of S8 to untile, then a RMW (so
uncached penalty) of the packed S8Z24 to store the value, then the
consumer would uncached read that once per pixel.  If data was written
to the map, we would then have to uncached read the written data back
out and do the scatter to the tiled S8 buffer (also uncached access
penalties, since WC couldn't actually combine).  So 3 or 5 uncached
accesses per pixel in the ROI (and we we were ignoring the ROI, so it
was the whole image).

Now we get an uncached read of S8 to untile, and an uncached read of
Z.  The consumer gets to do cached accesses.  Then if data was
written, we do streaming Z writes (WC success), and scattered S8
tiling writes (uncached penalty).  So 2 or 3 uncached accesses per
pixel in the ROI.

This should be a performance win, to the extent that anybody is doing
software accesses of packed depth/stencil buffers.

Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
src/mesa/drivers/dri/intel/intel_mipmap_tree.c
src/mesa/drivers/dri/intel/intel_tex.h