Review of the Matrox G400 MAX

32 Bit Z-Buffer - Does G400 Do It Or Not?

Before I get into one of my observations, I wanted to give a rough description of what a Z-buffer is. A Z-buffer stores the depth of each pixel on the screen. When objects are being drawn, the Z-buffer sorts the pixels on the Z coordinate (depth). Basically, if you have pixel A and pixel B, in the same line of sight, the Z-buffer decides which pixel will be in front of the other. When graphics vendors like Matrox or NVIDIA talk about different Z-buffer `bits," they are referring to the accuracy of the Z-buffer.

While Matrox is marketing high visual quality with new features like Vibrant Color Quality and bump mapping, they seem to have problems in 32 bit color OpenGL applications. The problem I'm speaking of is found in leading edge games that support 32 bit color modes and require true 24 bit+ Z-buffer support. In games that use 32 bit color but only use a 16 bit Z-buffer you won't have any problems. However, when you use 32 bit color/Z-buffer mode in a game like Recoil or Quake Arena, you will. The problem can be annoying because it causes objects in the background to "flicker." The light and wall are both fighting to be in front of each other. We will provide an example (which is hard to show in a still picture) of what we're talking about below. If you move forward/backward or look up and down, you'll see the light source disappear as the wall fights to be in front of it. You will not see this problem on a TNT2 because it always supplies the game with a true 24 bit/ 32 bit Z in 32 bit color mode. We confronted Matrox about this and it turns out that the current OpenGL driver has issues when a program calls for a 32 bit Z buffer in OpenGL (not DirectX). Matrox said it might be fixed in a beta driver to be released in a couple of weeks so we'll have to see what happens then.

Now you see it... (the far light source)!

Now you don't!

Matrox has decided to use 16 bit or 32 bit Z-buffer depending on which of the two was requested by the program. Unfortunately, this is what is broken in the OpenGL driver right now. The OpenGL-games get a 16 bit Z-buffer only, producing visual defects in games that require 32 bit Z-buffer. This is the best way to do things as long as it works correctly. If you want 32 bit color and only need 16 bit Z-buffer then you'll save a considerable amount of memory bandwidth. We believe this is one of the reasons the G400 MAX pulls away from the TNT2 at true color. The TNT2 can do 16 bit Z-buffer in 16 bit color and 32 bit Z-buffer in 32 bit color only, it's not able to do the two additional possibilities, which are 16 bit color / 32 bit Z-buffer or the more common version of 32 bit color / 16 bit Z-buffer. G400 is able to do that too and that means a performance advantage over TNT2 in the majority of games that use 32 bit color, since most of them only use a 16 bit deep depth information.