If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.
I did a quick search and didn't find any useful articles, so here's a quick summary :
Tiling refers to the way that X/Y addresses in the GPU are mapped onto chip addresses in the video memory. It makes a big difference because video memory chips are normally organized into rows, where access to a series of locations within a row is *much* faster than access to a series of locations in different rows. GPU cache lines tend to be organized the same way, since GPUs use burst transfers to move part of a memory row between video memory and on-chip cache lines.
By default the video memory attached to a GPU is organized so that increasing memory addresses correspond to points starting in the top left corner of a surface (a surface could hold image data, depth info or texture), increasing as you move to the right across the surface, then resuming at the left edge of the next row down. That default mapping is often called "linear", because a row of memory corresponds to a series of horizontal lines running the full width of the screen.
With me so far ?
OK, now let's look at drawing a typical set of triangles. Drawing tends to happen in an area that is closer to square than to a horizontal line, ie you're likely to see a series of triangles drawn in the same 200x200 pixel area, not scattered evenly across the width of the surface. What that means is the drawing operation touches on a lot of memory rows (since memory rows are the full width of the surface), which means a lot of memory accesses are required.
What would be great would be if memory rows could correspond to square or rectangular areas rather than horizontal lines. Tiling is basically some shuffling of address lines between GPU and memory controller so that a row of memory corresponds to a series of "tiles" which increases the chance that a series of drawing operations will hit in the same memory row or cache line. Put differently, it decreases the number of memory rows / cache lines required to cover a typical cluster of drawing operations.
The final stage of image drawing on a 6xx or higher GPU is done by a block called the Color Buffer (CB), so color tiling refers to tiled image surfaces. Z-buffer operations are handled by a block called the Depth Buffer (DB), so Z tiling is also referred to as depth tiling. The other candidate for tiling is textures. In each case the blocks include one or more registers indicating what kind of tiling should be used when accessing video memory through that block.
The challenge with tiling is that occasionally software rendering is required. Since the address lines have been swizzled between GPU and memory controller, reading the memory directly with CPU will result in a scrambled image. The driver changes to support tiling include routines to convert to/from tiled areas.