ATis Texturfilter unter der Lupe
Wie die PC Games Hardware in ihrer aktuellen Ausgabe im Schlusssatz zum aufschlußreichen Vergleich zwischen der GeForce 6800 Ultra und der Radeon X800 XT schreibt, gibt es in OpenGL bei einigen Füllratenmessungen das Phänomen, dass die Karte rund 20% mehr Texelfüllrate erreicht, als ihr rein rechnerisch zustünde.
Daraufhin stutzig geworden, haben wir mal ein wenig nachgemessen und konnten in einem ersten Anlauf diesen Umstand auf einer Radeon 9800 XT von Asus nicht verifzieren. Allerdings gab es schon seit geraumer Zeit Hinweise, dass speziell die Radeon 9600, der Value-Ableger der 9800-Reihe, in der Lage ist, die trilineare Filterung deutlich zu optimieren. Zunächst führte dies dazu, dass ihr, wie auch der Radeon 9200, die auf dem Vorgängerchip RV280 basiert, trilineare TMUs zugeschrieben wurden. Das Thema hat uns allerdings keine Ruhe gelassen und dank eines Denkanstoßes vom User „ow“ aus dem 3D-Center Forum haben wir versucht, der Sache auf den Grund zu gehen.
Bewaffnet mit einer Radeon 9600XT, die ziemlich bandbreitenlimitiert ist und von daher auf 256 MHz Chiptakt gebremst wurde, haben wir zunächst die Texturfüllraten unter OpenGL mit dem ArchMark nachgemessen. Das Ergebnis der trilinearen Texelfüllrate lag 20% über dem Wert, den die Radeon 9600 XT rein rechnerisch hätte erreichen dürfen. Ein erster Test in Call of Duty mit eingefärbten MipMap-Leveln ergab auch korrekt aussehende, trilineare Filterung.
Damit gaben wir uns jedoch nicht zufrieden und haben nachgemessen. Das System-Limit liegt im von uns benutzten Brecourt-Demo bei etwa 107 Bildern pro Sekunde. Die Werte im Timedemo mit heruntergetakteter Grafikkarte liegen allesamt unterhalb von 60 FPS, so dass eine Systemlimitierung hier schonmal ausscheidet. Zur Sicherheit sind wir mit der Auflösung noch eine Stufe höher gegangen auf 1280x1024.
r_colormiplevels 0 | r_colormiplevels 1 | |
---|---|---|
CoD, Brecourt-Demo,1280x1024x32, bilineare Filterung | 57,0 | 57,1 |
CoD, Brecourt-Demo,1280x1024x32, trilineare Filterung | 42,0 | 38,1 |
CoD, Brecourt-Demo,1024x768x32, 4xAF, bilinear | 54,2 | 50,6 |
CoD, Brecourt-Demo,1024x768x32, 4xAF, trilinear | 37,9 | 32,0 |
Die Kollegen von der PC Games Hardware waren zwischenzeitlich so freundlich und haben „ihre eigene Brecourt-Demo“ auf einer Radeon X800 Pro gegengetestet, womit auch ein Fehler unsererseits oder unseres Testsystems unwahrscheinlich geworden wäre.
r_colormiplevels 0 | r_colormiplevels 1 | |
---|---|---|
CoD, Brecourt-Demo,1280x1024x32, bilineare Filterung | 113,2 | 113,7 |
CoD, Brecourt-Demo,1280x1024x32, trilineare Filterung | 92,9 | 87,8 |
Zuerst haben wir den Test nur mit trilinearer Filterung durchgeführt und gedacht, es könne vielleicht mit dem Einfärben der Mips zusammenhängen, was eventuell die ~10% Unterschied erklären könnte. Bei der Gegenprobe stellte sich jedoch heraus, dass der Effekt bei rein bilinearem Filter absolut keine Veränderung brachte, obwohl hier prozentual ein größerer Zusatzaufwand fällig gewesen wäre. Dies Ausnahme hiervon scheint bilineares AF zu sein, wobei hier der Abfall der Framerate prozentual gerade einmal halb so hoch war.
In nachfolgenden Tests konnten wir dieses Verhalten sowohl bei Standardtaktraten von 500/300 MHz für die Radeon 9600 XT, als auch im OpenGL Spiel „Alice“ nachweisen, wenn auch „Alice“ einen, prozentual gesehen, weit geringeren Abfall durch das Einfärben der MipMap-Level zeigte. Ein reiner Bug in Bezug auf Call of Duty kann somit nahezu ausgeschlossen werden.
Die Frage ist nun, wieso es bei Aktivierung des „r_colormiplevel“-Konsolenkommandos offenbar zu einer Deaktivierung dieser Optimierung kommt.
Vielen Dank an die Kollegen von der PCGH für das Beisteuern der X800 Pro Benchmarks!
Wir versuchen, diese Angelegenheit zu klären...
Eine zwischenzeitlich eingebaute Radeon 9700 Pro, die den R300 Chip nutzt, war von einem Leistungsabfall mit eingefärbten MipMap-Levels wie die Radeon 9800 XT nicht betroffen.