PCGH_Carsten
Ex-Redakteur
In unserer edit: damals, 2005 neuen VGA-Wissensreihe wollen wir keine detailgenaue Technik wälzen, sondern wichtige Grundlagen vermitteln. Will man sich im zunehmend chaotischen Angebot der verschiedenen Grafikkarten und ihrer Hersteller einigermaßen zurechtfinden und aus dem Gewirr an Angeboten die Karte herausfischen, die den eigenen Ansprüchen am ehesten genügt, braucht man grundlegendes Wissen.
Gleichzeitig sollen die einzelnen Komponenten und Merkmale so prägnant dargestellt werden, dass möglichst viel davon auch hängen bleibt. Nichts ist anstrengender, als bei der Suche nach einer wichtigen Info erst mühsam das halbe Internet durchsuchen und richtige von falschen Aussagen trennen zu müssen.
Inhalt:
>> Die GPU: das Kernstück
>> Shader-Einheiten
>> Fragment versus Pixel Shader
>> Vertex Shader
>> Triangle Setup
>> Rasterizer
>> Fragment Shader
>> Details der Fragment Shader
>> ROPs
>> Speicher-Interface
>> Die GPU: das Kernstück
Kernstück und oft genug wichtigstes Merkmal einer modernen Grafikkarte ist der darauf verbaute Grafikprozessor. Dieser wird kurz auch GPU (Graphics Processing Unit) in Anlehnung an den Zentralprozessor (CPU) genannt. Die GPU bestimmt im wesentlichen Maße das Potenzial, jedoch nicht immer auch die Leistungsfähigkeit einer Grafikkarte. So kann der stärkste DirectX-9-Chip durch seine Hardwareumgebung oder seine Taktrate ausgebremst werden. Im Gegenzug wird eine DirectX-8-GPU auch nicht durch Unmengen an Speicher oder enorme Taktraten jemals in die Lage versetzt, DirectX-9-Shader abzuarbeiten.
Von reinen 2D- und Videobeschleunigern in den Anfangstagen haben sich Grafikchips zu wahren Rechenmonstern entwickelt. Handelte es sich bei den ersten 3D-Chips noch um extrem spezialisierte Hilfsarbeiter, deren Funktionen fest verdrahtet und kaum programmierbar ausgelegt wurden, entwickelte sich neben der Geschwindigkeit vor allem der Grad an Programmierbarkeit immer weiter. Üblicherweise ist dies in entsprechende DirectX-Versionen eingeteilt, denen die einzelnen GPUs dann zugeordnet werden.
>> Shader-Einheiten
Die heute für die Spieleleistung maßgebliche Funktionseinheit innerhalb einer GPU sind die so genannten Shader-Einheiten. Diese werden in zwei Kategorien unterteilt. Je nachdem, an welchen Daten sie arbeiten, spricht man von Vertex oder Fragment Shadern. Vertex Shader bearbeiten die einzelnen Koordinaten oder Beleuchtungsvariablen der Eckpunkte ganzer Drei- oder Mehrecke (Polygone). Angeliefert werden diese Daten von der CPU.
Shader-Einheiten (Vertex Shader wie Fragment Shader) sind in modernen Grafikprozessoren jeweils mehrfach vorhanden. Man kann sie sich gut als Fahrbahnen auf der viel beschworenen Datenautobahn vorstellen: Je mehr Fahrspuren vorhanden sind, desto flüssiger kann der Verkehr rollen. Verengt sich die Fahrbahn an ungünstigen Stellen oder gibt es nicht genügend Ausfahrten, kommt es zum Stau.
>> Fragment versus Pixel Shader
Fragment Shader werden oftmals auch als Pixel Shader bezeichnet, da sie ihre Operationen auf der Ebene der Pixel, der kleinsten sichtbaren Bildelemente (Bildpunkte), durchführen. Verwirrend ist, dass man die Programme, mit denen sie gefüttert werden, ebenfalls so bezeichnet. Die aus dem OpenGL-Bereich stammende Fragment Shader-Bezeichnung beugt vor einem solchen Missverständnis vor. Im DirectX-Umfeld beharrt man jedoch häufig auf der Benennung Pixel Shader. Man sollte sich dieser Doppeldeutigkeit also zumindest bewusst sein. Bevor wir jedoch zu den Fragment Shadern kommen, werfen wir einen kurzen Blick auf die Teile der GPU, die von den künftigen Bildpunkten durchlaufen werden müssen:
Vertex Shader -> Triangle Setup -> Rasterization -> Fragment Shader -> ROPs -> Framebuffer
Der von der CPU kommende Kommandostrom enthält sämtliche Informationen, welche die GPU zum Berechnen (engl.: to render) des Bildes benötigt. Zunächst werden von der Vertex Fetch Unit die Eckpunkte (Vertizes, singular Vertex) eingelesen, die im Kommandostrom bezeichnet werden.
>> Vertex Shader
Als erste Shader-Einheit kommen die Vertex Shader zum Einsatz. Sie wenden so genannte Vertex-Programme auf Eckpunkte an und bewirken dabei zum Beispiel die Veränderung der Form eines Polygons, zu dem das jeweilige Vertex gehört. Anschließend werden die einzelnen Eckpunkte zu so genannten Primitiven (i. d. R.
Dreiecke, aber auch Punkte oder Linien sind möglich) zusammengefasst. Dies sind die geometrischen Grundgerüste, auf deren Basis die GPU ihre Berechnungen durchführt.
>> Triangle Setup
Danach wird über das Triangle Setup und die zugehörigen Clipping-Einheiten bestimmt, ob ein Primitive überhaupt sichtbar ist. Möglicherweise ist es komplett außerhalb des Sichtfeldes der Spielfigur oder von der falschen Seite sichtbar. Es könnte sich zum Beispiel um die Innenseite einer Kiste handeln, die man von außen nicht sehen kann.
>> Rasterizer
Der nun folgende Rasterisierungsprozess ordnet den zuvor beschriebenen Primitiven ihre Pixelinhalte zu. Aus den zuvor stetig verlaufenden Dreiecksseiten wird nun eine dem Pixelraster angepasste Treppe mit Stufen in Pixelgröße (siehe Zeichnung Rasterizer). Durch diesen Prozess, der das glatte Bild auf das Raster der Bildschirmauflösung abbildet, entsteht auch Kanten-Aliasing die berüchtigten wandernden Treppcheneffekte.
ImVerlauf der Rasterisierung wird mittels der HSR-Einheiten [HSR = Hidden Surface Removal, das (vorzeitige) Entfernen verdeckter Flächen] bestimmt, welche Pixel überhaupt noch weiterberechnet werden müssen und welche bereits durch näher zum Betrachter liegende Pixel überdeckt werden. Diese können bereits jetzt von der weiteren Berechnung ausgeschlossen werden. Um dieses Verfahren noch effizienter zu gestalten, können hier deutlich mehr Quads verworfen als später gerendert werden. Der Geforce6 erreicht bis zu 64 verworfene Pixel pro Takt, die Radeon X800/850 bis zu 256.
>> Fragment Shader
Ist der Rasterisierungsprozess abgeschlossen, geht es in die Fragment oder Pixel Shader weiter. Hier werden pixelweise Berechnungen durchgeführt. Aufgrund von Einsparungen in der Steuerlogik kann immer nur für jeweils einen Block von 2x2 Pixeln, ein so genanntes Pixel Quad oder eine Quad-Pipeline, dieselbe Berechnung (SIMD = single instruction multiple data) durchgeführt werden. Die Programme, in denen die Anweisungen für die Fragment-Shader-Einheiten zusammengefasst sind, nennt man im DirectX-Jargon Pixel Shader.
Diese Fragment Shader sind nun das, was der Karte einen Großteil ihrer Geschwindigkeit verleiht oder sie eben dieser beraubt. Das liegt zum einen daran, dass die Anzahl der Pixel mit der Bildschirmauflösung skaliert, während das bei der Anzahl z. B. der Vertizes nicht der Fall ist. Zum anderen liegt es auch darin begründet, dass die Menge an Arbeit, die eine einzelne Quad-Pipeline pro Takt erledigen kann, je nach GPU-Hersteller und Situation drastisch variieren kann. Eine gegebene Szene in einem 3D-Spiel hat unabhängig von der gewählten Bildschirmauflösung eine feste Anzahl an Dreiecken. Wie groß diese Dreiecke jedoch sind, sprich, wie viele Pixel berechnet werden müssen, ist unterschiedlich.
>> Details der Fragment Shader
Jedes Pixel Quad besteht aus vier Kanälen mit jeweils mindestens einer arithmetischen Einheit (Arithmetic Logic Unit, ALU) und diversen, unterschiedlich mächtigen Hilfsarbeitern. Diese Hilfseinheiten wiederum wenden ihre Funktionen auf die vier Bestandteile der Pixelinformationen an: den roten, grünen und blauen Farbkanal sowie den Alpha-Anteil. Letzterer ist üblicherweise für die Transparenz zuständig.
Pro Pixel Quad sind also mindestens 16 Rechenoperationen (4 Farbkanäle x 4 Pixel) möglich, wenn die Architektur voll ausgelastet wird. Hier ist aber bereits der erste Stolperstein. Unter anderem aufgrund eines zu kleinen temporären Registerspeichers, in dem die Werte zwischen Beginn und Ende eines Shader-Programms zwischengelagert werden, kam beispielsweise die Geforce-FX-Reihe kaum jemals auch nur in die Nähe dieses maximalen Durchsatzes. Auch die Geforce6-Reihe leidet noch bis zu einem gewissen Grad an diesem Problem.
Außerdem haben die Fragment Shader moderner Radeon- und Geforce6-GPUs die Fähigkeit, die vier Farbkanäle aufzuteilen. Erstere in einem festen 3:1-Verhältnis, sodass man eine Berechnung für drei Kanäle (z. B. Rot, Grün und Blau, RGB) und eine weitere Berechnung für den vierten, den Alpha-Kanal, durchführen kann. Die Geforce6-Reihe beherrscht zusätzlich eine Aufteilungsmöglichkeit in 2:2-Kanäle. Das erhöht die Flexibilität nochmals. Zudem verfügen Geforce6-Prozessoren über eine zweite, teilweise von der ersten abhängige Shader-Einheit, die im Idealfall die Rechenleistung pro Takt verdoppeln kann. Hinzu kommen die teils sehr spezialisierten Berechnungen der Hilfseinheiten, über die sowohl Radeon als auch Geforce verfügen.
Wenn nun ein Shader-Programm eine Berechnung mithilfe der Texturdaten durchführen soll, wird das über die Shader-Einheit veranlasst und diese bei den Geforce-GPUs für die Dauer der Texturoperation blockiert. Die Radeons verfügen dazu über eine separate Textur-ALU und können dies quasi nebenbei erledigen. Die dafür zuständige Texture Mapping Unit (TMU) holt sich dann die benötigten Texturdaten aus dem lokalen Speicher der Grafikkarte und verrechnet diese in einem (bilineare Filterung), zwei (trilinear) oder mehreren Durchgängen (anisotrope Filterung). Sind alle Instruktionen für einen bestimmten 2x2-Block an Bildpunkten abgearbeitet, geht es in die ROPs weiter.
>> ROPs
Das Kürzel ROP steht für Raster Operator. Diese geben dem Pixel sozusagen den letzten Feinschliff. Hier werden sowohl die endgültigen Farbwerte in den Bildschirmpuffer geschrieben als auch diverse andere Operationen für jedes Pixel bzw. Subpixel durchgeführt. So finden hier zum Beispiel Aktualisierungen des Z-Buffers statt, der Tiefeninformationen enthält. Aber auch das Blending, welches für das Zusammenrechnen verschiedener Texturschichten eingesetzt wird, übernehmen die ROPs. Auch finden hier Stencil-Operationen statt, womit zum Beispiel einfarbige, meist schwarze Schatten mit scharfen Grenzen erzeugt werden.
Im Falle von Anti-Aliasing wird hier auch die endgültige Sichtbarkeitsprüfung für die einzelnen Subpixel (AA-Sample) durchgeführt. Einiges an Vorarbeit hierfür kommt schon aus dem Rasterisierungsteil und wird in den ROPs komplettiert. Je nach Grad des Anti-Aliasings (2x AA, 4x AA usw.) geschieht das in einem einzigen Taktzyklus oder in mehreren Durchläufen. Üblich ist, dass zwei Subpixel pro Takt und ROP geprüft werden können. So wäre 2x FSAA, allein von den ROPs her, quasi ohne Leistungsverlust möglich. Für 4x FSAA sind üblicherweise zwei Durchgänge durch die ROPs vonnöten, sodass sich die Leistung im Extremfall halbiert.
>> Speicher-Interface
Bezeichnet man die GPU mit ihren parallelen Verarbeitungseinheiten als Autobahn, so kann man sich das Speicher-Interface als Zubringer vorstellen. Wenn es zu wenige Auffahrten gibt, bleibt die Autobahn leer. Gibt es zu wenige Abfahrten, staut sich der Verkehr.
Das Speicher-Interface bestimmt neben der GPU und ihren Taktraten die Leistungsfähigkeit moderner Grafikbeschleuniger entscheidend mit. Die maximale Bitbreite und die daraus resultierende Speicherbandbreite entscheiden darüber, ob die GPU ausreichend mit Daten versorgt wird [Beispiel für 6600 GT: 500 MHz Takt x 2 (DDR) x 128 Bit/8 (Umrechnung in Byte) = 16,0 GByte/s]. Anderenfalls vergeudet sie einen Teil ihres Potenzials mit Nichtstun und Warten auf das VRAM (Video-RAM, lokaler Grafikspeicher). Dabei gilt: Je leistungsfähiger die GPU, desto eher reicht ihre Geschwindigkeit auch für höhere Qualitätseinstellungen. Darunter fällt beispielsweise aktivierte Kantenglättung, welche die Anforderungen an die verfügbare Bandbreite erhöht. Aktuelle High-End-Pixelschleudern verfügen über ein 256 Bit breites Interface, welches dazu noch im DDR-Verfahren arbeitet und somit pro Takt 2x 256 Bit übertragen kann. Die meisten Mid-Range-Karten müssen dagegen mit einer 128-Bit-DDR-Anbindung vorlieb nehmen, sind aber oft höher getaktet. Vorsicht sollte man bei Karten walten lassen, die aus Gründen der Kostenersparnis nur über ein kastriertes Speicher-Interface verfügen. 64 Bit genügen für aktuelle Spiele in adäquater Auflösung nur selten, zumal sie oftmals noch mit niedrig taktendem Speicher verknüpft sind.
Gleichzeitig sollen die einzelnen Komponenten und Merkmale so prägnant dargestellt werden, dass möglichst viel davon auch hängen bleibt. Nichts ist anstrengender, als bei der Suche nach einer wichtigen Info erst mühsam das halbe Internet durchsuchen und richtige von falschen Aussagen trennen zu müssen.
Inhalt:
>> Die GPU: das Kernstück
>> Shader-Einheiten
>> Fragment versus Pixel Shader
>> Vertex Shader
>> Triangle Setup
>> Rasterizer
>> Fragment Shader
>> Details der Fragment Shader
>> ROPs
>> Speicher-Interface
>> Die GPU: das Kernstück
Kernstück und oft genug wichtigstes Merkmal einer modernen Grafikkarte ist der darauf verbaute Grafikprozessor. Dieser wird kurz auch GPU (Graphics Processing Unit) in Anlehnung an den Zentralprozessor (CPU) genannt. Die GPU bestimmt im wesentlichen Maße das Potenzial, jedoch nicht immer auch die Leistungsfähigkeit einer Grafikkarte. So kann der stärkste DirectX-9-Chip durch seine Hardwareumgebung oder seine Taktrate ausgebremst werden. Im Gegenzug wird eine DirectX-8-GPU auch nicht durch Unmengen an Speicher oder enorme Taktraten jemals in die Lage versetzt, DirectX-9-Shader abzuarbeiten.
Von reinen 2D- und Videobeschleunigern in den Anfangstagen haben sich Grafikchips zu wahren Rechenmonstern entwickelt. Handelte es sich bei den ersten 3D-Chips noch um extrem spezialisierte Hilfsarbeiter, deren Funktionen fest verdrahtet und kaum programmierbar ausgelegt wurden, entwickelte sich neben der Geschwindigkeit vor allem der Grad an Programmierbarkeit immer weiter. Üblicherweise ist dies in entsprechende DirectX-Versionen eingeteilt, denen die einzelnen GPUs dann zugeordnet werden.
>> Shader-Einheiten
Die heute für die Spieleleistung maßgebliche Funktionseinheit innerhalb einer GPU sind die so genannten Shader-Einheiten. Diese werden in zwei Kategorien unterteilt. Je nachdem, an welchen Daten sie arbeiten, spricht man von Vertex oder Fragment Shadern. Vertex Shader bearbeiten die einzelnen Koordinaten oder Beleuchtungsvariablen der Eckpunkte ganzer Drei- oder Mehrecke (Polygone). Angeliefert werden diese Daten von der CPU.
Shader-Einheiten (Vertex Shader wie Fragment Shader) sind in modernen Grafikprozessoren jeweils mehrfach vorhanden. Man kann sie sich gut als Fahrbahnen auf der viel beschworenen Datenautobahn vorstellen: Je mehr Fahrspuren vorhanden sind, desto flüssiger kann der Verkehr rollen. Verengt sich die Fahrbahn an ungünstigen Stellen oder gibt es nicht genügend Ausfahrten, kommt es zum Stau.
>> Fragment versus Pixel Shader
Fragment Shader werden oftmals auch als Pixel Shader bezeichnet, da sie ihre Operationen auf der Ebene der Pixel, der kleinsten sichtbaren Bildelemente (Bildpunkte), durchführen. Verwirrend ist, dass man die Programme, mit denen sie gefüttert werden, ebenfalls so bezeichnet. Die aus dem OpenGL-Bereich stammende Fragment Shader-Bezeichnung beugt vor einem solchen Missverständnis vor. Im DirectX-Umfeld beharrt man jedoch häufig auf der Benennung Pixel Shader. Man sollte sich dieser Doppeldeutigkeit also zumindest bewusst sein. Bevor wir jedoch zu den Fragment Shadern kommen, werfen wir einen kurzen Blick auf die Teile der GPU, die von den künftigen Bildpunkten durchlaufen werden müssen:
Vertex Shader -> Triangle Setup -> Rasterization -> Fragment Shader -> ROPs -> Framebuffer
Der von der CPU kommende Kommandostrom enthält sämtliche Informationen, welche die GPU zum Berechnen (engl.: to render) des Bildes benötigt. Zunächst werden von der Vertex Fetch Unit die Eckpunkte (Vertizes, singular Vertex) eingelesen, die im Kommandostrom bezeichnet werden.
>> Vertex Shader
Als erste Shader-Einheit kommen die Vertex Shader zum Einsatz. Sie wenden so genannte Vertex-Programme auf Eckpunkte an und bewirken dabei zum Beispiel die Veränderung der Form eines Polygons, zu dem das jeweilige Vertex gehört. Anschließend werden die einzelnen Eckpunkte zu so genannten Primitiven (i. d. R.
Dreiecke, aber auch Punkte oder Linien sind möglich) zusammengefasst. Dies sind die geometrischen Grundgerüste, auf deren Basis die GPU ihre Berechnungen durchführt.
>> Triangle Setup
Danach wird über das Triangle Setup und die zugehörigen Clipping-Einheiten bestimmt, ob ein Primitive überhaupt sichtbar ist. Möglicherweise ist es komplett außerhalb des Sichtfeldes der Spielfigur oder von der falschen Seite sichtbar. Es könnte sich zum Beispiel um die Innenseite einer Kiste handeln, die man von außen nicht sehen kann.
>> Rasterizer
Der nun folgende Rasterisierungsprozess ordnet den zuvor beschriebenen Primitiven ihre Pixelinhalte zu. Aus den zuvor stetig verlaufenden Dreiecksseiten wird nun eine dem Pixelraster angepasste Treppe mit Stufen in Pixelgröße (siehe Zeichnung Rasterizer). Durch diesen Prozess, der das glatte Bild auf das Raster der Bildschirmauflösung abbildet, entsteht auch Kanten-Aliasing die berüchtigten wandernden Treppcheneffekte.
ImVerlauf der Rasterisierung wird mittels der HSR-Einheiten [HSR = Hidden Surface Removal, das (vorzeitige) Entfernen verdeckter Flächen] bestimmt, welche Pixel überhaupt noch weiterberechnet werden müssen und welche bereits durch näher zum Betrachter liegende Pixel überdeckt werden. Diese können bereits jetzt von der weiteren Berechnung ausgeschlossen werden. Um dieses Verfahren noch effizienter zu gestalten, können hier deutlich mehr Quads verworfen als später gerendert werden. Der Geforce6 erreicht bis zu 64 verworfene Pixel pro Takt, die Radeon X800/850 bis zu 256.
>> Fragment Shader
Ist der Rasterisierungsprozess abgeschlossen, geht es in die Fragment oder Pixel Shader weiter. Hier werden pixelweise Berechnungen durchgeführt. Aufgrund von Einsparungen in der Steuerlogik kann immer nur für jeweils einen Block von 2x2 Pixeln, ein so genanntes Pixel Quad oder eine Quad-Pipeline, dieselbe Berechnung (SIMD = single instruction multiple data) durchgeführt werden. Die Programme, in denen die Anweisungen für die Fragment-Shader-Einheiten zusammengefasst sind, nennt man im DirectX-Jargon Pixel Shader.
Diese Fragment Shader sind nun das, was der Karte einen Großteil ihrer Geschwindigkeit verleiht oder sie eben dieser beraubt. Das liegt zum einen daran, dass die Anzahl der Pixel mit der Bildschirmauflösung skaliert, während das bei der Anzahl z. B. der Vertizes nicht der Fall ist. Zum anderen liegt es auch darin begründet, dass die Menge an Arbeit, die eine einzelne Quad-Pipeline pro Takt erledigen kann, je nach GPU-Hersteller und Situation drastisch variieren kann. Eine gegebene Szene in einem 3D-Spiel hat unabhängig von der gewählten Bildschirmauflösung eine feste Anzahl an Dreiecken. Wie groß diese Dreiecke jedoch sind, sprich, wie viele Pixel berechnet werden müssen, ist unterschiedlich.
>> Details der Fragment Shader
Jedes Pixel Quad besteht aus vier Kanälen mit jeweils mindestens einer arithmetischen Einheit (Arithmetic Logic Unit, ALU) und diversen, unterschiedlich mächtigen Hilfsarbeitern. Diese Hilfseinheiten wiederum wenden ihre Funktionen auf die vier Bestandteile der Pixelinformationen an: den roten, grünen und blauen Farbkanal sowie den Alpha-Anteil. Letzterer ist üblicherweise für die Transparenz zuständig.
Pro Pixel Quad sind also mindestens 16 Rechenoperationen (4 Farbkanäle x 4 Pixel) möglich, wenn die Architektur voll ausgelastet wird. Hier ist aber bereits der erste Stolperstein. Unter anderem aufgrund eines zu kleinen temporären Registerspeichers, in dem die Werte zwischen Beginn und Ende eines Shader-Programms zwischengelagert werden, kam beispielsweise die Geforce-FX-Reihe kaum jemals auch nur in die Nähe dieses maximalen Durchsatzes. Auch die Geforce6-Reihe leidet noch bis zu einem gewissen Grad an diesem Problem.
Außerdem haben die Fragment Shader moderner Radeon- und Geforce6-GPUs die Fähigkeit, die vier Farbkanäle aufzuteilen. Erstere in einem festen 3:1-Verhältnis, sodass man eine Berechnung für drei Kanäle (z. B. Rot, Grün und Blau, RGB) und eine weitere Berechnung für den vierten, den Alpha-Kanal, durchführen kann. Die Geforce6-Reihe beherrscht zusätzlich eine Aufteilungsmöglichkeit in 2:2-Kanäle. Das erhöht die Flexibilität nochmals. Zudem verfügen Geforce6-Prozessoren über eine zweite, teilweise von der ersten abhängige Shader-Einheit, die im Idealfall die Rechenleistung pro Takt verdoppeln kann. Hinzu kommen die teils sehr spezialisierten Berechnungen der Hilfseinheiten, über die sowohl Radeon als auch Geforce verfügen.
Wenn nun ein Shader-Programm eine Berechnung mithilfe der Texturdaten durchführen soll, wird das über die Shader-Einheit veranlasst und diese bei den Geforce-GPUs für die Dauer der Texturoperation blockiert. Die Radeons verfügen dazu über eine separate Textur-ALU und können dies quasi nebenbei erledigen. Die dafür zuständige Texture Mapping Unit (TMU) holt sich dann die benötigten Texturdaten aus dem lokalen Speicher der Grafikkarte und verrechnet diese in einem (bilineare Filterung), zwei (trilinear) oder mehreren Durchgängen (anisotrope Filterung). Sind alle Instruktionen für einen bestimmten 2x2-Block an Bildpunkten abgearbeitet, geht es in die ROPs weiter.
>> ROPs
Das Kürzel ROP steht für Raster Operator. Diese geben dem Pixel sozusagen den letzten Feinschliff. Hier werden sowohl die endgültigen Farbwerte in den Bildschirmpuffer geschrieben als auch diverse andere Operationen für jedes Pixel bzw. Subpixel durchgeführt. So finden hier zum Beispiel Aktualisierungen des Z-Buffers statt, der Tiefeninformationen enthält. Aber auch das Blending, welches für das Zusammenrechnen verschiedener Texturschichten eingesetzt wird, übernehmen die ROPs. Auch finden hier Stencil-Operationen statt, womit zum Beispiel einfarbige, meist schwarze Schatten mit scharfen Grenzen erzeugt werden.
Im Falle von Anti-Aliasing wird hier auch die endgültige Sichtbarkeitsprüfung für die einzelnen Subpixel (AA-Sample) durchgeführt. Einiges an Vorarbeit hierfür kommt schon aus dem Rasterisierungsteil und wird in den ROPs komplettiert. Je nach Grad des Anti-Aliasings (2x AA, 4x AA usw.) geschieht das in einem einzigen Taktzyklus oder in mehreren Durchläufen. Üblich ist, dass zwei Subpixel pro Takt und ROP geprüft werden können. So wäre 2x FSAA, allein von den ROPs her, quasi ohne Leistungsverlust möglich. Für 4x FSAA sind üblicherweise zwei Durchgänge durch die ROPs vonnöten, sodass sich die Leistung im Extremfall halbiert.
>> Speicher-Interface
Bezeichnet man die GPU mit ihren parallelen Verarbeitungseinheiten als Autobahn, so kann man sich das Speicher-Interface als Zubringer vorstellen. Wenn es zu wenige Auffahrten gibt, bleibt die Autobahn leer. Gibt es zu wenige Abfahrten, staut sich der Verkehr.
Das Speicher-Interface bestimmt neben der GPU und ihren Taktraten die Leistungsfähigkeit moderner Grafikbeschleuniger entscheidend mit. Die maximale Bitbreite und die daraus resultierende Speicherbandbreite entscheiden darüber, ob die GPU ausreichend mit Daten versorgt wird [Beispiel für 6600 GT: 500 MHz Takt x 2 (DDR) x 128 Bit/8 (Umrechnung in Byte) = 16,0 GByte/s]. Anderenfalls vergeudet sie einen Teil ihres Potenzials mit Nichtstun und Warten auf das VRAM (Video-RAM, lokaler Grafikspeicher). Dabei gilt: Je leistungsfähiger die GPU, desto eher reicht ihre Geschwindigkeit auch für höhere Qualitätseinstellungen. Darunter fällt beispielsweise aktivierte Kantenglättung, welche die Anforderungen an die verfügbare Bandbreite erhöht. Aktuelle High-End-Pixelschleudern verfügen über ein 256 Bit breites Interface, welches dazu noch im DDR-Verfahren arbeitet und somit pro Takt 2x 256 Bit übertragen kann. Die meisten Mid-Range-Karten müssen dagegen mit einer 128-Bit-DDR-Anbindung vorlieb nehmen, sind aber oft höher getaktet. Vorsicht sollte man bei Karten walten lassen, die aus Gründen der Kostenersparnis nur über ein kastriertes Speicher-Interface verfügen. 64 Bit genügen für aktuelle Spiele in adäquater Auflösung nur selten, zumal sie oftmals noch mit niedrig taktendem Speicher verknüpft sind.