ATi & nVidia in driver "optimizations" race
July 26, 2003 / by Leonidas / page 6 of 9
ATi Optimizations (cont.)
Actually this article could almost end here. Almost - because the ATi driver finally exposes a surprise which - at first - does not show any differences in benchmarks. Because actually we only wanted to take some ATi screenshots in comparison with the nVidia shots shown on the pages before in order to show how to filter "correctly". On the "real" screenshots there was nothing to expose, but the screenshots with colored MipMaps show surprising results when activating anisotropic filtering (click opens lossless compressed screenshots in 1024x768 resolution, on the right side the same nVidia image with AntiCheat script):
In the first place, a clear bilinear filter shows up here - although ATi's quality filter mode should definitely filter trilinear. However, a weak blue colouring before the clear blue colouring is still noticeable, which indicates still a partial trilinear filtering. In order to find the cause for this behavior, we compared an additional, purely bilinear filtered screenshot to the normal image (created with rTool by the way).
The difference can be recognized precisely and leads to the apparent conclusion that ATi indeed filters some textures trilinear, while others (in contrary) are filtered only bilinear. In order to get to know this more exactly, we endeavored the D3D AF-Tester, which is capable of indicating the mipmaps for different texture stages. Thereby a clear difference between the texture stage 0 and all other texture stages showed up under trilinear anisotropic filter:
The driver version 03.6 used for this test already suggests that this behavior is not limited to a single driver. In fact all ATi drivers starting from the version 03.2 up to the most current driver version 03.6 behave identical like the screenshots show here. In order to allow comparability the nVidia images of the driver version 44.03 (results are equal through driver version 44.90) are filtered equally and solidly trilinear in the drivers' quality mode (with the exception of Unreal Tournament 2003, as already mentioned before):
Thus it can be stated that the bilinear optimization under the anisotropic filter seen on Unreal Tournament 2003 screenshots is not an application specific optimization, but a technique generally used by ATi for the anisotropic mode for all applications. More precisely, with ATi's anisotropic filter only the basis texture (texture stage 0) is filtered trilinear, whereas all other textures (texture stages 2-7) are only bilinear filtered. This behavior of the ATi driver thereby applies to all applications using the anisotropic mode.
Similar to nVidia this general optimization of the anisotropic filter is based on the fact that current ATi graphic chips also only have bilinear filtering texture units, thus needing twice the rendering power for trilinear filtering und hence saving enormous ressources with bilinear filtering. Beside that, optimizations take advantage of the usually not needed trilinear filter for lightmaps or small bumpmaps, because due to their kind and/or their size hardly any mip-banding effects can occur, which would make a trilinear filter necessary.
Nevertheless, ATi ignores in this context that there are also different textures (for example detail textures) beside the basis texture, which can show mip-banding and therefore trilinear filtering should be used. As a matter of course the same ATi hardware can filter all textures correctly trilinear, which is obvious when deactivating the anisotropic filter (on the left 8x anisotropic filter, right without anisotropic filter):
As already mentioned, an application specific optimization is definitely not present here, since not only Unreal Tournament 2003 uses this mixture of trilinear filtering for the basis texture and bilinear filtering for the rest of the textures but the ATi driver generally dictates this for all applications. The question must be asked, whether this general optimization for the anisotropic filter may really be called a "trilinear filter" and whether the whole tweaking possibly tends toward illegal optimization. Because this general optimization method does not appear to be alright at least for us.