-
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft das Gebiet der Computeranzeigesysteme.
Insbesondere betrifft die vorliegende Erfindung einen integrierten
Texturspeicher und eine Interpolationslogikeinrichtung zum Ausführen von
Texturabbildungen in einem Computersystem.
-
HINTERGRUND DER ERFINDUNG
-
Computersysteme
werden üblicherweise zum
Anzeigen von grafischen Objekten auf einem Anzeigebildschirm verwendet.
Zu diesen grafischen Objekten gehören Punkte, Linien, Polygone
und dreidimensionale Körper.
Durch Verwendung von Texturabbildungstechniken können Bereiche und Flächen dieser
Objekte mit Farbe und anderen Details versehen werden. Bei der Texturabbildung
bzw. dem Textur-Mapping wird ein Musterbild oder eine Textur-Map
mit einem Bereich oder einer Fläche
eines Objekts kombiniert, um ein modifiziertes Objekt mit dem zusätzlichen
Detail der Textur-Map zu erzeugen. Man nehme beispielsweise den
Umriss eines strukturlosen Würfels
und eine ein Holzmaserungsmuster definierende Textur-Map. Die Texturabbildungstechniken
bzw. Textur-Mapping-Techniken können
dann verwendet werden, um das Holzmaserungsmuster auf den Würfel abzubilden.
Die sich daraus ergebende Anzeige ist diejenige eines Würfels, der
aussieht, als wäre
er aus Holz hergestellt. Ein anderes Beispiel ist, daß Vegetation
und Bäume
mit Hilfe von Textur-Mapping zu einem ansonsten kahlen Geländemodell
hinzugefügt
werden können.
Bezeichnungen können
auf am Computer modulierte Verpackungsdesigns aufgebracht werden,
um visuell das Aussehen eines tatsächlichen Produkts zu vermitteln.
Außerdem
ermöglichen
auf geometrischen Flächen
abgebildete Texturen zusätzliche
Bewegungs- und Raumeindrücke,
welche allein durch eine Schattierung von Flächen nicht erzeugt werden können. Beispielsweise
sieht eine um ihren Mittelpunkt rotierende Kugel statisch aus, bis
ihre Oberfläche
mit einer unregelmäßigen Textur
oder einem entsprechenden Muster versehen wird.
-
Das
Textur-Mapping beinhaltet die Verwendung einer Textur, die eine
im Texturraum definierte Funktion hat. Die Textur wird dann verformt
oder in einen Objektraum abgebildet. Üblicherweise wird eine zweidimensionale
Textur oder ein Musterbild auf eine dreidimensionale Oberfläche abgebildet.
Dies geschieht durch Zuordnen eines zweidimensionalen Index (S,T)
in ein Array von Textur-Pixeln (Texeln) unter Bezugnahme auf Punkte
auf der dreidimensionalen Fläche.
Wenn die Fläche
wiedergegeben wird, werden die S- und T-Werte interpoliert und zum
Nachschlagen eines Textur-Wertes für jedes wiedergegebene Pixel
verwendet. Die interpolierten S- und T-Werte sind im allgemeinen
keine Ganzzahlwerte. Daher liegen diese Werte oft zwischen den Textur-Abtastwerten,
die von dem Array aus Texeln repräsentiert werden.
-
Es
gibt verschiedene Optionen, um bei vorgegebenem realen S- und T-werten
einen Texturwert auszuwählen.
Die einfachste Möglichkeit
ist es, S und T auf die nächsten
ganzen Zahlen aufzurunden und dann das den gerundeten Ganzzahlwerten
entsprechende Texel auszuwählen.
Eine genauere Darstellung wird dadurch erzeugt, daß zwischen
den vier nächsten
Abtastwerten, die den realen (S, T)-Ort umgeben, interpoliert wird.
Manchmal wird ein bilinearer Interpolationsalgorithmus verwendet.
In anderen Fällen
werden Interpolationsalgorithmen einer höheren Ordnung verwendet, um
bessere Ergebnisse zu erzielen.
-
Ein
mögliches
Problem bei diesen oben beschriebenen einfachen Auswahlprozessen
besteht darin, daß wenn
die Textur-abgebildete Fläche
weit vom Betrachterstandpunkt entfernt ist, eine starke Aliasing-Verzerrung
der Textur auftreten kann. Diese unerwünschte Aliasing-Verzerrung
tritt auf, da sich die interpolierten (S, T)-Werte über große Flächen der
Textur sprunghaft ändern
können.
Eine als MIP-Mapping bezeichnete bekannte Technik befasst sich mit
diesem Problem, indem mehrere gefilterte Kopien der Textur mit allmählich niedrigerer
Auflösung
zuvor berechnet werden. Beispielsweise würde ein 256×256-Texel-Array gefiltert und wieder abgetastet,
um Maps mit Auf lösungen
von 128×128, 64×64, 32×32, 16×16, 8×8, 4×4 und 2×2 zu erzielen. Die
spezielle Größe des Texel-Array
wird basierend auf einem Computer-Parameter gewählt, der als Detailstufe (LOD-Level
of Detail) bekannt ist. Der LOD-Parameter repräsentiert die relativen Abstände zwischen
den interpolierten (S, T)-Werten. Jede Map-Größe repräsentiert einen Ganzzahl-LOD
und die berechneten LOD-Werte sind reelle Zahlen. Eine Texturabbildung
hoher Qualität
wird erzielt, indem eine bilineare Interpolation in der Map ausgeführt wird,
die den Ganzzahl-LOD unmittelbar oberhalb und unterhalb der berechneten
LOD von jedem Pixel repräsentiert.
Als nächstes
wird eine lineare Interpolation zwischen den Ganzzahl-LODs ausgeführt, um den
Texturwert bei der Nicht-Ganzzahl-LOD zu erhalten. Dieser Prozess
ist bekannt als trilineares MIP-Mapping.
-
Ein
weiteres Problem besteht darin, daß bei Hochleistungscomputergrafiksystemen
die Wiedergabeoperationen üblicherweise
auf eine Reihe von Prozessoren verteilt sind. wenn diese parallele
Organisation zur Ausführung
von Textur-Mapping verwendet würde,
würde jeder
Prozessor wahrscheinlich eine Kopie der gesamten Textur-Map in seinem
zugehörigen
Speicher enthalten. Diese Mehrfachspeicherung der gesamten Textur-Map
ist sowohl redundant als auch ineffizient.
-
Ein
weiteres Problem besteht darin, daß die Datenübertragung zwischen den verschiedenen
Prozessoren und dem Speicher einen großen Teil der begrenzten Bandbreite
verbraucht. Das Zuweisen wertvoller Bandbreite für diese Funktion verlangsamt tendenziell
den Austausch von anderen benötigten Informationen.
Folglich besteht die Gesamtwirkung darin, daß dies eine schwere Belastung
für den
Textur-Mapping-Prozess darstellt.
-
Daher
wird für
bekannte Computergrafiksysteme ein schneller, genauer und effizienter
Textur-Mapping-Prozess benötigt.
Es wäre
vorzuziehen, wenn ein derartiger Prozess die für den Textur-Mapping Prozess
benötigte
Bandbreite irgendwie minimieren könnte. Es wäre ferner sehr wünschenswert, wenn
ein derartiger Prozess mit weniger Chips und ohne eine redundante
Texturspeicherung implementiert werden könnte.
-
Ein
Beispiel einer bekannten dreidimensionalen Grafikzeichnungseinrichtung
ist beschrieben in GB-A-2267203 (Fujitsu), welche eine dreidimensionale
Grafikzeichnungseinrichtung und eine Speichereinrichtung beschreibt,
die beim Textur-Mapping verwendet werden soll, wobei mehrere Prozessoren parallel
zur Ausführung
der Interpolation verwendet werden. Diese Einrichtung enthält einen
Hauptspeicher, einen Cache-Speicher, einen Hauptspeicher-Controller,
einen dreidimensionalen Zeichenmechanismus und einen Ausgang.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft einen Halbleiterchip, wie es in den
beigefügten
Ansprüchen
angegeben ist, das in Computersystemen zum Ausführen von Texturabbildungen
für Grafikanwendungen verwendet
wird. Verschiedene Textur-Maps werden in den Halbleiterchip eingegeben.
Die Textur-Maps werden in einem Hauptspeicher (z. B. DRAM-Matrix bzw.
Array) gespeichert. Die Daten für
jüngste
Textur-Maps werden Cache-gespeichert, um das Lesen und Schreiben
von Texeln zu beschleunigen. Ein Speicher-Controller steuert die
Datenübertragungen zwischen
dem Hauptspeicher und dem Cache. Ferner sind auf dem gleichen Halbleiterchip
ein oder mehrere Interpolatoren enthalten. Diese Interpolatoren
erzeugen ein Ausgangstexel, indem sie die im Speicher gespeicherten
Texturen interpolieren. Der interpolierte Texelwert wird zur Anzeige
von dem Halbleiterchip ausgegeben. Dadurch, daß der Texturspeicher und die
Integratoren auf dem gleichen Substrat integriert sind, kann die Übertragungsbandbreite
sowie die redundante Speicherung von Textur-Maps in einer Mehrprozessorumgebung
minimiert werden, wobei der Interpolator aus modularen Scheiben
besteht, die gestapelt werden können,
um Interpolationen für
verschiedene Datenbreiten zu erzeugen.
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
wird beim Zugriff auf die DRAM-Zeile deren Inhalt zu dem Cache übertragen,
während
gleichzeitig auf den Cache zugegriffen wird und erneut die DRAM-Matrix
zyklisch durchlaufen wird. Mit anderen Worten, Speicherzugriffszyklen
können
parallel zum Lesen aus einem Cache ausgeführt werden. Darüber hinaus
umfasst ein Ausführungsbeispiel
der vorliegenden Erfindung eine Fehlervorhersage, wodurch zukünftige Daten
abberufen werden, bevor sie aktuell benötigt werden. Auf diese Weise
können
Datenübertragungen
fortgesetzt werden, ohne daß zusätzliche
Verzögerungen
erzeugt werden. Bei einem anderen Ausführungsbeispiel bestehen die
Interpolatoren aus einer Reihe von modularen Scheiben, welche gestapelt
werden können,
um nach Wunsch unterschiedliche Datenbreiten zu ermöglichen.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
vorliegende Erfindung ist beispielhaft und nicht zur Beschränkung in
den Figuren der zugehörigen
Zeichnung dargestellt, in denen gleiche Bezugszeichen auf ähnliche
Elemente hinweisen und in denen:
-
1 ein
Blockschaltbild eines Computergrafiksystems zeigt, auf dem die vorliegende
Erfindung ausgeführt
werden kann.
-
2 zeigt
ein Blockschaltbild eines Textur-RAMs (TRAM).
-
3 zeigt
ein Blockschaltbild der TRAM-Speicherorganisation.
-
4 zeigt
ein Blockschaltbild von zwei Bänken
des Detailstufe(LOD)-Speichers.
-
5 zeigt
einen Vierfach- bzw. Quad-DRAM und Cache-Speicher.
-
6 zeigt
ein Blockschaltbild des TRAM-Resampling-Verbindungsnetzwerks.
-
7 zeigt
ein Blockschaltbild eines MIP-Map-Generators.
-
8 zeigt
ein Beispiel einer Nächste-Nachbarn-Interpolation.
-
9 zeigt
ein Beispiel einer bilinearen Interpolation.
-
10 zeigt
ein Schaltbild eines bilinearen 8-Bit-Interplators.
-
11 zeigt
drei Beispiele von verschiedenen Konfigurationen, die für die Interpolatorketten verwendet
werden können.
-
12 zeigt
eine grundlegende 4-Bit-Eingangs-Interpolationsscheibe.
-
13 zeigt
einen 8-Bit-Eingangs-Interpolator, der durch Kopplung zweier 4-Bit-Scheiben
gebildet wird.
-
14 zeigt
eine grundlegende 6-Bit-Eingangs-Interpolatorscheibe.
-
DETAILLIERTE
BESCHREIBUNG
-
Es
werden eine Einrichtung und ein Verfahren zum Integrieren eines
Texturspeichers und einer Interpolationslogik zum Ausführen von
Texturabbildungen in ein Computeranzeigesystem beschrieben. In der
folgenden Beschreibung sind zur Erläuterung zahlreiche spezielle
Details angegeben, beispielsweise Speichergrößen, die Cache-Architektur,
Interpolationsschemen usw., um ein vollständiges Verständnis der
vorliegenden Erfindung zu ermöglichen. Es
wird jedoch für
den Fachmann klar sein, daß die vorliegende
Erfindung ohne diese speziellen Details realisiert werden kann.
In anderen Fällen
sind bekannte Strukturen und Einrichtungen nur als Blockschaltbild
dargestellt, um die vorliegende Erfindung nicht unnötig zu verdecken.
-
Überblick über ein
Computersystem in dem die vorliegende Erfindung implementiert werden
kann
-
Es
wird auf 1 Bezug genommen. Ein Computergrafiksystem,
in dem die vorliegende Erfindung realisiert werden kann, ist als 100 dargestellt. Das
System 100 kann ein beliebiges computergesteuertes Grafiksystem
zum Erzeugen von komplexen oder dreidimensionalen Bildern enthalten,
wie beispielsweise die von Silicon Graphics, Inc. aus Mountain View,
CA hergestellten Computer der IRISTM Familie.
Das Computersystem 100 enthält einen Bus oder eine andere
Kommunikationseinrichtung 101 zum Austausch von Informationen,
und eine mit dem Bus 101 gekoppelte Verarbeitungseinrichtung 102 zur
Informationsverarbeitung. Das System 100 enthält ferner
einen Speicher mit wahlfreiem Zugriff (RAM) oder eine andere dynamische
Speichereinrichtung 104 (als Hauptspeicher bezeichnet),
die mit dem Bus 101 zur Speicherung von Informationen und
von dem Prozessor 102 auszuführenden Befehlen gekoppelt
ist. Der Hauptspeicher 104 kann auch zum Speichern von
temporären
Variablen bzw. Zwischenvariablen oder anderen Zwischeninformationen
während
der Ausführung
der Befehle durch den Prozessor 102 verwendet werden. Das
Computersystem 100 enthält
ferner einen Nur-Lese-Speicher (ROM) und/oder eine andere statische
Speichereinrichtung 106, die zur Speicherung von statischen
Informationen und Befehlen für
den Prozessor 102 mit dem Bus 101 gekoppelt ist/sind.
Eine Datenspeichereinrichtung 107 ist mit dem Bus 101 zum
Speichern von Informationen und Befehlen gekoppelt.
-
Mit
dem Bus 101 ist ferner ein Grafik-Subsystem 111 gekoppelt.
Der Prozessor 102 liefert dem Grafik-Subsystem 111 Grafikdaten,
beispielsweise Zeichenbefehle, Koordinateneck- bzw. -vertexdaten und
andere Daten, die die geometrische Position, Farbe und Oberflächenparameter
eines Objekts betreffen. Die Objektdaten werden von dem Grafik-Subsystem 111 in
den folgenden vier Pipeline-Stufen verarbeitet: Geometrie-Subsystem,
Abtastumwandlungs-Subsystem, Raster-Subsystem und ein Anzeige-Subsystem. Das Geometrie-Subsystem
wandelt die grafischen Daten vom Prozessor 102 in ein Bildschirmkoordinatensystem
um. Das Abtastumwandlungs-Subsystem erzeugt dann Pixeldaten auf
der Basis von Primitiven bzw. Grundelementen (z. B. Punkten, Linien,
Polygonen und Gittern bzw. Meshes) aus dem Geometrie-Subsystem. Die Pixeldaten werden
an das Raster-Subsystem gesendet, woraufhin Z-Puffer-, Blending-
bzw. Mischungs-, Texturing- bzw. Texturgebungs- und Anti-Aliasing-Funktionen ausgeführt werden.
Die resultierenden Pixelwerte werden in dem Frame-Puffer 109 gespeichert.
Das Anzeige-Subsystem liest den Frame-Puffer 109 und zeigt
das Bild auf dem Anzeigemonitor 121 an.
-
Darüber hinaus
kann eine Datenspeichereinrichtung 107 beispielsweise eine
Magnetplatte oder eine optische Platte und ihr zugehöriges Plattenlaufwerk
mit dem Computersystem 100 gekoppelt sein. Das Computersystem 100 kann
ferner über
den Bus 101 mit einer Anzeigeeinrichtung 121,
beispielsweise einer Kathodenstrahlröhre (CRT) zum Anzeigen von Informationen
für einen
Computernutzer gekoppelt sein. Eine alphanumerische Eingabeeinrichtung 122, einschließlich alphanumerischer
und anderer Tasten ist üblicherweise
mit dem Bus 101 gekoppelt, um Informationen und Befehlsselektionen
an den Prozessor 102 zu übermitteln. Eine weitere Art
von Benutzereingabeeinrichtungen ist die Cursorsteuerung 123, beispielsweise
eine Maus, ein Trackball oder Cursorrichtungstasten zur Übermittlung
von Richtungsinformationen und Befehlsselektionen an dem Prozessor 102 und
zum Steuern der Cursorbewegung auf der Anzeige 121. Diese
Eingabeeinrichtung hat üblicherweise
zwei Freiheitsgrade in zwei Achsen, einer ersten Achse (z. B. X)
und einer zweiten Achse (z. B. Y), welches es der Einrichtung ermöglicht,
Positionen in einer Ebene zu spezifizieren.
-
Eine
weitere Einrichtung, die mit dem Bus 101 gekoppelt werden
kann, ist die Hardcopy-Einrichtung 124, welche zum Ausdrucken
von Befehlen, Daten oder anderen Informationen auf ein Medium beispielsweise
Papier, Folie oder ähnliche
Medienarten verwendet werden kann. Zusätzlich kann das Computersystem 100 mit
einer Einrichtung zur Tonaufzeichnung und/oder -wiedergabe 125 gekoppelt sein,
beispielsweise mit einer Audio-Digitalisiereinrichtung, die mit
einem Mikrofon zur Aufzeichnung von Informationen gekoppelt ist.
Außerdem
kann die Einrichtung einen Lautsprecher enthalten, der mit einem
Digital/Anlaog(D/A)-Wandler zur Wiedergabe des digitalisierten Tons
gekoppelt ist.
-
Kundenspezifischer
Textur-RAM
-
In
der vorliegenden Erfindung sind der Texturspeicher, die Interpolations-
und Wiederabtastlogik, die mit dem Textur-Mapping verbunden sind,
auf einem einzigen Chip, genannt kunden spezifischer Textur-RAM (TRAM)
integriert. Mit anderen Worten, die TRAM-Schaltungen (z. B. der
Textur-Speicher, beispielsweise ein DRAM und Cache, eine Interpolationslogik,
eine Wiederabtastlogik usw.) befinden sich alle auf dem gleichen
Substrat eines Chips. Dieses TRAM-Design bietet verschiedene Vorteile.
Zunächst
wird durch Interpolation auf dem Chip die Anzahl der Datenausgangspins
sowie der Support-Chips, die benötigt
werden, minimiert. Beispielsweise benötigt jeder TRAM für einen
8-Bit-Fall nur einen 8-Bit-Datenausgang. Die Ergebnisse werden direkt
an die Grafikrastereinrichtung gesendet. Außerdem können durch Verwendung der dichtesten
dynamischen RAM (DRAM)-Technologie mehrere DRAMs auf dem Chip geschaffen
werden. Dies schafft eine Texeladressunabhängigkeit für das MIP-Map-Wiederabtasten bzw. -Resampling,
zusammen mit einer großen
Texturkapazität
und ohne redundante Texturspeicherung. Und durch Cache-Speicherung
der DRAM-Zeilen können
DRAM-Zugriffe parallel zum Resampling laufen. Außerdem werden Adressen und Daten
für einen
höheren
Durchsatz Pipeline-verarbeitet.
-
2 zeigt
ein Blockschaltbild des TRAM 200. Die Eingangsadresse und
Daten werden auf der Leitung 201 in den MIP-Map-Generator 202 und
die Speichersteuer- und -adressschnittstelle 203 eingegeben.
Sobald die MIP-Maps erzeugt wurden, werden sie von dem Eingangspuffer 204 zwischengespeichert,
bevor sie von der DRAM-Matrix 205 gespeichert werden. Darüber hinaus
werden Lese- und Cache-Adresse in die Speichersteuer- und -Adressschnittstelle 203 auf
den Leitungen 206 und 207 eingegeben. Die Speichersteuer-
und Adressschnittstelle 203 steuert die DRAM-Matrix 205 und
den Lese-Cache 208. Sub-Texel und LOD-Daten werden von
dem Interpolator 209 in Verbindung mit den in dem Lese-Cache 208 enthaltenen
MIP-Maps verwendet. Der Interpolator 209 tastet das Texturbild wieder
ab, um Ausgangs-Samples bzw. -Abtastwerte zu erzeugen, welche an
die Grafik-Rastereinrichtung gesendet werden. Diese Blöcke werden
weiter unten detaillierter beschrieben.
-
3 zeigt
eine Blockdarstellung der TRAM-Speicherorganisation. Im wesentlichen
enthält
der TRAM-Speicher die DRAM-Matrix
und den statischen Schreib-Lese-Speicher (SRAM)-Cache, welche in
zwei Gruppen von parallelen LOD-Speichern 301 und 302 unterteilt
sind. Jede Gruppe ermöglicht
einen 2×2-Texelbereich
von jedem LOD, um ein trilineares Wiederabtasten bzw. Resampling
auszuführen.
Jede der beiden Gruppen hat vier unabhängige Speicher-„Quads" bzw. -„Viererelemente" 303 – 306 und 307 – 310.
Das Unterteilen des LOD-Speichers in Quads ermöglicht das Texturdurchlaufen
zur Minimierung von Cache-Überlastungszuständen an
den Bildrändern.
Ein zweifach gepufferter Ladeport ist implementiert, so daß der Ladepuffer
parallel mit dem DRAM-Schreibzyklus operieren kann.
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
sind der DRAM und die I/O-Cache-Speicher in vier Quads eingeteilt.
Dies bewirkt, daß wenn
eine Spanne oder Zeile während
einer Resampling-Operation durchlaufen wird, auf die I/O-Cache-Speicher mit
bis zu vier 8-Bit-Texeln von einem einzelnen Quad zugegriffen wird,
um den Abtastwert für
jeden LOD zu erzeugen. Diese Abtastwerte werden dann zur Ausgabe
an die Grafik-Rastereinrichtung von dem Interpolations/Mux-Block 312 gemischt/multiplext.
-
Man
beachte, daß die
vier Quads jeder Gruppe über
eine unabhängige
Adressierung verfügen, wie
es durch die vier Busse 312 – 315 dargestellt
ist. Folglich kann sich jeder Quad in Abtastrichtung bewegen und
Daten vorher abrufen, die entlang des Abtastpfads benötigt werden.
Die Grafikrastereinrichtung überwacht
die Seitenadresse in einer Pipeline und bestimmt im Voraus, ob ein
Seitenfehler auftreten wird. Sie beginnt dann den Zugriff auf die
benötigten
Daten, um den Fehler zu vermeiden, (d. h. die Fehlervorhersage).
Zu dem Zeitpunkt, wenn die Adresse das Ende der Pipeline erreicht,
wo sie benötigt
wird, um aus dem TRAM-Cache wieder abzutasten, sind die Daten bereits
von der DRAM-Matrix verfügbar.
-
4 zeigt
eine Blockdarstellung von zwei „Bänken" 401 – 402 des LOD-Speichers.
Diese zwei Bänke
repräsentieren
1 Mega × 8
Speicher-Quads. Die Bank 401 besteht aus vier 64×1 Bit-Schreibmasken 403 – 406;
vier 64×8
Aus/Ein- 512×1 Ein/Aus-I/O-Caches 407 – 410;
einem 1K×256 DRAM 411 für gerade
Zeilen; und einem 1K×256 DRAM 412 für ungerade
Zeilen. In ähnlicher Weise enthält die zweite
Bank 402 zu den Blöcken
der ersten Bank 401 identische Blöcke.
-
Diese
beiden Bänke
ermöglichen
einen „Ping-Pong"-Modus, indem die
Lade- und Wiederabtast-Leistungsfähigkeit entkoppelt sind (d.
h. volle Leistungsfähigkeit
auf beiden Ports). Dieses Merkmal wird für 4-Bit- und 8-Bit-Texturen
bereitgestellt. Bei dem derzeit bevorzugten Ausführungsbeispiel ist für die Konfigurationen
jedes LOD Flexibilität
vorgesehen. Diese ermöglicht
entweder 4-Bit- oder 8-Bit-Ping-Pong-Bänke, räumlich größere 4-Bit- oder 8-Bit-Bänke oder
die Kombination der beiden Bänke zum
Erhöhen
der Texeltiefe (z. B. 12 Bits). Für nicht MIP-Map-Anwendungen können bis
zu 1K×1K×8-Bit-Textur-Maps
gespeichert werden.
-
5 zeigt
die verschiedenen Möglichkeiten,
wie die DRAM- und Cache-Speicher für einen vorgegebenen Quad organisiert
werden können.
Die 16×16-Matrix 501 repräsentiert
ein Byte der 128×8 Bytes
in jedem 1K DRAM. Die Matrix 501 kann eine Seite in einem
Quad sein, die zu einer der beiden Bänke gehört. Die Zeile 502 repräsentiert
einen geraden 1K DRRM, während
die Zeile 503 einen ungeraden 1K DRAM repräsentiert.
-
Die
Konfiguration 504 zeigt die beiden Bänke 505 und 506 bei
der Verwendung in dem oben beschriebenen Ping-Pong-Modus. Bei einem
Ausführungsbeispiel
haben die Bänke 505 und 506 eine Größe von 16×16×8-Bit.
Bei einem anderen Ausführungsbeispiel
können
diese Bänke
mit einer Größe von 16×32×4-Bit konfiguriert
sein. Man beachte, daß in
den 4- und 8-Bit-Modi ein paralleles Laden und Wiederabtasten zum
gleichen TRAM für
den Ping-Pong-Modus ausgeführt
werden kann. Dies ermöglicht
einen unabhängigen
Betrieb und verwendet Wiederabtastressourcen (z. B. Spaltendecodierung, I/O-Cache
usw.).
-
Alternativ
können
die beiden Bänke 505 und 506 nebeneinander
liegend in Reihe angeordnet werden, wie in der Konfiguration 507 dargestellt
ist. Diese Konfiguration 507 schafft einen räumlich größeren durchgehenden
Speicher. Bei noch einem anderen Ausführungsbeispiel sind die beiden
Bänke in
einer parallelen Konfiguration 508 angeordnet. Die Konfiguration 508 schafft
einen tieferen Speicher zum Speichern von Texeltiefen von bis zu
16 Bits.
-
Wenn
in der Mitte eines Bildes Sampling ausgeführt wird, werden Daten von
beiden Banken benötigt.
Da die abgerufenen Daten jedoch in komplementären Quads zu finden sind, sind
alle Daten gleichzeitig verfügbar.
Bei Nicht-MIP-Map- und nicht aktivierten Rändern kommen die Daten an diesen Rändern von
der anderen Gruppe. Wenn ein MIP-Mapping vorliegt oder wenn die
Ränder
freigegeben sind, hält
jede Bank diese Randdaten in seinem Randspeicher. Wenn MIP-Mapping
freigegeben ist oder Ränder
freigegeben sind, ist die Operation konsistent (d. h. Daten an den
Rändern
kommen aus derselben Gruppe).
-
Die
Speichersteuer- und Adressschnittstelle 203 gemäß 2 steuert
die DRAM-Matrizen und steuert auch die gemeinsame Nutzung der DRAM-Matrix
für Nicht-Ping-Pong-Moden,
wenn die Lade- und Wiederabtastports die gleiche DRAM-Ressource
benötigen.
Diese Schnittstelle wird zum Umladen der beiden Bänke in Ping-Pong-Moden
verwendet. Die Schnittstelle 203 dient als Schnittstelle
für die
Adressen von der Grafik-Rastereinrichtung zu den Zeilenadressen
für den DRAM
jedes Quads. Dies umfasst doppelt gepufferte Seitenadressregister
für jeden
DRAM für
parallen DRAM-Zugriff und Seitenadressregisterladen. Zusätzlich speichert
die Speichersteuer- und Adressschnittstelle die Lade-Port-DRAM-Seitenadresse
für die
Einbild- oder MIP-Map-Erzeugung
und inkrementiert diese.
-
Ein
Verbindungsnetzwerk verbindet die Quads mit den Interpolatoren und
der Dateneingangslogik. Bei dem Interpolationsprozess werden die
vier Quads einer vorgegebenen Gruppe multiplext. Diese Ergebnisse
werden dann für
jeden Interpolator verfügbar
gemacht (d.h. sie werden an deren Eingängen multiplext). Die zwei
MUX-Stufen ermöglichen,
daß die
ganze Matrix als ein großes
Bild verwendet wird oder als zwei unabhängige LODs. Randdaten stammen
von der gleichen Gruppe, werden aber in einem entgegengesetzten
Quad von den Bildkantendaten gespeichert (z. B. horizontale Kanten werden
in AB↔CD
gespeichert; vertikale Kanten werden in AC↔BD gespeichert). In jedem
Fall wird jeder LOD zwischen den beiden Gruppen aufgeteilt.
-
LODs,
die kleiner als 16×16
sind, können übertragen
werden bzw. einer Wrap-Operation unterliegen, da: 1) die andere
horizontale Hälfte
sich in der anderen Gruppe befindet, so daß Quad „a"- und Quad „b"-Daten aus dem gleichen 16×16-Bereich nicht
benötigt
werden, folglich sind sie immer zusammenhängend und 2) die vertikalen
Quad „ab"- und Quad „cd"-Adressen unabhängig sind,
so daß beliebige
zwei Zeilen aus dem gleichen 16×16-Cache
gelesen werden können.
-
6 zeigt
ein Schaltbild des TRAM-Resampling-Verbindungsnetzwerks. Zwei Speichergruppen 601 und 602 mit
jeweils vier Quads „a's – d's" 603 – 606 und 607 – 610 sind
mit den Leseverstärkern 611 gekoppelt.
Die Leseverstärker 611 werden
zur Verstärkung
der schwachen Signale von den DRAM-Datenleitungen der beiden Gruppen
verwendet. Ein Riesenlatch 612 wird zur Pipelineverarbeitung
der Daten nach der erste Multiplexebene verwendet. Vier 2:1-Multiplexer 621 – 624 werden
verwendet, um es einem Teil von jedem LOD oder jedem LOD zu ermöglichen,
in jeder Gruppe gespeichert zu werden. Folglich sorgen die Koeffizienten
zu den Interpolatoren 625 und 626 für das Multiplexing
der beiden Eingänge.
Die Ausgangssignale von den Interpolatoren 625 und 626 werden
wiederum von dem Interpolator 627 interpoliert. Eine ähnliche
Struktur existiert für
den anderen LOD. Ein letzter Interpolator 629 wird zum
Interpolieren der Ergebnisse von beiden LODs verwendet, die von
den Interpolatoren 627 und 628 ausgegeben werden.
-
Zum
Laden des TRAM werden bei Verwendung des MIP-Map-Generators zwei
LODs gleichzeitig an jede Gruppe 601 oder 602 und
an jede Texelposition in der Gruppe gesendet. Da die 4:1-Multiplexer 630 – 637 bidirektionale
Tansmissionsgatter enthalten, können
sie zum Resampling oder Schreiben von Texeln verwendet werden. Beim
Speichern von Rändern
werden die Daten wie beim Resampling in den entsprechenden Speichern
gespeichert. Wenn Ränder
oder MIP-Mapping aktiviert sind, wird der mittlere Rand zwei Mal
gespeichert, einmal in jeder Gruppe. Eine Anzahl von Treibern 613 – 620 wird zum
Laden von Daten in die DRAMs verwendet. Zwei Treiber sind jeder
Eingangsleitung zugeordnet, so daß die zwei Datenbytes getrennt
freigegeben werden können.
-
Der
in 2 gezeigte MIP-Map-Generator 202 kann
eine gesamte MIP-Map für
vollständige
Bilder erzeugen. Der Ladeeingang des TRAM ermöglicht es, daß die Textur
in einer geradlinigen Weise geladen wird. Für aus Kacheln zusammengesetzte Eingangssignale
bzw. Tile-Eingangssignale kann der MIP-Map-Generator die Eingangs-Kachel
bis zu einem Minimum von einem Texel herunterfiltern. Der MIP-Map-Generator
kann sofern erforderlich umgangen werden, um die MIP-Map-Ebenen
explizit zu laden sind, wie es der Fall wäre, wenn ein benutzerdefiniertes
Filter zum Erzeugen der MIP-Maps angewendet werden soll (z. B. von
der CPU erzeugt).
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
führt der
Generator einen 2×2-Box-Filter
aus (d. h. ein mittelwertbildendes Filter), um jedes Texel für die nächste grobere
MIP-Map-Ebene zu
erzeugen. Ein Box-Filter eliminiert die meisten hohen Frequenzen,
welche ein Aliasing erzeugen würden,
aber es ist kein sehr scharfes Filter. Der MIP-Map-Generator behandelt
4-, 8- und 12-Bit-Bilder sowie vier 4-Bit- und zwei 8-Bit-Bilder
für eine
Ein-TRAM-Konfiguration. Bei mehreren TRAMs werden die MIP-Maps parallel
erzeugt und gespeichert.
-
7 zeigt
ein Blockschaltbild eines MIP-Map-Generators. Die Eingangsstufe 701 führt die
horizontale Filterung der feinen LOD-Stufe aus. Die zweite Stufe 702 nimmt
die Ergebnisse der Eingangsstufe 701 und erzeugt eine Ausgabe
und Zwischenergebnisse für
LODs weiter unten in der MIP-Map. Die Addierer 703 und 704 können als
vier parallele 4-Bit-Addierer, zwei 8-Bit-Addierer oder ein 12-Bit-Addierer
verwendet werden, und zwar in Abhängigkeit von dem ausgewählten Texel-Modus.
Diese zwei Addierer 703 und 704 mitteln zwei Werte
mit Trunkierung im wesentlichen dadurch, daß sie diese addieren und dann
durch 2 dividieren. In einem Fall werden zwei 4-Bit-Zahlen eingegeben,
um ein 4-Bit-Ergebnis zu erzielen. In anderen Fällen werden 8- und 12-Bit-Zahlen
in die Addierer eingegeben, um 8- und 12-Bit-Ergebnisse zu erzeugen.
Die Breite dieser Addierer muss nur so breit wie die Daten sein.
Da 4-Bit(1 – 4
Komponenten)-, 8-Bit (1 oder 2 Komponenten)- oder 12-Bit-Daten unterstützt werden,
werden 4-Bit-Addiererscheiben implemen tiert. Diese vier 4-Bit-Addiererscheiben
können
kombiniert werden, um 8 oder 12-Bit-Addierer zu erzeugen. Eine Anzahl von
Zeilenspeichern 705 – 710 wird
zum vorübergehenden
Speichern von Verarbeitungszwischenergebnissen verwendet. Die Zeilenspeicher 711 und 712 werden
zum vorübergehenden
Speichern der Ausgaben von dem MIP-Map-Generator verwendet. Der Adressgenerator 713 und
der 512×16-Zeilen-RAM 714 werden
verwendet, um Adressen und Daten zu/von dem MIP-Map-Generator zu
lesen/schreiben.
-
Alle
Komponenten werden in den DRAM parallel eingegeben, verarbeitet
und gespeichert. Folglich besteht der einzige Unterschied in der
Carry- bzw. Übertragschaltung
bei den Addierern. Der RAM ermöglicht
größere Zeilenlängen, somit
ermöglichen die
zwei und vier TRAM-Konfigurationen größere Bildzeilen, wobei dies
mit Erhöhungen
in der Textur-RAM-Kapazität
einhergeht.
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
werden MIP-Maps und Ränder
im TRAM in einer durchgehenden Matrix von TRAM-Blöcken gespeichert.
Die Größe dieser
Blöcke
beträgt
entweder 8KBits oder 16KBits, abhängig davon, ob die Bänke 1 oder
2 in jedem LOD-Speicher zusammen verwendet werden oder nicht. Die
Grundeinheit der Speicherzuweisung beträgt 8k-Bits. Dies ermöglicht die folgenden
kombinierten Seiten/Cache-Größen: 1) 32×32×12 Bits,
wobei die Bänke
1 und 2 immer zusammen verwendet werden – 16kBits; 2) 32×32×8 Bits
oder 32×64×4 Bits,
mit zwei Bänken
zum Ping-Ponging – 8kBits
jeweils und; 3) 64×32×8 Bits oder
64×64×4 Bits
mit einer Bank für
große
Einzelbilder – 16kBits.
-
Es
gibt ein BASE- bzw. Basisoffsetregister, welches zum Spezifizieren
der Startadresse der Bilddaten verwendet wird. Folglich sind alle
MIP-Map und Randoffsets auf die Basis bezogen. Diese Offsets ändern sich
nicht, wenn das Bild zu irgendeiner späteren Zeit in einen anderen
TRAM-Teil gelegt würde. Um
eine effizientere Verwendung des TRAMs zu ermöglichen, wenn Ränder verwendet
werden oder wenn viele kleine Texturen verbunden sind, werden Ränder und
kleine MIP-Maps immer, wenn es möglich
ist, in die gleiche Seite gepackt. Jede MIP-Map und jeder Rand für jede MIP-Map
hat einen Tabelleneintrag für
den relativen Offset von der BASE-Adresse zum Start dieser Daten.
Die Offsets umfassen Teilblockadressbits, so daß MIP-Maps und Ränder nicht mit
den Seitenrändern
ausgerichtet sein müssen. Beispielsweise
können
die 16×16,
8×8, 4×4, 2×2 und 1×1-Mapstufen
zusammen in einer Speicherseite gespeichert werden. Zusätzlich können die
Ränder
in ähnlicher
Weise gepackt werden.
-
Die
MIP-Map Interpolatoren 209 gemäß 2 tasten
das Texturbild wieder ab, um die Ausgabeabtastwerte bzw. Ausgabe-Samples zu erzeugen. Das
Ziel besteht darin, so genau wie möglich zu approximieren, welches
der Texturbildpixelwert an der angeforderten Position gewesen wäre, wenn
ein durchgehendes Texturbild geliefert würde. Eine Tiefpassfilterung
wird zur Aliasing-Minimierung implementiert. Die Interpolationsschaltung
erzeugt die Approximation, während
der MIP-Map-Generator die Tiefpassfilterung behandelt.
-
Die
Hardware führt
eine „Nächste-Nachbar/Punkt-Abtastwert" (NN) oder bilineare
Interpolation an jeder MIP-Map-Stufe aus. Für das NN-Resampling bzw. Wiederabtasten
(teilweise „Punkt"- oder „Nächster"- Modus genannt) gilt, das wenn die
(S,T)-Koordinate in einer Texel-Grenze nach der Trunkierung fällt, dem
Abtastwert dieser Stufe die Intensität des zugehörigen Texels zugewiesen wird. 8 zeigt
ein Beispiel des Nächste-Nachbarn-Wiederabtasten.
Sechs Texel 801 – 806 mit
Intensitäten
von 40, 50, 60, 30, 45 bzw. 55 sind dargestellt. Bei einer vorgegebenen
Texel-Koordinate von (S,T) _ (1,75, 1,25) entspricht deren NN-Ausgabe
Texel 802, und eine Intensität von 50 wird verwendet. Dieses
Nächste-Nachbar-Abtastschema
erzeugt ein blockartiges Erscheinungsbild, wenn das Bild vergrößert wird.
Es erzeugt außerdem
ein stärkeres
Kanten-Aliasing, wenn eine Kante in dem Bild in Bezug auf die Bildschirmpixel
gedreht wird (d. h. gezackte Linien). Infolgedessen wird ein bilineares
Filtern zum „Glätten" dieser Effekte verwendet.
-
Beim
bilinearen Wiederabtasten wird eine zweidimensionale Interpolation
ausgeführt.
Es wird die Intensität
der Texel mit den vier nächsten
Mittelpunkten verwendet. 9 zeigt ein Beispiel des bilinearen
Resamplings. Vier Texel 901 – 904 sind mit den
jeweiligen Intensitäten
I0 – I3
dargestellt. Die Intensität
für den
Punkt 905 wird von der folgenden Gleichung geliefert: I
= Ct ((CS(I1 – 10)
+ 10) – (Cs(I3 – I2)) +
(Cs(I3 – I2)
+ I2), wobei Cs und Ct die Offsets zwischen den (S,T)-Koordinaten
von Texel 901 sind. Infolgedessen ist die aus dem bilinearen
Resampling resultierende Ausgabeintensität eine Funktion der vier Intensitäten I0 – I3.
-
10 zeigt
ein bilineares Resampling-Schaltbild. Die ABS-Blöcke 1001 und 1002 geben
die Absolutwerte des S-, T- oder
LOD-Wertes aus, um die Tatsache zu kompensieren, daß unabhängig davon,
ob die Pixelposition rechts oder links von einem Texel liegt, das
Texel zu dem gleichen Eingang des Interpolators geht. Diese Absolutwerte
lassen den Koeffizienten die Texeldaten verfolgen. Die Ausgabe vom
ABS-Block 1001 liefert den Wert von Ct und die Ausgabe
vom ABS-Block 1002 liefert den Wert von Cs. Der Subtrahierer 1003 führt eine
Subtraktionsfunktion der Intensitäten I0 und I1 aus. Der Multiplizierer 1004 multipliziert
dieses Ergebnis mit Cs. Als nächstes
addiert der Addierer 1005 I0, wodurch eine Ausgabe von
Cs (I1 – I0)
+ I0 resultiert. In ähnlicher
Weise ist die Ausgabe vom Addierer 1006 Cs (I3 – I2) +
I2. Der Subtrahierer 1007 subtrahiert die Ausgabe des Addierers 1006 von
der Ausgabe des Addierers 1005. Dies wird vom Multiplizierer 1008 mit Ct
multipliziert. Zuletzt wird die Ausgabe vom Mulitplizierer 1008 zu
der Ausgabe vom Addierer 1006 addiert, wobei dies die bilineare
abgetastete Intensität ergibt.
-
Sobald
diese Resamplings abgeschlossen wurden, wählt die Hardware entweder zwischen
diesen Schemen aus oder interpoliert linear zwischen diesen, um
den Ausgabe-Abtastwert zu erzeugen. Diese Ergebnisse werden dann
in dem MIP-Map-Generatorblock interpoliert. Sowohl die Nächste-Nachbar-Filterung
als auch die bilineare Filterung werden weiter angewendet, wenn
eine MIP-Map verwendet wird. Diese Filter werden auf einer oder
zwei Map-Stufen ausgeführt,
und zwar in Abhängigkeit von
dem ausgewählten
Filter. Jeder TRAM interpoliert 1 (4-TRAM-Konfiguration), 2 (2-TRAM-Konfiguration)
oder 4 (Ein-TRAM-Konfiguration)-Komponenten. Für andere Formatarten werden
die Te xelfarbwerte trunkiert, damit sie in die verfügbare Texeltiefe passen.
-
Es
wurde festgestellt, daß es
am Ausgang des Multiplizierers erforderlich ist, um den Fehler unterhalb
von +/- 1,0 LSB an dem LOD-Interpolatorausgang zu halten, daß die beiden
Nachkomma-Bits gehalten werden und das Runden mit Hilfe des dritten ausgeführt wird.
Das Halten von zwei Nachkomma-Bits schafft einen Fehler von +/-
3/4 bei dem derzeit bevorzugten Ausführungsbeispiel, wobei jeder
lineare Interpolator in „Scheiben" unterteilt wird,
um 4-, 8-, oder 12-Bit-Daten zu ermöglichen. Die erste Interpolatorstufe
muß nur
4-Bit-Eingangsdaten behandeln. Die zweite und dritte Stufe enthalten
eine Scheibe, die 6-Bit-Eingangsdaten behandelt.
-
11 zeigt
drei Beispiele von verschiedenen Konfigurationen, die als Interpolatorketten
verwendet werden können.
In der ersten Konfiguration können
vier der 4-Bit-Einheit 1101 gestapelt werden, um trilineare
16-Bit-Interpolationen auszuführen.
In der zweiten Konfiguration kann ein Paar von 8-Bit-Einheiten 1102 gestapelt
werden, um trilineare 16-Bit-Inerpolationen auszuführen. In
der dritten Konfiguration wird eine einzige 12-Bit-Einheit 1103 zur
Ausführung
der Interpolationen verwendet. Eine Anzahl von Multiplexern wird
programmiert, um die verschiedenen Einheiten zu koppeln, um die
gewünschten
Konfigurationen zu erzielen. Auf diese Weise kann die gleiche Hardware
mit einer minimalen zusätzlichen
Gatteranzahl verwendet werden, um die Flexibilität in der Datenbreite zu erzielen.
Bei einigen Anwendungen ist eine größere Präzision und eine höhere Auflösung wünschenswert.
Dagegen sind in anderen Anwendungen Geschwindigkeit und Kosten von
größerer Bedeutung.
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
enthalten die Einheiten 1101 bis 1103 eine S-Stufe,
eine T-Stufe und eine LOD-Stufe. Die S-Stufen enthalten 4-Bit-Scheiben 1104.
Die T-Stufen und die LOD-Stufen enthalten 6-Bit-Scheiben 1105.
Diese Schreiben wurden konzipiert, um die Interpolatoren modular
zu gestalten. 12 zeigt eine grundlegende 4-Bit-Eingangs-Interpolationsscheibe.
-
Die
Daten zu den Multiplexern kommen von dem (nicht dargestellten) Subtrahierer.
Die höchstwertigen
(MS)-Bits sind entweder Vorzeichenerweiterungsbits (wenn die Scheibe
als MS-Scheibe verwendet
wird) oder sind die niederwertigen Bits von der nächsten höherwertigen
Scheibe (sofern es nicht die höchstwertige
Scheibe ist). Da jede Scheibe sowohl ein Vorzeichenbit als auch
dessen Erweiterung behandelt, sowie Nachkomma-Bits bzw. Fraction Bits,
werden diese Möglichkeiten
entaktiviert oder umgangen, wie es für die Position der Scheibe
in dem größeren Wort
geeignet ist. Beispielsweise würde
die MS-Scheibe für
8-Bit-Texel das Vorzeichenbit (und keine Nachkomma-Bits) behandeln
und die niederwertigste (LS)-Scheibe würde die Nachkomma-Bits (aber
kein Vorzeichen) behandeln. Die Multiplexer der Scheibenkonfiguration
aktivieren oder entaktivieren den Scheiben-MS-Abschnitt (Vorzeichenerweiterung)
oder -LS-Abschnitt (Nachkomma). 13 zeigt
einen 8-Bit-Eingangs-Interpolator, der durch Kopplung zweier 4-Bit-Scheiben
gebildet ist. 14 zeigt eine grundlegende 6-Bit-Eingangs-Interpolatorschreibe.
-
Die
Addierer und Subtrahierer sind aufgeteilt in Addierer mit Übertragsvorausberechnung
(CLAs), welche zur Ermöglichung
der gewünschten
Kombinationen über
die Scheiben vorausgeschaut haben. Die Multiplizierer verwenden
ein modifiziertes Booth-Verfahren
(z. B. Bit-Paar-Umkodierung) gefolgt von einem Wallace-Baum, wobei
der Eingang von dem Subtrahierer in der letzten Stufe des Wallace-Baums
kombiniert wird. Der Multiplizierer ist derart aufgebaut, daß die gesamte
Interpolatorscheibe zur Bildung der genaueren Versionen kombiniert werden
kann. Die Multiplikation lautet I*(Sa[0:5) + Sb[0:5] + Sc[0:5] +
Sd(0:5]). Dies ermöglicht
den einzelnen 4-Bit-Worten getrennt interpretiert zu werden oder
entsprechend geschoben und addiert zu werden, um entweder 4-Bit-,
8-Bit- oder 12-Bit-Ergebnisse (z. B. für die 6-Bit-Scheiben) zu erzeugen. „I" ist der 6-Bit-Interpolationswert
(Multiplikator in diesem Fall). Dieser grundlegende Multiplikator
beträgt
folglich 7×6.
Da dieser Multiplikator („I") für jede Gruppe von
vier Scheiben der gleiche ist, kann die gleiche Umcodierlogik für Gruppen
von vier Scheiben verwendet werden.
-
Bei
dem derzeit bevorzugten Ausführungsbeispiel
wird statt des Kombinierens der Ergebnisse nach deren individueller
Berechnung eine Vorgehensweise gewählt, welche Multipliziererscheiben verwendet,
die für
die breitere Genauigkeit parallel verbunden werden können. Dies
verhindert, daß in jeder
Scheibe die volle Genauigkeit (6 + 4 = 10 Bits) benötigt wird
und beseitigt die letzte Addiererstufe, welche sonst benötigt würde.
-
Somit
wurde ein integrierter Texturspeicher und eine Interpolationslogikeinrichtung
beschrieben, die zur Ausführung
von Texturabbildungen in einem Computeranzeigesystem verwendet werden.