Single page Print

A problem with ATI's drivers in DOOM 3?

We investigate
— 12:00 AM on August 30, 2004

RECENTLY, WE RECEIVED a tip, some information claiming ATI's drivers exhibited some odd behavior in DOOM 3 and that the company might be compromising image quality for performance. What's more, this problem seemed to be specific to DOOM 3, raising the possibility that ATI was guilty of engaging in an application-specific optimization—a practice the firm has forsworn.

Naturally, we were interested in the possibility of uncovering such a scandalous thing. We've dug into such juicy stories in the past, and the results have sometimes been rather enlightening. So we fired up our test rigs, busted out our sleuthing skills, and set out to see what exactly was happening with ATI's drivers in DOOM 3. Read on to see what we found.

The problem
The problem with ATI's drivers in DOOM 3 has to do with texture filtering, and it is more visible on some textures than others. Textures with high-contrast patterns on them, like the metal grates in the game's Mars base, tend to show the problem most vividly. There is a clearly visible transition between mip map levels, as if trilinear filtering were not happening as it should. Here's an example.

Radeon X800 Pro with Catalyst 4.9 beta - Game defaults
(Click for full-screen lossless PNG version)

This is in DOOM 3's High Quality mode, where 8X anisotropic filtering and trilinear filtering are both supposed to be active. However, as you can see, there's a mip map transition line running across the middle of the grate on the floor in our example screenshot. This problem is visible throughout the game whenever a similar texture is used on the floor. The screenshot shows the problem, but it's more obvious in motion. Once you've noticed it, it's rather distracting, like the transition lines were with bilinear-only filtering on Voodoo cards back in the Quake 2 days. Having those things track on the floor out in front of me as I moved was annoying.

We used the Catalyst 4.9 beta drivers that ATI released specifically for DOOM 3 to take this screenshot, but the exact same problem is visible with ATI's latest official drivers, Catalyst 4.8. (By the way, all the images from DOOM 3 in this article have been brightened up a bit by using a gamma 1.4 on them in Paint Shop Pro. DOOM 3's own gamma and brightness settings don't affect screenshot output, and the game's output is a little too dark by default for our purposes.)

One way around this problem is to use DOOM 3's console commands to flip out of trilinear filtering and then back into it. The command to turn off trilinear and just run bilinear filtering in DOOM 3 is similar to what you'd use in old Quake engine games, but slightly different:

That will put the renderer into bilinear filtering (and shouldn't affect anisotropic filtering). Then you can flip back into trilinear mode with this command:
Once you've done that, the transition line on the floor magically vanishes:

Radeon X800 Pro with Catalyst 4.9 beta - After trilinear console toggle
(Click for full-screen lossless PNG version)

There's no need to issue a "vid_restart" command to reset the rendering engine. In fact, if you do that, the transition line comes back again.

For those of you having trouble seeing the difference, here's the output from a mathematical "diff" operation between the two images:

Radeon X800 Pro with Catalyst 4.9 beta - Diff between default and post-toggle output
(Click for full-screen lossless PNG version)

So, is that the end of the story? What happens if you benchmark the ATI card before and after toggling filtering modes on the command line? Is the Radeon X800 Pro doing less work at the game's default settings? We ran some timedemos, using our own trusty "trdemo2" demo, and found this:

Uh oh. The ATI card produces the correct image after being told to do trilinear filtering in the game's console, but that's accompanied by a big performance drop. Could it be that ATI's drivers are compromising image quality for performance? Is the console command somehow defeating this optimization? Or could it be that the console commands are overriding the adaptive trilinear filtering algorithm that ATI snuck into newer Radeon GPUs?