-
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft die Graphikverarbeitung in einem
Computersystem und spezifischer ein Verfahren und ein System zum
effizienteren Rendern eines graphischen Bildes.
-
HINTERGRUND DER ERFINDUNG
-
Ein
herkömmliches
Computer-Graphiksystem kann ein graphisches Bild auf einem Bildschirm anzeigen.
Das graphische Bild umfasst typischerweise eine Mehrzahl an Objekten.
Der Bildschirm umfasst eine Mehrzahl von als Pixel bekannten Anzeigeelementen,
die typischerweise in einem Gitter angeordnet sind. Zur Anzeige
von Objekten teilt ein herkömmliches
Computer-Graphiksystem typischerweise die Objekte in eine Mehrzahl
von Polygonen auf. Das herkömmliche
System rendert die Polygone dann typischerweise in einer bestimmten
Reihenfolge. Bei einer dreidimensionalen Szene werden die Polygone
im Allgemeinen, gemessen von der Sichtebene des Bildschirms, von
hinten nach vorne gerendert. Ebenso kann eine zweidimensionale Szene
angezeigt werden, wobei die Polygone basierend auf ihrer Schicht
gerendert werden. Oberflächlichere Schichten
verdecken tiefere Schichten.
-
Zum
Rendern des graphischen Bildes rendern herkömmliche Systeme typischerweise
die Mehrzahl an Objekten Polygon für Polygon. Typischerweise wird
eine Anzeigeliste erstellt. Die Anzeigeliste stellt die Polygone
in der Reihenfolge bereit, in der die Polygone gerendert werden
sollen. Ein herkömmliches
Graphiksystem rendert dann typischerweise ein erstes Polygon in
der Anzeigeliste, ungeachtet der Pixelanzahl oder -positionen, die
das Polygon überschneidet.
Die Daten für
die Pixel in dem Polygon werden typischerweise von links nach rechts und
von oben nach unten im Polygon gerendert. Das herkömmliche
System fährt
so lange damit fort, das graphisch Bild Polygon für Polygon
zu rendern, bis alle Polygone gerendert worden sind. Bei einem anderen
herkömmlichen
System werden Tiles gerendert. Ein Tile (Kachel) ist typischerweise
ein zweidimensionales Quadrat, das n×n Pixel enthält. Zum Rendern
des Tiles werden die Pixel von links nach rechts und von oben nach
unten im Tile gerendert.
-
US 5 363 475 offenbart eine
Vorrichtung zum Generieren eines Bildes anhand von Daten, die ein Model
definieren, das eine Mehrzahl undurchsichtiger und durchsich tiger
Merkmale umfasst. Das Bild soll eine Ansicht des Modells von einer
vorgegebenen Augenposition aus darstellen und besteht aus einer
Anordnung von Bildschirmraumpixeln (screen space Pixels). Der Bildbereich
ist in eine Anordnung von Teilbereichen aufgeteilt, von denen jeder
wenigstens ein Pixel abdeckt. Für
jedes Merkmal in dem Modell, das von der Augenposition aus potentiell
sichtbar ist, wird ein Test durchgeführt, um zu bestimmen, welcher
der Teilbereiche wenigstens teilweise durch dieses Merkmal abgedeckt
ist. Bei jedem Merkmal, das einen Abtastpunkt abdeckt, wird eine
Funktion des Abstands von der Augenposition zu diesem Merkmal am
Abtastpunkt bestimmt. Es wird eine Ausgabe für jedes Pixel in einem Teilbereich
erzeugt, wobei die Pixelausgabe den kombinierten Effekten der Abtastpunktausgaben
aller Abtastpunkte entspricht, die zu diesem Pixel beitragen, wobei
die Pixelausgaben angezeigt werden.
-
Es
kann ebenfalls auf das
US-Patent 5,886,701 Bezug
genommen werden. Dieses offenbart ein System, das ein Bild in "Chunks" (Brocken) unterteilt.
Siehe Spalte 9, Zeilen 54–56.
Das System rendert das Bild durch "Tiling" einzelner Primitiver (auch als Polygone
bekannt) Primitive für
Primitive. Somit rendert das System "Chunks" auf einer Pro-Primitiven-Basis.
-
Es
kann ebenfalls auf das
US-Patent 5,598,517 Bezug
genommen werden. Das
US-Patent 5,598,517 beschreibt
ein Mehr-Ebenen-Abtastsystem (multi-level scanning system) zum Rendern von
Primitiven (Polygonen), wobei Spans (eine Anordnung von Pixeln)
innerhalb einer Primitiven abgetastet und dann verarbeitet werden.
Das
US-Patent 5,598,517 beschreibet
ein Graphiksystem, bei dem die Primitiven, die Teil von Objekten
im Bildschirm sind, in Spans aufgeteilt werden. Die Spans in einer Primitiven
grenzen aneinander an, überlappen
einander nicht und werden in Rasterreihenfolge gerendert. Spans
und Abschnitte von Spans außerhalb
der aktuell gerenderten Primitiven werden nicht abgetastet. Des
Weiteren werden bei einer bestimmten Primitiven nur Spans verarbeitet,
die die Primitive überlappen.
Folglich beschreibt das
US-Patent
5,598,517 das Abtasten der Pixel in einer "partiellen" Rasterabfolge. Sobald
eine bestimmte Primitive abgetastet worden ist, werden die Spans
in der nächsten
Primitiven abgetastet. Somit werden die Daten für das Bild Primitive für Primitive
gerendert. Bei der im
US-Patent
5,598,517 beschriebenen alternativen Ausführungsform
wird eine Primitive in Panels (Felder) unterteilt, die aus mehreren
Spans bestehen. Die Spans in einem Panel werden abgetastet und dann
werden die Panels einer Primitiven abgetastet. Somit wird die Szene
immer noch Primitive für
Primitive gerendert. Folglich beschreibt das
US-Patent 5,598,517 das Rendern eines
Frames in einer "partiellen" Rasterreihenfolge
durch Rendern von Spans in Primitiven in Rasterreihenfolge. Die
Spans befinden sich jedoch nur innerhalb einer Primitiven. Das
US-Patent 5,598,517 rendert
daher nur die Spans eines Polygons, das den gesamten Bildschirm
einnimmt, in Rasterreihenfolge. Die Spans grenzen nicht unbedingt
aneinander an und decken, ungeachtet der Größe der Primitiven, nicht den
gesamten Bildschirm ab.
-
Obgleich
diese herkömmlichen
Verfahren funktionieren, wird ein Durchschnittsfachmann auf dem
Gebiet leicht erkennen, dass es erwünscht ist, die Daten für ein Bild
in Rasterreihenfolge bereitzustellen. Des Weiteren wäre es erwünscht, das
Bild effizient zu rendern.
-
Demgemäß besteht
Bedarf an einem System und einem Verfahren zum effizienteren Rendern eines
graphischen Bildes. Die vorliegende Erfindung widmet sich diesem
Bedarf.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die
vorliegende Erfindung sieht ein Verfahren und ein System zum Bereitstellen
eines graphischen Bildes auf einem Bildschirm vor. Der Bildschirm
umfasst eine Mehrzahl an Pixeln. Die Daten umfassen eine Mehrzahl
von Fragmenten des mindestens einen Objekts. Die Mehrzahl an Fragmenten überschneidet
einen ersten Teil der Mehrzahl an Pixeln. Das Verfahren und das
System umfassen das Definieren einer Mehrzahl an Makropixeln. Jedes
der Mehrzahl an Makropixeln umfasst einen zweiten Teil der Mehrzahl
an Pixeln. Der zweite Teil der Mehrzahl an Pixeln besteht aus aneinander
angrenzenden Pixeln und umfasst n Pixel des zweiten Teils der Mehrzahl
an Pixeln in einer ersten Richtung und m Pixel des zweiten Teils
der Mehrzahl an Pixeln in einer zweiten Richtung. Das Verfahren
und das System umfassen ferner das Rendern der Mehrzahl an Pixeln durch
Rendern einer Mehrzahl an Makropixeln in Rasterreihenfolge. Gemäß einem
Aspekt wird jedes Makropixel durch Rendern des zweiten Teils der Mehrzahl
an Pixeln Pixel für
Pixel gerendert. Jedes Pixel des zweiten Teils der Mehrzahl an Pixeln
wird durch Rendern der das Pixel überschneidenden Fragmente gerendert.
Gemäß einem
anderen Aspekt wird jedes Makropixel durch Rendern von das Makropixel überschneidenden
Makrofragmenten gerendert. Jedes ein Makropixel überschneidende Makrofragment
umfasst die Fragmente eines bestimmten Polygons, das das Makropixel überschneidet.
Die Daten werden dann Pixel für
Pixel ausgegeben. Eine Ausgabe für
jedes Pixel umfasst einen ersten Teil der Mehrzahl an das Pixel überschneidenden
Fragmenten.
-
Gemäß dem hierin
offenbaren System und Verfahren stellt die vorliegende Erfindung
das graphische Bild bereit, wobei die Kohärenz berücksichtigt wird, die zwischen
Pixeln in mehreren Dimensionen bestehen kann. Somit können Operationen,
wie etwa Musterabbildung (Texture Mapping) oder Caching, effizienter
durchgeführt
werden.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
eine Darstellung eines Bildschirms.
-
2 ist
eine Darstellung eines Systems zum Rendern von Pixeln in Rasterreihenfolge,
das Anti-Aliasing vorsieht.
-
3A ist
ein Flussdiagramm höherer
Ebene, das eine Ausführungsform
eines erfindungsgemäßen Verfahrens
darstellt.
-
3B ist
eine Darstellung, die eine Ausführungsform
eines erfindungsgemäßen Makropixels zeigt.
-
4A ist
ein Flussdiagramm, das eine erste Ausführungsform eines erfindungsgemäßen Verfahrens
darstellt.
-
4B ist
ein detaillierteres Flussdiagramm, das die erste Ausführungsform
eines erfindungsgemäßen Verfahrens
darstellt.
-
4C ist
ein Blockdiagramm, das die Reihenfolge darstellt, in der Pixel und
Makropixel bei der bevorzugten Version der ersten Ausführungsform
eines erfindungsgemäßen Verfahrens
gerendert werden.
-
5A ist
ein Flussdiagramm, das eine zweite Ausführungsform eines erfindungsgemäßen Verfahrens
darstellt.
-
5B ist
ein detaillierteres Flussdiagramm, das die zweite Ausführungsform
eines erfindungsgemäßen Verfahrens
darstellt.
-
5C ist
ein Blockdiagramm, das die Reihenfolge darstellt, in der Makrofragmente
und Makropixel gerendert werden.
-
6 ist
ein Blockdiagramm höherer
Ebene eines Systems, das das erfindungsgemäße Verfahren und System zum
Verarbeiten graphischer Bilder umfasst.
-
7 ist
eine Ausführungsform
einer erfindungsgemäßen Bilderzeugungseinheit.
-
8 ist
ein Blockdiagramm höherer
Ebene, das einen Teil einer Ausführungsform
der erfindungsgemäßen Bilderzeugungseinheit
darstellt.
-
9 ist
ein detaillierteres Blockdiagramm einer Ausführungsform der erfindungsgemäßen Bilderzeugungseinheit.
-
10 ist
ein Blockdiagramm einer bevorzugten Ausführungsform des erfindungsgemäßen Pixelsammlers.
-
GENAUE BESCHREIBUNG DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft eine Verbesserung der Verarbeitung
graphischer Bilder. Die folgende Beschreibung wird vorgelegt, um
es einem Durchschnittsfachmann auf dem Gebiet zu ermöglichen,
die Erfindung herzustellen und anzuwenden, und wird im Zusammenhang
mit einer Patentanmeldung und deren Anforderungen bereitgestellt.
Verschiedene Modifikationen der bevorzugten Ausführungsform sind für Fachleute
auf dem Gebiet leicht ersichtlich, wobei die hierin angegebenen
allgemeinen Grundlagen auch auf andere Ausführungsformen angewandt werden
können.
Die vorliegende Erfindung soll daher nicht auf die dargestellte
Ausführungsform
begrenzt sein, sondern soll in Übereinstimmung
mit den hierin beschriebenen Grundlagen und Merkmalen dem breitestmöglichen
Schutzumfang entsprechen.
-
1 ist
ein Blockdiagramm eines Bildschirms 1, der ein graphisches
Bild darstellt. Der Bildschirm umfasst eine Mehrzahl an Pixeln 6,
von denen nur eines beschriftet ist. Das graphische Bild umfasst die
Polygone 2, 3, 4 und 5, die
Teil eines oder mehrerer Objekte sein können. Jedes der Polygone 2, 3, 4 und 5 deckt
mehrere Pixel ab und umfasst eine Mehrzahl an Fragmenten. Jedes
Fragment umfasst Daten für
ein Pixel, das von dem entsprechenden Polygon überschnitten wird. Somit kann
ein Fragment die Farbe, Textur, α-Werte
und Tiefenwerte betreffende Daten für ein bestimmtes Polygon und
ein bestimmtes Pixel umfassen.
-
In
der US-Patentanmeldung Nr. 08/624,261, mit dem Titel "METHOD AND APPARATUS
FOR IDENTIFYING AND ELIMINATING THREE-DIMENSIONAL OBJECTS VISUALLY
OBSTRUCTED FROM A PLANAR SURFACE",
die am 29. März
1996 eingereicht, auf den Inhaber der vorliegenden Anmeldung übertragen
und inzwischen als
US-Patent
Nr. 5,962,181 veröffentlicht
wurde, sowie in der gleichzeitig anhängigen US-Patentanmeldung Nr. 08/624,260,
mit dem Titel "GRAPHICS
PROCESSORS, SYSTEM AND METHOD FOR GENERATING SCREEN PIXELS IN RASTER
ORDER UTILIZING A SINGLE INTERPOLATOR", die am 29. März 1996 eingereicht, auf den
Inhaber der vorliegenden Anmeldung übertragen und zwischenzeitlich
als
US-Patent Nr. 5,963,210 veröffentlicht
wurde, sind ein Verfahren und ein System zum Rendern des graphischen
Bildes in Rasterreihenfolge beschrieben. Die Rasterreihenfolge verläuft von
links nach rechts und von oben nach unten über den Bildschirm 1. Ein System,
das das graphische Bild in Rasterreihenfolge rendert und Anti-Aliasing
(Verminderung des Alias-Effekts oder Treppeneffekts) vorsieht, ist
in der gleichzeitig anhängigen
US-Patentanmeldung Nr. 09/239,413, mit dem Titel "METHOD AND SYSTEM FOR
PROVIDING EDGE ANTIALIASING",
die am 28. Januar 1999 eingereicht, auf den Inhaber der vorliegenden
Anmeldung übertragen
und zwischenzeitlich als
US-Patent
Nr. 6,906,728 veröffentlicht
wurde, beschrieben.
-
2 zeigt
ein Computersystem 10, das in den vorstehend genannten
gleichzeitig anhängigen Anmeldungen
beschrieben ist. Das Computer-Graphiksystem 10 umfasst
eine Zentraleinheit (CPU) 12, einen Bildschirm 14,
eine Benutzerschnittstelle 16, wie etwa eine Tastatur oder
Maus oder eine andere Kommunikationseinrichtung, einen Speicher 19 und eine
Bilderzeugungseinheit 20, die mit einem Bus 18 verbunden
sind. Der Bildschirm 14 umfasst einen Bildschirm, wie etwa
den Bildschirm 1. Der Bildschirm 14 könnte einen
Bildschirmspeicher (nicht gezeigt) umfassen, in den Pixel geschrieben
werden. Zur Anzeige von graphischen Bildern werden die Objekte in
Polygone unterteilt, die beim Rendern der Objekte zu verwenden sind.
Bei einer bevorzugten Ausführungsform
werden die Polygone in Rasterreihenfolge gerendert. Das heißt, Teile
der Polygone werden Pixel für
Pixel in der Reihenfolge der Pixel im Bildschirm 14 gerendert.
-
Die
Bilderzeugungseinheit 20 wird beim Rendern des graphischen
Bildes verwendet. Die Bilderzeugungseinheit umfasst eine Schnittstelle 21, die
mit dem Bus 18 verbunden ist. Die Schnittstelle 21 sendet
Daten an eine Datenverarbeitungseinheit 22. Der Prozessorblock 24 identifiziert
Daten, die Teile von Polygonen ("überschneidende
Polygone") beschreiben,
die den Bereich überschneiden,
der sich längs
einer Z-Achse von
einem ausgewählten
Pixel in einer X-Y-Ebene erstreckt, die einer Bildfläche des Bildschirms 14 entspricht.
Der Prozessorblock 24 kann eine Anzahl von Prozessoren
umfassen, die eine parallele Verarbeitung überschneidender Polygone ermöglichen.
Der Prozessorblock 24 gibt somit die Fragmente an, die
ein aktuell verarbeitetes Pixel überschneiden.
Eine Identifikations-/Beseitigungseinheit blockierter Objekte (Quick
Z) 26 empfängt
zumindest einen Teil des Fragments eines jeden überschneidenden Polygons, das
dem ausgewählten
Pixel zugeordnet ist, und beseitigt Teile der Fragmente überschneiden
Polygone, die blockiert sind.
-
Der
Interpolator 28 empfängt
die restlichen Fragmente der überschneidenden
Polygone für
das ausgewählte
Pixel und interpoliert die Daten, was das Interpolieren der Textur,
Farbe und Alphawerte des Fragments umfasst. Der Interpolator 28 stellt
außerdem
eine Abdeckmaske für
jedes Fragment bereit. Die Abdeckmaske gibt den Teil des Pixels
an, den das Fragment abdeckt. Die Fragmente der verbliebenen überschneidenden
Polygone werden von dem Interpolator 28 einem Hardware-Sortierer 30 zugeführt. Der
Hardware-Sortierer 30 sortiert die Fragmente der überschneidenden
Polygone basierend auf einem Schlüsselwert, wie etwa dem Z-Wert
oder Tiefenwert, des Fragments.
-
Eine
Anti-Aliasing-Einheit 40 führt das Anti-Aliasing unter
Verwendung der durch den Interpolator 28 bereitgestellten
Maske durch. Die Anti-Aliasing-Einheit 40 kann eine Z-Maskeneinheit 41,
einen Akkumulator 42 und eine oder mehrere Mischeinheiten 44 umfassen.
Die Anti-Aliasing-Einheit 40 akkumuliert Daten für Subpixel
in jedem Pixel. Bei Verwendung der Abdeckmaske können nur Daten für die Subpixel
akkumuliert werden, die das Fragment überschneidet und die zu dem
Subpixel beitragen können.
Die Daten für
die Subpixel werden dann kombiniert, um Daten für das Pixel bereitzustellen,
die einem Anti-Aliasing unterzogen wurden. Die einem Anti-Aliasing
unterzogenen Daten für
das ausgewählte
Pixel werden dem Bildschirm 14 zugeführt. Dieses Verfahren wird
für jedes
Pixel in Rasterreihenfolge fortgesetzt, während Daten für andere
Pixel durch die Pipeline der Bilderzeugungseinheit 20 laufen.
-
Die
vorstehend genannten gleichzeitig anhängigen Anmeldungen rendern
somit graphische Bilder in Rasterreihenfolge, und zwar von links
nach rechts und von oben nach unten längs des Bildschirms 14.
Zum Rendern der Bilder in Rasterreihenfolge werden die ein bestimmtes
Pixel überschneidenden
Fragmente gerendert. Dann werden die das nächste Pixel in der Rasterreihenfolge überschneidenden
Fragmente gerendert. Die Fragmente für die Pixel laufen bevorzugt
hintereinander durch den Großteil
der in den vorstehend genannten gleichzeitig anhängigen Anmeldungen beschrieben
Pipeline.
-
Obgleich
die vorstehend genannten gleichzeitig anhängigen Anmeldungen für ihre beabsichtigten
Zwecke gut funktionieren, ist eine größere Effizienz beim Rendern
graphischer Bilder erwünscht. Eine
größere Kohärenz würde eine
höhere
Effizienz vorsehen. Eine höhere
Kohärenz
tritt auf, wenn dieselben Daten beim Rendern eines Pixels verwendet werden,
die auch bei dem unmittelbar vorher gerenderten Pixel verwendet
wurden. Die Kohärenz
ist typischerweise niedriger, wenn die Pixel in Rasterreihenfolge
gerendert werden, da es wahrscheinlicher ist, dass Daten, die beim
Rendern eines Pixels verwendet wurden, nicht beim Rendern des nächsten Pixels
verwendet werden. Wenn beispielsweise eine Texturverarbeitung eines
Pixels durchgeführt
wird, wird eine erste Textur eines das Pixel überschneidenden Fragments gecacht
(zwischengespeichert). Die erste Textur wird typischerweise für mehrere
Fragmente verwendet, die Teil desselben Polygons sind. Wenn die
Pixel in Rasterreihenfolge gerendert werden, besteht eine große Wahrscheinlichkeit,
dass ein Fragment desselben Polygons das nächste gerenderte Pixel nicht überschneidet.
Es ist wahrscheinlicher, dass eine zweite Textur gecacht wird, um
das nächste
Pixel zu rendern. Daher kann die erste Textur aus dem Cache-Speicher
entfernt werden. Die erste Textur kann jedoch wieder benötigt werden, wenn
ein Pixel in der nächsten
Zeile oder Abtastlinie gerendert wird. Die erste Textur kann benötigt werden,
da ein anderes Fragment in demselben Polygon ein oder mehr Pixel
in der nächsten
Zeile überschneiden
kann. Wenn das Pixel in der nächsten
Zeile, das die erste Textur benötigt,
gerendert wird, ist es wahrscheinlicher, dass ein Cache-Miss (Cache-Verfehlung) auftritt,
da es wahrscheinlicher ist, dass die erste Textur aus dem Cache
entfernt worden ist. Ein erneutes Cachen der Textur verringert die
Effizienz des Renderns des graphischen Bildes. Daher wird mehr Zeit
benötigt,
um das graphische Bild zu rendern.
-
Die
vorliegende Erfindung sieht ein Verfahren und ein System zum Bereitstellen
eines graphischen Bildes auf einem Bildschirm vor. Der Bildschirm
umfasst eine Mehrzahl an Pixeln. Die Daten umfassen eine Mehrzahl
an Fragmenten des mindestens einen Objekts. Die Mehrzahl an Fragmenten überschneidet
einen ersten Teil der Mehrzahl an Pixeln. Das Verfahren und das
System umfassen das Bilden einer Mehrzahl an Makropixeln. Jedes
der Mehrzahl an Makropixeln umfasst einen zweiten Teil der Mehrzahl
an Pixeln. Der zweite Teil der Mehrzahl an Pixeln besteht aus aneinander
angrenzenden Pixeln und umfasst n Pixel des zweiten Teils der Mehrzahl
an Pixeln in einer ersten Richtung und m Pixel des zweiten Teils
der Mehrzahl an Pixeln in einer zweiten Richtung. Das Verfahren
und das System umfassen ferner das Rendern der Mehrzahl an Pixeln durch
Rendern einer Mehrzahl an Makropixeln in Rasterreihenfolge. Gemäß einem
Aspekt wird jedes Makropixel durch Rendern des zweiten Teils der Mehrzahl
an Pixeln Pixel für
Pixel gerendert. Jedes Pixel des zweiten Teils der Mehrzahl an Pixeln
wird durch Rendern der das Pixel überschneidenden Fragmente gerendert.
Gemäß einem
anderen Aspekt wird jedes Makropixel durch Rendern von das Makropixel überschneidenden
Makrofragmenten gerendert. Jedes ein Makropixel überschneidende Makrofragment
umfasst die Fragmente eines bestimmten Polygons, das das Makropixel überschneidet.
Die Daten werden dann Pixel für
Pixel ausgegeben. Eine Ausgabe für
jedes Pixel umfasst einen ersten Teil der Mehrzahl an das Pixel überschneidenden
Fragmenten.
-
Die
vorliegende Erfindung wird im Hinblick auf ein spezifisches System
beschrieben. Ein Durchschnittsfachmann auf dem Gebiet wird jedoch
leicht erkennen, dass dieses Verfahren und dieses System auch bei
anderen Systemen mit anderen Komponenten effizient arbeiten. Ebenso
kann die vorliegende Erfindung, obgleich sie im Zusammenhang mit
dem Rendern dreidimensionaler Bilder besprochen wird, beim Rendern
von Bildern mit anderen Dimensionen verwendet werden.
-
Zur
spezifischeren Veranschaulichung des erfindungsgemäßen Verfahrens
und Systems wird nun auf 3A Bezug
genommen, die ein Flussdiagramm höherer Ebene einer Ausführungsform
eines erfindungsgemäßen Verfahrens 100 zum
Rendern eines graphischen Bildes zeigt. Das Verfahren 100 wird
zum Rendern eines graphischen Bildes auf einem Bildschirm, wie etwa
dem Bildschirm 1, verwendet. Der Bildschirm umfasst eine
Mehrzahl an Pixeln, wie etwa das Pixel 6. Das graphische
Bild umfasst eine Mehrzahl an Objekten, die bevorzugt eine Mehrzahl
an Polygonen umfassen, wie etwa die Polygone 2, 3, 4 und 5.
Das graphische Bild wird auch durch eine Mehrzahl an Fragmenten
der Objekte beschrieben. Die Fragmente überschneiden irgendeinen Teil der
Pixel im Bildschirm. Die Fragmente überschneiden beispielsweise
die Pixel, die die Polygone 2, 3, 4 und 5 überschneiden.
-
In
Schritt 102 werden aus den Pixeln 6 Makropixel
gebildet. Die Makropixel umfassen einen Teil der Mehrzahl an Pixeln
auf dem Bildschirm. Das Makropixel umfasst Pixel in zwei Dimensionen.
Das Makropixel kann beispielsweise n Zeilen und m Spalten von Pixeln
umfassen. Das Makropixel hat bevorzugt eine quadratische Form, z.
B. 2×2,
4×4 oder
8×8 Pixel.
Bei einer Ausführungsform
beträgt
das Makropixel vier mal vier Pixel. 3B stellt
eine solche Ausführungsform
eines Makropixels 110 dar. Das Makropixel 110 umfasst
vier mal vier Pixel und enthält
insgesamt sechzehn Pixel. Bei einer bevorzugten Ausführungsform
umfasst das Makropixel jedoch acht mal acht Pixel.
-
Bezug
nehmend wieder auf 3A werden die Makropixel dann
in Schritt 104 in Rasterreihenfolge gerendert. Zum Rendern
der Makropixel wird jedes Pixel eines bestimmten Makropixels in
Schritt 104 gerendert. Dann werden die Pixel im nächsten Makropixel
gerendert. Somit werden die Makropixel unter Verwendung von Schritt 104 Makropixel
für Makropixel,
von links nach rechts und von oben nach unten längs des Bildschirms 1 gerendert.
Obgleich die Makropixel in Rasterreihenfolge gerendert werden, könnten die
Pixel in jedem Makropixel in mehreren Reihenfolgen gerendert werden.
Die Pixel werden bevorzugt auf eine von zwei Arten gerendert, die nachfolgend
besprochen sind. Bei einer bevorzugten Ausführungsform umfasst der Schritt 104 auch
das Neuordnen der gerenderten Daten, so dass die Daten für das graphische
Bild Pixel für
Pixel ausgegeben werden.
-
Da
die Makropixel in Rasterreihenfolge gerendert werden, kann das Verfahren 100 effizienter sein
als das Rendern einzelner Pixel in Rasterreihenfolge. In einem Makropixel
kann eine größere Kohärenz zwischen
Pixeln vorhanden sein, da die Makropixel Pixel in zwei Dimensionen
umfassen. Daher ist es wahrscheinlicher, dass Informationen, die
zum Rendern eines Pixels in ein Makropixel verwendet werden, auch
zum Rendern des nächsten
Pixels im Makropixel verwendet werden. Infolgedessen können Operationen,
wie etwa solche, die Caching nutzen, effizienter sein. Sobald Daten
in einem Cache gespeichert sind, ist es wahrscheinlicher, dass sie wieder
verwendet werden. Folglich sind Cache-Hits (Cache-Treffer) bei Verwendung
des Verfahrens 100 wahrscheinlicher. Des Weiteren ist es
wahrscheinlicher, dass, wenn ein Cache-Miss auftritt, ein Cache-Zugriff
für das
nächste
gerenderte Pixel ebenfalls zu einem Cache-Miss führen würde. Das Rendern der Makropixel
umfasst beispielsweise das Vorsehen einer Texturverarbeitung für jedes
Pixel in einem Makropixel. Die Texturverarbeitung wird effizienter
gemacht, da es, sobald eine Textur zur Verwendung beim Rendern eines
Pixels in einem Cache gespeichert wurde, wahrscheinlicher ist, dass
das nächste
Pixel ebenfalls die Textur verwendet. Daher ist das Rendern des
graphischen Bildes effizienter.
-
Die 4A und 4B stellen
detailliertere Flussdiagramme einer Ausführungsform eines Verfahrens
zum Rendern der Makropixel in Rasterreihenfolge dar. 4A stellt
eine erste Ausführungsform
eines Verfahrens 112 zum Rendern der Makropixel in Rasterreihenfolge
dar, wobei jedes Makropixel durch Rendern von Pixeln in jedem Makropixel
Pixel für
Pixel gerendert wird, bevorzugt von links nach rechts und von oben
nach unten im Makropixel. 4B stellt
ein detaillierteres Flussdiagramm der ersten Ausführungsform
eines Verfahrens 120 zum Rendern der Makropixel in Rasterreihenfolge
dar, wobei jedes Makropixel durch Pixel im Makropixel Pixel für Pixel
gerendert wird.
-
Bezug
nehmend nun auf 4A werden in Schritt 114 die
Fragmente der Polygone des graphischen Bildschirms so geordnet,
dass die Makropixel in Rasterreihenfolge und die Pixel in jedem
Makropixel in einer spezifischen Reihenfolge gerendert werden. Bei
einer bevorzugten Ausführungsform
wird Schritt 114 durchgeführt, indem die Fragmente, die Pixel
in einem bestimmten Makropixel überschneiden,
in Reihe miteinander platziert werden. Somit werden Fragmente, die
Pixel im ersten Makropixel im oberen linken Abschnitt des Bildschirms 1 überschneiden,
zusammen in der Pipeline platziert. Fragmente, die Pixel im nächsten Makropixel überschneiden,
werden als Nächstes
platziert. Darüber
hinaus werden im Schritt 114 außerdem bevorzugt die Fragmente
geordnet, die jedes Pixel in einem Makropixel überschneiden. Folglich werden
die Fragmente, die das erste Pixel in einem Makropixel überschneiden, als
Erstes platziert, worauf Fragmente folgen, die das zweite zu rendernde
Pixel überschneiden.
Bei einer bevorzugten Ausführungsform
werden die Pixel in einem Makropixel von links nach rechts und von
oben nach unten im Makropixel gerendert. Somit werden die Fragmente,
die das Pixel in der oberen linken Ecke jedes Makropixels überschneiden,
für dieses Makropixel
zuerst platziert. Bei einer bevorzugten Ausführungsform werden außerdem Fragmente,
die andere Pixel und somit andere Makropixel überschneiden, durch Versehen
jedes Fragments mit wenigstens einer Kennung oder Identifikation
("ID") voneinander unterschieden.
Fragmente können
beispielsweise mit einer "Nächstes"("N-")
oder "Letztes-"("L-")Kennung
versehen werden. N gibt an, dass das Fragment das nächste (oder
erste) Fragment für ein
Pixel ist. L gibt an, dass das Fragment das letzte zu rendernde
Fragment für
ein bestimmtes Pixel ist. Eine ähnliche
Kennung kann für
Makropixel vorgesehen werden oder es kann ein anderer Mechanismus zum
Unterscheiden von Makropixeln verwendet werden.
-
Sobald
die Fragmente geordnet sind, werden die Fragmente in Schritt 116 in
der vorgesehenen Reihenfolge gerendert. Somit werden die Makropixel
in Rasterreihenfolge und die Pixel in einem Makropixel in einer
gewählten
Reihenfolge gerendert. Darüber
hinaus werden alle ein bestimmtes Pixel überschneidenden Fragmente gerendert,
bevor ein das nächste
Pixel überschneidendes
Fragment gerendert wird. Sofern erwünscht, können die Fragmente dann in
Schritt 118 neu geordnet werden, so dass Daten für Pixel
von links nach rechts und von oben nach unten längs des Bildschirms 1 ausgegeben
werden. Unter Verwendung des Verfahrens 112 werden Daten
bevorzugt so verarbeitet und ausgegeben, dass ein Durchsatz von
einem Pixel pro Taktzyklus unter den meisten Bedingungen aufrechterhalten
wird. Daher können
die Daten für
das graphische Bild auch dann Pixel für Pixel in Rasterreihenfolge ausgegeben
werden, wenn die Daten Makropixel für Makropixel in Rasterreihenfolge,
anstatt Pixel für
Pixel in Rasterreihenfolge, gerendert wurden. Des Weiteren kann
das Verfahren 112, da das Verfahren 112 durch
Neuordnen der Daten ausgeführt
wird, mit nur geringfügigen
Veränderungen
am System 10 ausgeführt
werden.
-
Bezug
nehmend nun auf 4B ist ein detaillierteres Flussdiagramm
der zweiten Ausführungsform
eines Verfahrens 120 zum Rendern von Makropixeln in Rasterreihenfolge
und Pixel für
Pixel dargestellt. Ein erstes Makropixel wird in Schritt 122 als
das aktuell gerenderte Makropixel ausgewählt. Schritt 122 wird
bevorzugt durchgeführt,
indem bestimmt wird, dass eine Kennung ("ID")
eines Fragments angibt, dass das Fragment zu dem ersten zu rendernden
Makropixel gehört.
Das erste Makropixel umfasst die Pixel in der oberen linken Ecke
des Bildschirms 1, da die Makropixel in Rasterreihenfolge
gerendert werden. Ein Pixel im aktuellen Makropixel wird dann in
Schritt 124 zum Rendern ausgewählt. Die Pixel in einem Makropixel
werden bevorzugt von links nach rechts und von oben nach unten im
Makropixel gerendert. Die das aktuelle Pixel überschneidenden Fragmente werden
dann in Schritt 126 gerendert. In Schritt 128 wird
dann bestimmt, ob im aktuellen Makropixel noch weitere zu rendernde
Pixel vorhanden sind. Wenn ja, wird in Schritt 130 das nächste Pixel
als das aktuelle Pixel ausgewählt.
Das nächste
Pixel ist bevorzugt das nächste
Pixel in der Reihenfolge von links nach rechts und von oben nach unten
im Makropixel. Die Schritte 126 und 128 werden
dann wiederholt. Wenn im aktuellen Makropixel keine noch zu rendernden
Pixel mehr vorhanden sind, wird in Schritt 132 bestimmt,
ob alle Makropixel gerendert worden sind. Wenn nicht, wird in Schritt 134 das
nächste
Makropixel in der Rasterreihenfolge als das aktuelle Makropixel
ausgewählt.
Die Schritte 124 bis 134 werden dann wiederholt.
Wenn alle Makropixel im Bildschirm gerendert worden sind, werden
die Daten in Schritt 136 wahlweise neu geordnet, um Pixel
für Pixel
in Rasterreihenfolge ausgegeben zu werden. Unter Verwendung des
Verfahrens 120 werden die Daten bevorzugt so verarbeitet
und ausgegeben, dass ein Durchsatz von einem Pixel pro Taktzyklus
unter den meisten Bedingungen aufrechterhalten wird.
-
4C zeigt
mehrere Makropixel, die bei der bevorzugten Version der ersten Ausführungsform des
erfindungsgemäßen Verfahrens 112 oder 120 gerendert
werden. Zu Erläuterungszwecken,
wird davon ausgegangen, dass die Makropixel 110-1 bis 110-6 den
Bildschirm 1 bilden. Die Makropixel 110-1 bis 110-6 umfassen jeweils
sechzehn Pixel. Aus Klarheitsgründen
sind nur die Pixel A bis P im Makropixel 110-1 genauer
dargestellt. Die Makropixel 110-1 bis 110-6 werden
in Rasterreihenfolge gerendert. Daher wird zuerst das Makropixel 110-1 gerendert,
auf das in der Reihenfolge die Makropixel 110-2, 110-3, 110-4, 110-5 und 110-6 folgen.
Das Makropixel 110-1 stellt die bevorzugte Reihenfolge
dar, in der die Pixel in jedem Makropixel gerendert werden. Die
Pixel werden bevorzugt von links nach rechts und von oben nach unten
in einem Makropixel gerendert. Somit werden die Pixel A bis P bevorzugt
in alphabetischer Reihenfolge gerendert.
-
5A stellt
eine zweite Ausführungsform eines
Verfahrens 150 zum Rendern der Makropixel in Rasterreihenfolge
dar. Jedes Makropixel wird in Schritt 152 gerendert, indem
die Abschnitte von Polygonen, die das Makropixel überschneiden
("Makrofragmente"), Makrofragment
für Makrofragment gerendert
werden. Ein Makrofragment umfasst die Fragmente, die Teil desselben
Polygons sind und das Makropixel überschneiden. Schritt 152 wird
bevorzugt durch Rendern aller Fragmente desselben Polygons durchgeführt, die
Pixel im Makropixel überschneiden,
bevor die Fragmente eines anderen Polygons gerendert werden. Somit
werden die Abschnitte der Polygone, die jedes Makropixel überschneiden, zusammen
gerendert. Die Daten für
die Makrofragmente werden dann in Schritt 154 neu geordnet,
so dass die Daten für
die Pixel Pixel für
Pixel ausgegeben werden, bevorzugt von links nach rechts und von oben
nach unten längs
des Bildschirms 1. Somit können die Daten für das graphische
Bild auch dann Pixel für
Pixel in Rasterreihenfolge ausgegeben werden, wenn die Daten Makropixel
für Makropixel
in Rasterreihenfolge gerendert worden sind. Bei Verwendung des Verfahrens 150 werden
Daten bevorzugt so verarbeitet und ausgegeben, dass ein Durchsatz
von einem Pixel pro Taktzyklus unter den meisten Bedingungen aufrechterhalten
wird.
-
5B stellt
ein detaillierteres Flussdiagramm der zweiten Ausführungsform
eines Verfahrens 160 zum Rendern der Makropixel in Rasterreihenfolge
dar, bei dem jedes Makropixel Makrofragment für Makrofragment gerendert wird.
Ein erstes Makropixel wird in Schritt 162 als das aktuell
gerenderte Makropixel ausgewählt.
Schritt 162 wird bevorzugt durchgeführt, indem bestimmt wird, dass
eine Kennung ("ID") eines Fragments
angibt, dass das Fragment zu dem ersten zu rendernden Makropixel gehört. Das
erste Makropixel umfasst die Pixel in der oberen linken Ecke des
Bildschirms 1, da die Makropixel in Rasterreihenfolge gerendert
werden. Die das aktuelle Makropixel überschneidenden Makrofragmente
werden dann in Schritt 164 bestimmt. Schritt 164 umfasst
bevorzugt das Bestimmen der Fragmente, die Pixel im aktuellen Makropixel überschneiden, und
das Bestimmen, welche Fragmente, die Pixel im Makropixel überschneiden,
zu demselben Polygon gehören.
Es wird darauf hingewiesen, dass Schritt 164 bestimmen
könnte,
dass keine Makrofragmente das aktuelle Makropixel überschneiden.
Ein Makrofragment im aktuellen Makropixel wird dann in Schritt 166 als
das aktuelle zu rendernde Makrofragment ausgewählt. Die Pixel, die das aktuelle
Makrofragment überschneidet,
werden dann in Schritt 168 gerendert. Die Pixel im aktuellen
Makrofragment werden bevorzugt von links nach rechts und von oben
nach unten im Makropixel gerendert. Dann wird in Schritt 170 bestimmt,
ob im aktuellen Makropixel weitere noch zu rendernde Makrofragmente
vorhanden sind. Wenn ja, wird in Schritt 172 das nächste Makrofragment
als das aktuelle Makrofragment ausgewählt. Die Schritte 168 und 170 werden
dann wiederholt. Wenn im aktuellen Makropixel keine zu rendernden
Makrofragmente mehr vorhanden sind, wird in Schritt 174 bestimmt,
ob alle Makropixel gerendert worden sind. Wenn nicht, wird in Schritt 176 das nächste Makropixel
in der Rasterreihenfolge als das aktuelle Makropixel ausgewählt. Die
Schritte 164 bis 176 können dann wiederholt werden.
Wenn alle Makropixel im Bildschirm gerendert worden sind, werden
die Daten in Schritt 178 neu geordnet, um Pixel für Pixel,
bevorzugt in Rasterreihenfolge, ausgegeben zu werden. Bei Verwendung
des Verfahrens 160 werden Daten bevorzugt so verarbeitet
und ausgegeben, dass ein Durchsatz von einem Pixel pro Taktzyklus
unter den meisten Bedingungen aufrechterhalten wird.
-
5C stellt
mehrere Makropixel dar, die bei der bevorzugten Version der ersten
Ausführungsform eines
erfindungsgemäßen Verfahrens
gerendert werden. Zu Erläuterungszwecken,
wird davon ausgegangen, dass die Makropixel 110-1' bis 110-6' den Bildschirm 1 bilden.
Die Makropixel 110-1' bis 110-6' umfassen jeweils
sechzehn Pixel. Aus Klarheitsgründen
sind die Pixel nicht genauer dargestellt. Die Makropixel 110-1' bis 110-6' werden in Rasterreihenfolge
gerendert. Daher wird zuerst das Makropixel 110-1' gerendert,
auf das in der Reihenfolge die Makropixel 110-2', 110-3', 110-4', 110-5' und 110-6' folgen. Das
Makropixel 110-1' stellt
die bevorzugte Reihenfolge dar, in der Makrofragmente in jedem Makropixel
gerendert werden. Das Makropixel 110-1' umfasst drei Makrofragmente, X,
Y und Z. Jedes Makrofragment X, Y und Z überschneidet ein oder mehrere
Pixel im Makropixel 110-1'. Das Fragment
Z überschneidet
das gesamte Makropixel 110-1'.
Das Makrofragment X wird zuerst gerendert, worauf das Makrofragment
Y und dann das Makrofragment Z folgen. Somit werden die Makrofragmente
X bis Z bevorzugt in alphabetischer Reihenfolge gerendert.
-
6 ist
ein Blockdiagramm höherer
Ebene eines Computer-Graphiksystems 200, das das erfindungsgemäße Verfahren
und System nutzen kann. Das Computer- Graphiksystem 200 umfasst eine Zentraleinheit
(CPU) 202, einen Bildschirm 204, eine Benutzerschnittstelle 206,
wie etwa eine Tastatur oder Maus oder eine andere Kommunikationseinrichtung,
einen Speicher 210 und eine Bilderzeugungseinheit 220,
die mit einem oder mehreren Bussen 208 verbunden sind.
Der Bildschirm 204 umfasst einen Bildschirm, wie etwa den
Bildschirm 1. Der Bildschirm 204 könnte einen
Bildschirmspeicher (nicht gezeigt) umfassen, in den Pixel geschrieben
werden. Der Bildschirm 204 könnte beispielsweise einen Frame-Puffer,
einen Z-Puffer oder einen anderen Bildschirmspeicher umfassen. Die
Bilderzeugungseinheit 220 rendert das graphische Bild Makropixel
für Makropixel
in Rasterreihenfolge.
-
7 zeigt
ein detaillierteres Blockdiagramm einer Ausführungsform der Bilderzeugungseinheit 220.
Die Bilderzeugungseinheit 220 umfasst die Speicher-Arbiter 222 und 224.
Die Speicher-Arbiter können
die Interaktion zwischen den Komponenten der Bilderzeugungseinheit 220 und
dem oder den Bussen 208 steuern, die die Bilderzeugungseinheit 220 mit
dem restlichen System 200 verbinden. Die Bilderzeugungseinheit 220 umfasst
einen Rasterkern (Raster Core) 230, einen Texturkern 260 und
einen Pixeloperationsblock 280. Der Rasterkern 230 führt die
meisten der bei den Verfahren 112, 120, 150 und 160 besprochenen
Operationen durch. Des Weiteren führt die Bilderzeugungseinheit 220 viele
der Operationen der in den vorstehend genannten gleichzeitig anhängigen Anmeldungen
beschriebenen Bilderzeugungseinheit 20 durch. Der Texturkern 260 unterstützt die
Durchführung
der Texturverarbeitung. Der Texturkern 260 kann einen Cache-Speicher
zum temporären
Speichern von Texturen, einen Speicher zum relativ permanenten Speichern
bestimmter Texturen oder Texturprozessoren umfassen, die nicht in 7 gezeigt
sind. Der Pixeloperationsblock 280 kann mehrere Funktionen
ausführen,
die das Neuordnen von Daten umfassen, so dass Daten von der Bilderzeugungseinheit 220 auch
dann Pixel für
Pixel in Rasterreihenfolge ausgegeben werden, wenn die Bilderzeugungseinheit 220 Makropixel
in Rasterreihenfolge rendert.
-
8 ist
ein Blockdiagramm einiger Komponenten im Rasterkern 230 und
im Pixeloperationsblock 280 der Bilderzeugungseinheit 220.
Wenn das Verfahren 150 oder 160 die Makropixel
Markofragment für
Makrofragment rendert, werden bevorzugt alle in 8 dargestellten
Komponenten verwendet. Wenn das Verfahren 112 oder 120 die
Makropixel jedoch Pixel für
Pixel rendert, können
einige der in 8 gezeigten Komponenten weggelassen
werden oder andere Funktionen haben. Die in 8 dargestellten
Komponenten umfassen einen Fragmentgenerator 238, eine
Maskenerzeugungseinheit 240, einen Serialisierer 248,
einen Interpolator 250 und einen Pixelneusortierblock 221.
Wenn er in Verbindung mit dem Verfahren 150 oder 160 verwendet
wird, arbeitet der Fragmentgenerator 238 an Pixelblöcken, dem
Makropixel, anstatt an einem einzelnen Pixel. Der Fragmentgenerator 238 stellt
daher ein Makrofragment bereit, dass Daten umfasst, wie etwa Farbe, α-Werte oder
andere Daten eines das Makropixel überschneidenden Polygons. Makrofragmente, die
Makropixeln entsprechen, werden in die Maskenerzeugungseinheit 240 eingegeben.
Die Maskenerzeugungseinheit 240 erzeugt eine Maske, die
den Teil eines Makropixels angibt, den ein Makrofragment überschneidet.
Die Maske ähnelt
der Abdeckmaske, die vorstehend in Bezug auf 2 besprochen
wurde, gibt jedoch die Pixel des Makropixels an, die von einem Polygon überschnitten
werden.
-
Der
Serialisierer 248 empfängt
die den Masken zugeordneten Makrofragmente. Der Serialisierer 248 nutzt
jedes Makrofragment und jede Maske, um eine Reihe von Fragmenten
des Makrofragments bereitzustellen. Jedes der Fragmente entspricht
einem bestimmten Pixel, das durch das Makrofragment überschnitten
wird. Der Serialisierer setzt außerdem die Fragmente des Makrofragments
in Reihe, so dass die Fragmente durch den Rest der Pipeline fließen und,
bei einer bevorzugten Ausführungsform,
so verarbeitet werden können,
so dass Daten für
ein ein Pixel überschneidendes
Fragment, ungefähr
in jedem Zyklus ausgegeben werden. Die vom Serialisierer bereitgestellten
Fragmente umfassen bevorzugt jeweils einen Index, Offsets (Versatz)
und einen Makrofragmenttyp. Der Index ordnet das Fragment einem
bestimmten Polygon zu. Somit weist der Index auf Daten für das Fragment
hin, wie etwa Farbe oder Textur. Die Offsets umfassen bevorzugt
einen x-Offset (in
x-Richtung) und einen y-Offset (in y-Richtung). Die Offsets geben
die Position der Pixel im gerenderten Makropixel an. Somit könnte ein
Fragment mit x- und
y-Offsets, die beide null betragen, das obere linke Pixel im Makropixel
sein. Fragmente, die die verbliebenen Pixel in der ersten Zeile
des Makropixels überschneiden,
haben x-Offsets von null, aber abweichende y-Offsets. Fragmente,
die Pixel in der ersten Spalte des Makropixels überschneiden, hätten y-Offsets
von null, aber abweichende x-Offsets. Der Makrofragmenttyp wird
dazu verwendet, anzugeben, wo im Bildschirm sich das gerenderte
Makrofragment befindet. Bei einer bevorzugten Ausführungsform
ist der Makrofragmenttyp entweder der "Nächste"(N) oder "Letzte-"(L-)Typ. Nur das
letzte Pixel des letzten Makrofragments hat den Makrofragmenttyp
L.
-
Der
Interpolator 250 empfängt
Fragmente vom Serialisierer 248 und führt für jedes der Fragmente eine
Interpolation durch. Der Interpolator 250 ähnelt dem
in 2 gezeigten Interpolator 28. Bezug nehmend
wieder auf 8, ermöglicht es der Serialisierer 248 dem
Interpolator 250, im Wesentlichen unverändert zu bleiben. Bei einer
bevorzugten Ausführungsform
umfasst der Interpolator nur einen einzelnen Interpolator. Die Daten
für ein
bestimmtes Fragment werden bevorzugt so interpoliert, dass ein Datendurchsatz
von einem Pixel pro Taktzyklus oder eine Fragmentausgabe pro Taktzyklus
aufrechterhalten werden kann. Des Weiteren stellt der Interpolator 250,
bei einer bevorzugten Ausführungsform,
eine Abdeckmaske für
jedes Fragment bereit. Die Abdeckmaske wird bei der Bereitstellung
von Anti-Aliasing
verwendet. Der Pixelneusortierblock 221 ist fakultativ
und kann logisch mehrere Blöcke
umfassen. Der Pixelneusortierblock 221 kann dazu verwendet werden,
der Tatsache Rechnung zu tragen, dass Makrofragmente Makrofragment
für Makrofragment
gerendert werden, wobei jedoch auch andere Komponenten (nicht gezeigt)
Daten Pixel für
Pixel benötigen können. Daher
speichert der Pixelneusortierblock 221 bevorzugt Daten
für mehrere
Pixel und gibt dann die Daten Pixel für Pixel aus. Der Pixelneusortierblock 221 speichert
bevorzugt mehrere Zeilen und Spalten von Pixeln.
-
Die
in 8 dargestellten Komponenten können andere Funktionen haben
oder weggelassen werden, wenn die Daten für ein Makropixel Pixel für Pixel
gerendert werden. Wenn das Verfahren 112 oder 120 dazu
verwendet wird, ein graphisches Bild zu rendern, werden die Daten
für die
Pixel in einem Makropixel in einer bestimmten Reihenfolge gerendert.
Bei einer bevorzugten Ausführungsform
werden die Daten für
die Pixel so angeordnet, dass die Fragmente, die das erste zu rendernde
Pixel überschneiden,
zuerst bereitgestellt werden. Daten für Fragmente, die die verbliebenen
Pixel überschneiden,
folgen in der bestimmten Reihenfolge. Folglich erfüllt der
Fragmentgenerator 238, wenn das Verfahren 112 oder 120 verwendet
wird, eine ähnliche
Funktion wie der in 2 gezeigte Prozessorblock 22.
Somit bestimmt der Fragmentgenerator 238 die Fragmente, die
ein bestimmtes Pixel in einem Makropixel überschneiden. Daher wird der
Fragmentgenerator 238 in einem solchen Fall für Fragmente
betrieben, die Pixel überschneiden,
anstatt für
Makrofragmente, die ein Makropixel überschneiden. Da Fragmente,
die einzelne Pixel überschneiden,
bereits genutzt werden, sind der Maskengenerator 240 und
der Serialisierer 248 nicht notwendig, wenn das System 200 das
Verfahren 112 oder 120 verwendet. Der Interpolator 250 arbeitet
dennoch wie vorstehend beschrieben. Da jedoch Daten für einzelne
Pixel vom Interpolator 250 im Wesentlichen in derselben
Reihenfolge wie sie empfangen wurden ausgegeben werden, kann der
Pixelneusortierblock 221 weggelassen werden.
-
9 stellt
ein detaillierteres Blockdiagramm der Komponenten der Bilderzeugungseinheit 220 dar.
Die Bilderzeugungseinheit umfasst den Rasterkern 230, den Texturkern 260,
den Rendering-Kontext 226, den Pixeloperationsblock 280 und die
Speicher-Arbiter 222 und 224. Der Speicher-Arbiter 222 steuert
die Interaktionen zwischen der Bilderzeugungseinheit 220 und
dem Host-Bus 208' (nicht explizit
in 9 gezeigt). Der Speicher-Arbiter 224 steuert
die Interaktionen zwischen der Bilderzeugungseinheit 220 und
dem Speicher-Bus 208'' (nicht explizit
in 9 gezeigt). Der Rasterkern umfasst einen Prozessorlader 232,
einen Polygon-Manager 234, eine Polygon-Speichereinheit 236,
den Fragmentgenerator 238, den Maskengenerator 240,
eine Identifikations-/Beseitigungseinheit blockierter Objekte (Quick
Z) 242, eine Anti-Aliasing-Tag-(AA-Voll-Tag-)Einheit 224,
einen Sortierer 246, den Serialisierer 248 und
den Interpolator 250. Wie vorstehend besprochen, können der
Maskengenerator 240 und der Serialisierer 248 nicht
verwendet werden, wenn die Bilderzeugungseinheit 220 in
Verbindung mit dem Verfahren 112 oder 120 verwendet wird.
Der Prozessor 232, der Polygon-Manager 234 und
die Polygon-Speichereinheit 236 entsprechen der
Datenverarbeitungseinheit 22 aus 2. Bezug nehmend
wieder auf 9, entspricht der Fragmentgenerator 238 dem
Prozessorblock 24 aus 2 und wurde
vorstehend besprochen. Bei einer bevorzugten Ausführungsform
werden Daten für
Pixel in einem Makropixel parallel verarbeitet, und zwar ungeachtet dessen,
ob die Verfahren 112 und 120 oder die Verfahren 150 und 160 verwendet
werden. Da Daten für Pixelsätze zusammen
verarbeitet werden, können mehrere
Takte bei der Verarbeitung genutzt werden, wobei dennoch ein Durchsatz
von einem Pixel pro Taktzyklus vorgesehen wird. Der Maskengenerator 240 arbeitet
ebenfalls wie vorstehend beschrieben.
-
Die
AA-Voll-Tag-Einheit 244 gemäß 9 zeigt
an, ob ein Pixel vollständig
oder nur teilweise durch ein Fragment abgedeckt wird. Somit unterstützt die
AA-Voll-Tag-Einheit 244 die
Durchführung von
Anti-Aliasing. Der Sortierer 246 entspricht dem in 2 dargestellten
Quick Z 26. Bezug nehmend wieder auf 9,
sortiert der Sortierer 246 daher die Fragmente oder Makrofragmente
basierend auf einem Tiefenwert, wie etwa einem z-Wert. Der Serialisierer 248 und
der Interpolator 250 sind vorstehend besprochen. Es wird
jedoch darauf hingewiesen, dass die vorliegende Erfindung mit einem
anderen Typ von Anti-Aliasing, keinem Anti-Aliasing, einer anderen
Art oder keiner Art desselben vereinbar sein kann.
-
Der
Texturkern 260 umfasst einen Bump-Adressengenerator 262,
einen Bump-Cache 264,
einen Texturadressengenerator 266, einen Level-1-Cache 268,
eine Multum-In-Parvo-("MIP-)Mischeinheit 270 und
eine Texturmischeinheit 272. Folglich ermöglicht es
der Texturkern 260 der Bilderzeugungseinheit 220,
Texturen zu verarbeiten. Es wird jedoch darauf hingewiesen, dass
die Texturverarbeitung auf andere Art und Weise durchgeführt oder
gar nicht vorgenommen werden könnte, ohne
den Betrieb der vorliegenden Erfindung erheblich zu beeinträchtigen.
-
Der
Pixeloperationsblock 280 umfasst einen Quellen-First-in-First-out-("FIFO")Z-Puffer 282,
einen Quellen-FIFO-Schablonenpuffer 284 und einen Quellen-FIFO-Farbpuffer 286,
eine Fog-Einheit 288, einen Pixelsammler 290,
einen Z-Akkumulator 292, einen Pixelakkumulator 294,
einen Ziel-FIFO-Z-Puffer 296, einen Ziel-FIFO-Schablonenpuffer 298 und einen
Ziel-FIFO-Farbpuffer 300. Die Quellen-FIFOs 282, 284 und 286 führen den
Akkumulatoren 292 und 294 Quellendaten zu. Die
Ziel-FIFOs 296, 298 und 300 geben
Daten für
das graphische Bild aus. Bei einer Ausführungsform werden die Daten
an einen Bildschirmspeicher des Bildschirms 204 ausgegeben.
Bei einer anderen Ausführungsform
können
Daten für
das graphische Bild direkt einem Bildschirm, wie etwa dem Bildschirm 1,
zugeführt
werden. Bei einer bevorzugten Ausführungsform geben die Ziel-FIFOs 296, 298 und 300 Daten
Pixel für
Pixel in Rasterreihenfolge aus. Daten können den FIFOs 296, 298 und 300 jedoch
nicht Pixel für
Pixel in Rasterreihenfolge zugeführt
werden. Dem Pixeloperationsblock 280 werden Daten beispielsweise
nicht Pixel für
Pixel in Rasterreihenfolge zugeführt.
Bei einer Ausführungsform
können
die FIFOs 282, 284, 286, 296, 298 und 300 Daten
für mehrere
Zeilen von Pixel halten, um Daten in Rasterreihenfolge auszugeben. Dies
ermöglicht
es, Daten direkt auszugeben, um einen Bildschirmspeicher, wie etwa
einen Frame-Puffer, zu umgehen. Daher können Daten für alle Pixel
in einer bestimmten Zeile des Bildschirms 1 gespeichert
und dann in der gewünschten
Reihenfolge direkt an einen Bildschirm ausgegeben werden. Bei einer
anderen Ausführungsform
jedoch halten die FIFOs 282, 284, 286, 296, 298 und 300 ausreichend Daten,
um einen effizienten Speicherzugriff zu ermöglichen. Folglich können die
Fragmente, wenn das Verfahren 150 oder 160 verwendet
wird, vor der Verwendung durch den Z-Akkumulator 292 und
den Pixelakkumulator 294 neu geordnet werden.
-
Der
Z-Akkumulator 292 und der Pixelakkumulator 294 werden
beim Akkumulieren der Fragmente gerenderter Pixel verwendet. Der
Z-Akkumulator 292 und der Pixelakkumulator 294 können auch bei
der Bereitstellung von Anti-Aliasing hilfreich sein, beispielsweise
durch die Verwendung einer Abdeckmaske. Der Z-Akkumulator 292 und
der Pixelakkumulator 294 können auch ein implizites Kanten-Anti-Aliasing
(Kantenglättung)
durchführen,
wenn Tiefenwerte für
Subpixel in einem Pixel einzeln berechnet werden. Bei einer Ausführungsform
könnten
der Z-Akkumulator 292 und der Pixelakkumulator 294 Daten
für alle
Pixel in einem Makropixel akkumulieren. Ein Direktzugriffsspeicher
(RAM) könnte
für den Z-Akkumulator 292 und
ein anderes RAM für
den Pixelakkumulator 294 verwendet werden. Bei einem Makropixel,
das eine Größe von vier
mal vier Pixel hat, könnte
ein RAM mit einer Tiefe von 16 jeweils für den Z-Akkumulator 292 und
den Pixelakkumulator 294 verwendet werden. In einem solchen
Fall kann der Pixelsammler 290 weggelassen werden oder
reduzierte Funktionen haben. In einem solchen Fall können der
Z-Akkumulator 292 und der Pixelakkumulator 294 als
Teil des Pixelneusortierblocks 221 angesehen werden. Ein
solches RAM ist jedoch typischerweise nicht effizient. Daher kann
eine bevorzugte Ausführungsform
der Bilderzeugungseinheit 220 den Pixelsammler 290 umfassen.
-
Bei
einer bevorzugten Ausführungsform
akkumulieren der Z-Akkumulator 292 und der Pixelakkumulator 294 Daten
für ein
einzelnes Pixel. Somit erwarten der Z-Akkumulator 292 und
Pixelakkumulator 294, dass alle Fragmente für ein bestimmtes
Pixel empfangen werden, bevor Daten für ein nachfolgendes Pixel empfangen
werden. Wenn das Verfahren 112 oder 120 verwendet
wird, werden Daten vom Rasterkern 230 Pixel für Pixel
bereitgestellt. Der Z-Akkumulator 292 und der Pixelakkumulator 294 können Daten
in der durch den Rasterkern 230 bereitgestellten Reihenfolge
verwenden. Der Pixelsammler 290 könnte daher weggelassen werden, wenn
die Bilderzeugungseinheit 220 in Verbindung mit dem Verfahren 112 oder 120 verwendet
wird. Wenn jedoch das Verfahren 150 oder 160 verwendet wird,
werden die Daten für
die Pixel in der Reihenfolge bereitgestellt, in der jedes Makrofragment
gerendert wird. Somit wird nur das Fragment eines bestimmten Polygons,
das ein erstes Pixel überschneidet,
bereitgestellt, bevor das Fragment desselben Polygons für das nächste Pixel
bereitgestellt wird. Ein anderes Fragment, das das erste Pixel überschneidet,
wird später
bereitgestellt, wenn das entsprechende Makrofragment gerendert wird.
Bei der bevorzugten Ausführungsform
können
die Akkumulatoren 292 und 294 in dieser Reihenfolge
bereitgestellte Daten nicht ordnungsgemäß akkumulieren. Folglich wird
der Pixelsammler 290 verwendet und als Teil des Pixelneusortierblocks 221 angesehen.
-
Der
Pixelsammler 290 wird beim Neuordnen der vom Rasterkern 230 zugeführten Daten
verwendet. Wenn das Verfahren 150 oder 160 verwendet wird,
ordnet der Pixelsammler 290 die Fragmente neu, so dass
ein Fragmentstrom für
jedes der Pixel in einem Makropixel bereitgestellt wird. Der Fragmentstrom
umfasst alle Fragmente für
das entsprechende Pixel. Somit werden dem Z-Akkumulator 292 und dem
Pixelakkumulator 294 Daten in einer Form zugeführt, die
vom Z-Akkumulator 292 bzw. vom Pixelakkumulator 294 verwendet
werden kann.
-
10 stellt
eine Ausführungsform
des Pixelsammlers 290 dar. Der Pixelsammler 290 umfasst das
FIFO 308, einen Entleerer (Emptier) 310, eine Arbitrationseinheit 312 und
mehrere Pixelsteuereinheiten. Aus Gründen der Einfachheit sind nur
drei Pixelsteuereinheiten, nämlich
die Pixelsteuereinheit Null 302, die Pixelsteuereinheit
Eins 304 und die Pixelsteuereinheit n 306 dargestellt.
Der Pixelsammler 290 umfasst so viele Pixelsteuereinheiten 302, 304 und 306 wie
Pixel in einem Makropixel vorhanden sind. Somit umfasst, bei dem
System, das den in 10 gezeigten Pixelsammler 290 verwendet,
jedes Makropixel n Pixel. Das FIFO 308 umfasst dieselbe
Anzahl an FIFOs wie Pixel in einem Makropixel vorhanden sind. Bei
einem Makropixel beispielsweise, das vier mal vier Pixel umfasst,
sind sechzehn FIFOs im FIFO 308 enthalten. Bei einer bevorzugten Ausführungsform
sind die im Pixelsammler 290 verwendeten FIFOs zu einem
einzelnen RAM-Exemplar kombiniert, das in 10 als
FIFO 308 dargestellt ist. Bei einer bevorzugten Ausführungsform
wird außerdem
jedes FIFO als gleichwertiger Abschnitt des FIFO 308 betrachtet.
Es spricht jedoch nichts dagegen, die FIFOs separat auszuführen. Jede
Pixelsteuereinheit 302, 304 und 306 steuert
ein entsprechendes FIFO des FIFO 308. Somit steuert jede
Pixelsteuereinheit 302, 304 und 306,
wie in 10 dargestellt, 1/16 des FIFO 308.
-
Jede
Pixelsteuereinheit 302, 304 oder 306 arbeitet
mit dem entsprechenden Abschnitt des FIFO 308 zusammen,
um alle Fragmente für
ein Pixel in dem Makropixel zu gruppieren, das durch den Pixelsammler 290 verarbeitet
wird. Fragmente werden basierend auf dem x-Offset und y-Offset des
Fragments an eine bestimmte Pixelsteuereinheit 302, 304 oder 306 weitergeleitet.
Der x-Offset und der y-Offset des Fragments identifizieren eindeutig
die Pixel im Makropixel, die das Fragment überschneidet. Somit empfängt jede
Pixelsteuereinheit 302, 304 oder 306 Fragmente,
die ein bestimmtes Pixel überschneiden. Die
Pixelsteuereinheiten 302, 304 und 306 leiten
das Fragment an den entsprechenden Abschnitt des FIFO 308 über die
Arbitrationseinheit 312 weiter. Des Weiteren kann, bei
einer bevorzugten Ausführungsform,
jede Pixelsteuereinheit 302, 304 und 306 Fragmente
für mehr
als ein Pixel verfolgen. Bevorzugt werden von jeder Pixelsteuereinheit 302, 304 und 306 bis
zu zwei Pixel verfolgt. Folglich kann der Pixelsammler 290 gleichzeitig
Abschnitte von zwei Makropixeln verarbeiten. Dies trägt dazu
bei, sicherzustellen, dass der gewünschte Durchsatz von einem
Pixel pro Taktzyklus aufrechterhalten wird.
-
Bei
einer Ausführungsform
ist eine festgelegte Menge an Speicherplatz für den Abschnitt des FIFO 308 vorhanden,
der einer bestimmten Pixelsteuereinheit 302, 304 oder 306 entspricht.
Bei einer bevorzugten Ausführungsform
kann ein Überlas tungszustand
herbeigeführt
werden, wenn dem Abschnitt des FIFO 308 für eine Pixelsteuereinheit 302, 304 oder 306 der
Platz ausgeht, bevor alle Fragmente für das entsprechende Pixel bereitgestellt
wurden. Der Überlastungszustand
einer Pixelsteuereinheit 302, 304 oder 306 führt die
Fragmente für
das entsprechende Pixel im entsprechenden Abschnitt des FIFO 308 dem
Z-Akkumulator 292 und dem Pixelakkumulator 294 zu,
die in 9 dargestellt sind. In einem solchen Fall werden
jedoch die Ergebnisse des Z-Akkumulators 292 und des Pixelakkumulators 204 zum
Pixelsammler 290 zurückgeführt, anstatt
einem Teil des Bildschirms 204 zugeführt zu werden. Dieses Verfahren
kann wiederholt werden, so dass alle Fragmente für das Pixel zu einer Gruppe
zusammengefasst werden. Wenn jedoch dieser Überlastungszustand verwendet
wird und der Z-Akkumulator zur Bereitstellung von Anti-Aliasing
beiträgt,
kann der Z-Akkumulator 292 während des Überlastungszustands einen bereichsbezogenen
Algorithmus verwenden. Dies kann die Zeitdauer verkürzen, die
erforderlich ist, um den Z-Akkumulator 292 zu füllen, der
einen Puffer für
jedes Subpixel in dem verarbeiteten Pixel umfassen kann. Ohne einen
solchen bereichsbezogenen Algorithmus kann für jeden Subpixelpuffer separat
ein Z-Wert berechnet werden, um ein implizites Kanten-Anti-Aliasing
bereitzustellen. Somit ist der bereichsbezogene Algorithmus bei
der Verkürzung der
Zeitdauer hilfreich, die nötig
ist, um Fragmente für ein
verarbeitetes Pixel, das einer Pixelsteuereinheit 302, 304 oder 306 entspricht,
zu gruppieren.
-
Die
Makropixel werden somit in Rasterreihenfolge gerendert. Daten können jedoch
in einer anderen Reihenfolge von der Bilderzeugungseinheit 220 ausgegeben
werden, beispielsweise Pixel für
Pixel in Rasterreihenfolge. Eine größere Kohärenz zwischen Daten für ein bestimmtes
gerendertes Pixel und Daten für
ein nachfolgendes Pixel kann erreicht werden, da die gerenderten
Makropixel aus Pixeln bestehen, die zwei Dimensionen einnehmen.
Die Erhöhung
der Kohärenz
ist besonders groß,
wenn jedes Makropixel durch das Verfahren 150 oder 160 Makrofragment
für Makrofragment
gerendert wird, anstatt eine bestimmte Reihenfolge für die Pixel
zu verwenden, wie bei dem Verfahren 112 oder 120. Wenn
beispielsweise Daten, wie etwa eine Textur, zum Rendern eines bestimmten
Pixels in einem Makropixel gecacht werden, besteht eine größere Wahrscheinlichkeit,
dass die Daten im Cache zum Rendern eines nachfolgenden Pixels verwendet
werden. Ebenso besteht eine größere Wahrscheinlichkeit, dass,
wenn ein Cache-Miss auftritt, bei einem nachfolgenden Pixel auch
ein Cache-Miss auftritt. Dadurch wird die Effizienz beim Rendern
eines graphischen Bildes verbessert. Die Verbesserung ist besonders
groß,
wenn ein Level-2-Cache
verwendet wird. Dies ist der Fall, da ein Level-2-Cache eine relativ
große
Cache-Line-Größe hat,
die eine relativ lange Zeitspanne benötigt, um gefüllt zu werden.
Das erfindungsgemäße Verfahren
und das erfindungsgemäße System
können
jedoch auch die Effizienz anderer Caches verbessern. Darüber hinaus
können Daten
für mehr
als ein Pixel zu einer bestimmten Zeit verarbeitet werden. Der Fragmentgenerator 238 kann
beispielsweise eine Verarbeitung aller Pixel und mehrerer Fragmente
im Makropixel gleichzeitig durchführen. Daher können mehrere
Taktzyklen verwendet werden, um die gewünschte Verarbeitung durchzuführen, ohne
den Durchsatz nachteilig zu beeinflussen.
-
Es
wurden ein Verfahren und ein System zum Rendern eines graphischen
Bildes offenbart. Obgleich die vorliegende Erfindung in Übereinstimmung
mit den dargestellten Ausführungsformen
beschrieben worden ist, wird ein Durchschnittsfachmann auf dem Gebiet
leicht erkennen können,
dass an den Ausführungsformen
Abwandlungen durchgeführt
werden könnten
und dass diese Abwandlungen innerhalb des Schutzumfangs der vorliegenden
Erfindung liegen würden.
Demgemäß können durch
einen Durchschnittsfachmann auf dem Gebiet zahlreiche Modifikationen
durchgeführt
werden, ohne den Schutzumfang der zugehörigen Ansprüche zu verlassen.