Zum 3DCenter Forum
Inhalt




CineFX (NV30) Inside

31. August 2003 / von Demirug / Seite 1 von 7


Anmerkung: Für diejenigen, denen die ersten drei Seiten technisch zu kompliziert sind, finden sich ab Seite 4 (unten) allgemeinverständliche Leistungsbetrachtungen der CineFX-Architektur im Vergleich zur R3x0-Architektur.


   Einleitung

Seit dem Erscheinen des NV30 mit seiner neuen CineFX-Pixelengine wurde gerätselt, wie diese denn nun aufgebaut sei. nVidia als Entwickler dieses Chips hielt sich bei Fragen nach internen Details zurück oder suchte Ausflüchte in Phrasen, die sich zwar schön anhörten, aber wenig Information enthielten. Auch die chipspezifischen OpenGL-API-Ergänzungen ("Extensions") welche nVidia zur Programmierung der CineFX-Engine vorgestellt hatte, konnten nicht wirklich Aufschluss über diese Dinge liefern.

So kam es dann, dass man ausgerüstet mit den spärlichen Informationen und einigen Performancemessungen am echten Objekt das Geheimnis zu ergründen versuchte. Der Autor diese Artikels war dabei auch nicht unproduktiv. Im Eifer dieser Bemühungen wurde aber eine Informationsquelle vollständig ignoriert. Dass man dort nicht gesucht hat, ist mehr als verständlich, denn in der Vergangenheit fand man dort auch keine Informationen über neue Chips.

Die Rede ist von den Patentämtern dieser Welt. So geschah es doch tatsächlich dass am 27. Dezember 2002 beim Weltpatentamt das Patent mit der Registriernummer WO02103638 und dem Titel "PROGRAMMABLE PIXEL SHADING ARCHITECTURE" veröffentlicht wurde. Offiziell nimmt das Patent natürlich keinen Bezug auf NV30 oder CineFX. Das ist aber nicht ungewöhnlich, nVidia hat in ihren Patenten bisher niemals auf spezielle Chips oder Marketing-Bezeichnungen verwiesen. Da es aber genügend Anhaltpunkte dafür gibt, dass sich diese Patent auf CineFX und den NV30 bezieht, wollen wir es als solches auch betrachten.

Im weiteren Verlauf wollen wir nun dieses Patent untersuchen. Dabei gilt unser besonderes Augenmerk den bekannten Fragestellungen rund um den NV30:

Warum kommt der NV30 so schlecht mit 1.4 und 2.0 Pixelshadern, welche ursprünglich auf ATi Hardware programmiert wurden, zurecht?

Wie kann der NV30 von speziell für ihn programmierten Shadern profitieren?

Wo hat der NV30 noch Potential, welches durch den Treiber genutzt werden kann?

Da das Patent leider nicht auf alle technische Details eine genaue Antwort gibt und auch nicht zu 100% sichergestellt werden kann, dass der NV30 genau nach dem im Patent beschrieben Design gebaut wurde, können die Antworten die hier gefunden wurden, natürlich keinen Anspruch auf absolute Korrektheit erheben.


   Technik

Beginnen wir unsere Suche nach den Antworten mit einer Übersicht der kompletten CineFX Pipeline, wie sie als Zeichnung 4 im Patent enthalten ist. Aus Gründen der Übersichtlichkeit und der Verständlichkeit benutzen wir hier nicht die originalen Zeichnungen aus dem Patent. Die zugänglichen Scans sind leider nicht von einer guten Qualität und stellenweise schwer zu lesen.


Die CineFX Pipeline

Ein Blick auf dieses Bild sagt uns, das man die Komplexität des ganzen im allgemeinen doch etwas unterschätzt hat. Es kommen bei weitem mehr Einheiten und Loopbacks zum Einsatz, als man in den bekannten Spekulationen bisher angenommen hat. Wer genau hinsieht, erkennt auch schon die nächste Überraschung: Der Rasterizer liefert dieser Pipeline keine Pixel, sondern sogenannte "Quads".

Ein solcher Quad besteht aus 4 Pixeln, welche laut einer Aussage von nVidia als 2*2 Pixelblock angeordnet sind. Um es nun gleich vorweg zu nehmen, dass was wir hier auf dem Bild sehen, ist die gesamte Pipeline, wie sie im Chip vorhanden ist (und zwar genau nur ein einziges mal). Im Patent selbst werden die 4 Pixel pro Quad natürlich nur als Beispiel angeben. Durch eine andere Pixelzahl pro Quad würde sich ja auch nichts grundsätzliches an der Sache ändern.

Wie man sieht, setzt sich die gesamte Pipeline aus mehren Funktions-Einheiten und FIFOs (First In First Out) zusammen. Die FIFOs haben dabei die Aufgabe, dafür zu sorgen, dass die benötigten Daten zum richtigen Takt an der richtigen Stelle sind. Die Größe eines solchen FIFOs ist dabei von wichtiger Bedeutung, wenn es um die Performance geht. Ein zu kleiner FIFO Buffer kann leicht der Grund für ein Blockieren der Pipeline werden. Ein zu großer Buffer verbraucht aber Transitoren, die man an einer anderen Stelle möglicherweise besser eingesetzt hätte. Hier muss also immer abgewogen werden.

Werfen wir nun einen kurzen Blick auf die Funktionseinheiten der Pixelpipeline, bevor wir uns dann im Detail mit den Funktionen im Detail einzelnen befassen.

  • Triangle Unit: Diese Einheit berechnet Werte, welche über ein ganzes Dreieck konstant sind. Im wesentlichen handelt es sich dabei um die Faktoren, welche von der Pixelpipeline später zum Interpolieren von Farben, Texturkoordinaten usw. gebraucht werden.

  • Shader Core: Eine komplexe FPU, welche eine besondere Bedeutung beim Erzeugen der Texturkoordinaten hat.

  • Texture: Hier erfolgen alle Arbeiten, welche im Zusammenhang mit dem Auslesen von Texturen stehen. Dazu gehören auch das Berechnen der richtigen Stellen innerhalb der Textur sowie das Zusammenfiltern der einzelnen Texelwerte.

  • Shader back end: Eine weitgehend festverdrahtete Einheit, welche das Interpolieren der Vertexfarben sowie einige Vorbereitungsarbeiten für die nachfolgende Einheit übernimmt.

  • Combiners: Diese Einheit begleitet uns bei nVidia schon eine ganze Zeit lang. Allerdings wurde sie im Laufe der Zeit immer wieder etwas verändert. Im Zusammenhang mit der CineFX Pipe schweigt sich nVidia über den genauen Aufbau vorerst noch aus. Wir werden aber hierzu noch auf die wahrscheinlichste Lösung zu sprechen kommen.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Weiter / Next

Shortcuts
nach oben