CineFX (NV30) Inside
31. August 2003 / von Demirug / Seite 2 von 7
Der Shader Core
Beim Shader Core handelt es sich um eine programmierbare FPU, die eine ganze Reihe von Aufgaben übernimmt. Zur Erfüllung dieser Aufgaben ist der Shader Core selbst eine mehrstufige Pipeline.
CineFX Shader Core
1) Auswahl der Datenquelle
Der Shader Core kann aus 3 Quellen Daten beziehen:
Der Shader Core selbst: Bestimmte komplexe Befehle können nicht in einem Durchlauf bearbeitet werden. In solchen Fällen verlässt ein Quad nach dem Durchlauf den Shader Core nicht, sondern begibt sich direkt auf einen weiteren Durchlauf. Die nachfolgende Tabelle enthält eine Auflistung der Befehle und die Anzahl der Durchläufe, die zur Ausführung benötigt werden.
Das Pipeline Ende: Benötigt ein Quad mehr als einen Durchlauf durch die gesammte Pipeline, wird er hier erneut eingespeist.
Der Rasterizer ist die Quelle, wenn der Shader Core sonst den nächsten Takt leer laufen würde.
2) Interpolations selection
In diesem Schritt werden 6 Werte (Fliesspunkt, Skalar) zum interpolieren bestimmt. Zur Auswahl stehen dafür: Jeder der 4 Skalare (s,t,r,q) aus einer der 8 Texturekoordinaten, die Pixeltiefe (Z-Wert) und 1/W, welches für die perspektivische Korrektur benötigt wird. Alternativ stehen auch noch die 4 Skalare aus 4 vorher in einem FIFO gespeicherten Koordinatensets zur Verfügung. Dazu kommen dann noch die zu diesem gespeicherten Sets gehörenden Pixeltiefe und der 1/W-Wert. Neben der Auswahl der 6 Werte können auch noch 4 komplette Sets von Texturekorrdinaten bestimmt werden, welche zusammen mit der Pixeltiefe und dem 1/W für einen späteren Loopback im bereits erwähnten FIFO gespeichert werden.
3) Interpolation
Die im zweiten Schritt gewählten Werte werden nun interpoliert. Dabei wird der Quad auch in einzelne Pixel zerlegt. Alle weiteren Schritte in der Pipeline erfolgen nun immer für 4 Pixel parallel.
4) Erste Wertrangierung
Zu den 6 gerade interpolierten Werten können hier noch zusätzlich 12 Werte (als 3 Register mit jeweils 4 Komponeten) aus einem früheren Durchlauf hinzukommen. Aus diesem Pool kann dann gewählt werden, welche Werte wohin weitergereicht werden sollen.
5) Erste Rechenstufe
In dieser Stufe können Kehrwerte und der Kehrwert einer Wurzel ermittelt werden. In diesem Fall sind zwei Kehrwert- und eine Wurzelkehrwert-Berechung für jeweils 4 Pixel vorgesehen.
6) Zweite Wertrangierung
Hier werden die Ergebnisse der vorangegangenen Stufe erneut so umsortiert, dass sie für die nächste Stufe an der richtigen Stelle liegen.
7a) Multiplikation
Für jeden der 4 Pixel werden hier 4 skalare Multiplikationen durchgeführt.
8a) Dritte Wertrangierung
Erneut werden die Ergenisse passend umverteilt.
9a) Addition
Eine konfigurierbare Additionseinheit erlaubt 3 mögliche Operationen:
- 4 Additionen mit jeweils 2 Werten
- 2 Additionen mit jeweils 3 Werten
- 1 Addition mit 4 Werten
7b/8b/9b) Komplexe Berechnungen
Parallel zur Multiplikations- und Additionseinheit besteht auch noch die Möglichkeit, eine Log- oder Exp-Anweisung unter Verwendung einer hinterlegten Tabelle auszuführen.
10) Letzte Wertrangierung
Die in den vorangegangen Stufen berechneten Werte können nun auf 2 Texturekoordinaten mit jeweils 3 Komponeten und ein Register mit 4 Komponenten verteilt werden.