Depth Testing and Buffering
Is that a Z-buffer bug or are you just happy to see me?
The next part of the graphics pipeline determines whether or not the pixel that has just been rendered is actually visible - is it being blocked from view by another object in front of it? Here the depth of the pixel is compared to other pixels that have already been rendered. This can be done by an alpha test or a Z compare.
Every pixel has an x and y coordinate that tells where the pixel rests on-screen. This, however, only works for two dimensions. We render in a 3D world, so a third dimension must be represented by a Z value. Z values are an assigned screen depth for each pixel, with a floating point value falling between 0 and 1. The accuracy of the pixel depth depends on the level of accuracy used in the Z buffer (this is typically 16 or 24-bits, as "32-bit" values often include 8 stencil bits)
After a pixel has been rendered, it must be determined whether or not a pixel is visible. Traditionally, the most accurate way of doing this has been to do a comparison of the Z values. To do this, the Z value of the pixel that has just been rendered is compared against the Z value of any pixel that is in the Z-buffer at the same x and y coordinate of the pixel that is to be written. If the Z value of this new pixel falls behind the values of those currently in the Z-buffer, it would be behind the new pixel, and is thus ignored. However, if this pixel is at a higher level than the other pixel at the same x, y location, it means that the pixel we're working with is in front of the other pixel; a new Z value is written to the buffer, and the new pixels color is written to the back color buffer.
Memory Interface
Video memory typically interfaces with the graphics chip over a 64 or 128-bit internal data bus. The numbers of bits define how wide the data path is, allowing the specified number of bits to be transferred in each clock cycle. Wider data paths are expensive and difficult to implement unfortunately, making paths beyond 128-bits very uncommon. Going wider requires an increase in pin count on graphics chips, which can significantly increase the cost of each chip.
The data bus is extremely important because everything travels across it. This includes texture data when doing texture fetches, Z data for doing Z compares, frame-buffer data for read/writes, and frame data. All of these items require bandwidth, and thus it is important that we have sufficient speed to send this data, as it comprises the totality of the information required to render the final image.