Der GeForce4 Ti AF-Bug
1. Oktober 2002 / von aths / Seite 4 von 5
Fehler im Chip oder bewusste Design-Entscheidung?
Misst man in OpenGL die AF-Füllrate im Performance-Modus, erreicht man zuweilen recht erstaunliche Werte, z.B. knapp 1500 MegaTexel/sec bei der GeForce4 Ti4600. Der Schluss, der AF-Bug sei hiermit gefixt, ist leider vorschnell. Denn letzlich dürfte die AF-Füllrate nur 1200 MegaTexel/sec betragen, da in der Praxis so gut wie immer ein 2x Oversampling stattfindet, was die Brutto-Texelfüllrate von 2400 MTexel/sec klar halbieren müsste. Wer angesicht des 1500er Ergebnis nun wartet, der AF-Bug könnte irgendwann auch für die Direct3D-API gefixt werden, wird also enttäuscht, da das eigentliche Problem der GeForce4 Ti durch den AF-Performance-Modus in OpenGL nicht behoben wurde, zumal ja auch die GeForce3, welche dieses Problem nicht hat, von diesem profitiert.
Der Trick des Performance-Modus ist offenbar, dass gewisse Polygone komplett gar kein AF bekommen. Nach welchen Kriterien das entschieden wird, bleibt unbekannt. Ist es eine reine Treiberfrage oder wird die Hardware (speziell das Triangle Setup) anders parametrisiert? Das Triangle Setup musste für die GeForce3 speziell für die anisotrope Filterung erweitert werden. Ist es womöglich flexibel, was AF betrifft? Wir wissen es nicht. Wichtig ist, dass die "gefühlte Bildqualität" keine erheblichen Verschlechterungen zeigt und man meistens sogar mit Screenshots arbeiten muss, um Unterschiede überhaupt nachzuweisen.
Wichtig ist allerdings auch, dass derart "optimierte" Füllraten nur für gewisse synthetische Benchmarks gelten. Quake III Arena profitiert vom Performance-Modus auch, aber natürlich weit weniger drastisch. Und wir möchten noch einmal betonen, dass die OpenGL- und Direct3D-Optimierung auf unterschiedlichen Verfahren beruht, beide aber als Gemeinsamkeit haben, dass erstens die Nicht-Basistexturen von anisotroper Filterung kaum profitieren und zweitens zumeist wenig Bildqualität für zumeist viel Geschwindigkeit eingetauscht wird.
Die GeForce4 Ti ist zwar beim AF recht gemächlich, bricht aber mit trilinearem AF so gut wie nicht zusätzlich ein. Die GeForce3 hingegen gewinnt merklich, wenn man sich mit bilinearem AF begnügt. Das ist ja auch logisch, da für trilineare Filterung die doppelte Menge an gefilterten Texeln erzeugt werden muss. Heutzutage ist jedoch trilineare Filterung Standard, und bei dieser trilinearen Filterung ist die AF-Performance der GeForce4 Ti völlig normal.
Man kann zwar auch bei der GeForce4 Ti noch bilineares AF nutzen - hat aber trotz des Bildqualität-Nachteils kein Performance-Plus. Das widerspricht nun unser Forderung, dem Anwender die Wahl zwischen schnell und schön zu überlassen. Man "darf" zwar noch bilineare Filterung nutzen (zumal trilineare Filterung durch den Treiber nicht erzwungen werden kann), aber man bekommt dafür nur (langsamere) trilineare Performance. Und wenn eine trilineare Filterung vom jeweiligen Spiel nicht unterstützt wird, kann man prinzipiell nur bilineares AF zur Performance von trilinearem AF nutzen.
Für den Aspekt der Leistung ist die Frage ob bi- oder trilinear entscheidend, weil die heutigen GeForce-TMUs jeweils nur bilinear gefilterte Texel erzeugen können. Wird trilinear gefiltert, nimmt das pro Textur beide TMUs gleichzeitig in Beschlag. Wenn man jetzt rechnet: 2x AF halbiert die Füllrate und trilineare Filterung halbiert sie nochmal, so ist die Viertelung der Füllrate im Multitexturing-Modus kein Fehler, sondern der erwartete Wert. Der 3DMark2001 nutzt allerdings nur bilineare Filterung - hier "darf" sich die Füllrate bei 2x AF nur halbieren, wie man bei der GeForce3 auch sehen kann.
Von einer synthetischer Füllrate wie im 3DMark2001 kann man jedoch nicht direkt auf fps schließen. Eine Verdoppelung der theoretischen Füllrate schlägt sich längst nicht immer in doppelt so hoher Praxis-Framerate um. Schaltet man bei der GeForce3 von trilinearem AF auf bilineares zurück, so gewinnt man in der Regel rund 20 bis maximal 40 Prozent an Leistung und verdoppelt nicht die Framerate. Dass dieser Gewinn den GeForce4 Ti Besitzern allerdings verwehrt bleibt, ist bedauerlich. Unreal Tournament 2003 zum Beispiel profitiert dank "kluger" Auswahl der Texturen deutlich mehr von AF als von trilinearer Filterung.
Hier bilineares AF zu verwenden und die zusätzliche Performance - die ein GeForce4 Ti Besitzer wie gesagt nicht bekommen kann - in höhere Auflösung zu stecken, halten wir durchaus für sinnvoller als eine leistungsfressende trilineare Filterung zu verwenden, noch dazu wo speziell Unreal Tournament 2003 schon leistungsfressend genug ist. Und so "out" auch die reine bilineare Filterung ist: Je höher das AF-Level, desto unwichtiger wird der trilineare Modus. Es wäre schön, wenn der Anwender daraus auch seine Performance-Vorteile ziehen könnten, indem er bei hohen AF-Stufen auf den trilinearen Modus verzichten kann.
Wahrscheinlich ist der GeForce4 Ti (wie offenbar auch AGPx8-Nachfolger NV28 aka GeForce4 Ti 8X) darauf ausgelegt, beim AF grundsätzlich beide TMUs zum Sampling zu verwenden, so als würde trilineare anisotrope Filterung vorgenommen. Im bilinearem Modus bliebe die zweite TMU dann allerdings funktionslos, so dass rein effektiv eine 4x1-Architektur vorhanden wäre. Was intern genau vor sich geht, bleibt von unserer Seite jedoch reine Spekulation.
Wichtig ist die praktische Auswirkung: Nur halbe AF-Effizienz bei bilinearer Einstellung bei der GeForce4 Ti. Zwar ist bilineares AF auch auf der GeForce4 Ti doch noch ein klein wenig schneller als trilineares, dies liegt wohl aber daran, dass aufgrund der geringerern Texturdaten-Mengen die Hit-Rate im Cache besser ist und somit weniger Texturbandbreite gebraucht wird.
Es gibt noch heute eine Reihe Spiele, die von sich aus nur bilineare Filterung unterstützen, wie zum Beispiel Morrowind. Hier hat man mit dem AF-Verhalten der GeForce4 Ti das Nachsehen, da man trotz bilinearer AF-Grafik mit trilinearer AF-Performance leben muss. Dass die GeForce4 Ti4600 dabei nicht hinter eine GeForce3 zurückfällt, liegt einzig und allein daran, dass es der hohe Chip-Takt wieder rausreißen kann. In der Praxis ergeben sich beim bilinearen anisotropen Filtering nur selten deutliche Vorsprünge vor der GeForce3. Erst bei trilinearem AF können die GeForce4 Ti Karten zeigen, was in ihnen steckt.
Es gibt im Design der GeForce4 Ti damit eine interessante Parallele zur GeForce256. Dieser Chip hat pro Pipeline nur eine Textureneinheit (TMU), die jedoch pro Takt ein trilineares Sample erzeugen kann (ohne AF). Die Nachfolger ab der GeForce2 haben zwar zwei TMUs, diese können aber jeweils nur noch bilineare Samples erzeugen. Die trilineare Leistung bleibt pro Pipeline also gleich, mit zwei TMUs ist man jedoch auf alle Fälle flexibler.
Stellt man sich den GeForce256-Hardwareaufbau in logische Komponenten zerlegt vor, könnte man folgendes sagen: GeForce256 hat pro Pipeline doch zwei bilineare TMUs, die aber nur eine gemeinsame Textur-Koordinate sampeln können. Diese gemeinsame Koordinate wird dann auf die beiden MIP-Stufen der gleichen Textur angewendet.
Dazu ein paar Illustrationen, die den Aufbau der GeForce3- und GeForce4-Pipeline zeigen, wie wir ihn während der anisotropen Filterung vermuten. Eine Garantie für die Richtigkeit können wir leider nicht geben, da uns hierzu kein offizielles Material vorliegt. Um das wesentliche sichtbar zu machen, haben wir bei den Diagrammen einiges eingespart. Dass für anisotrope Filterung mehrere Takte erforderlich sind, und die jeweiligen Ergebnisse am Ende zusammengemischt werden, wird in diesen Diagrammen nicht dargestellt.
Die GeForce3 erzeugt bis zu zwei AF-Samples pro Pipeline. |
Die bilineare AF-Füllrate weist darauf hin, dass die GeForce3 pro TMU ein AF-Sample generieren kann. 2x bilineares AF ist von der Füllrate mit einfacher trilinearer Filterung zu vergleichen. Der "grüne Weg" wird bei bilinearem, der "braune Weg" bei trilinearem AF eingeschlagen. Die Koordinaten-Berechnung für das normale Textursampeln ohne AF ist direkt in den TMUs integriert. Die Logik für anisotrope Filterung ist aufwändiger und wurde hier als grauer Balken extra eingezeichnet.
Bei der GeForce4 Ti gab es ausgehend von GeForce3 einen Rückschritt: Beide TMUs der GeForce4 Ti können scheinbar nur noch eine gemeinsame anisotrope Textur-Koordinate sampeln. Ohne anisotropen Filter ändert sich nichts, hier können beide TMUs aus unabhängigen Texturen unabhängige Koordinaten sampeln.
Die GeForce4 Ti kann offenbar nur noch ein AF-Sample pro Pipeline erzeugen. |
Es weist alles darauf hin, dass einige für AF notwendige Logik-Gruppen bei der GeForce4-Ti-Pipeline nicht mehr pro TMU, sondern nur noch pro Pipeline vorhanden sind. Damit kann pro Takt und Pipeline maximal ein AF-Sample generiert werden und nicht mehr bis zu zwei Samples wie es der Vorgänger GeForce3 noch vermochte. Es bleibt abzuwarten, welches Verhalten der NV30 hier an den Tag legen wird. Wir gehen davon aus, dass er bei 8 Pipelines mit wieder je 2 bilinearen TMUs bekommt.