DE112017001703T5 - Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie - Google Patents

Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie Download PDF

Info

Publication number
DE112017001703T5
DE112017001703T5 DE112017001703.3T DE112017001703T DE112017001703T5 DE 112017001703 T5 DE112017001703 T5 DE 112017001703T5 DE 112017001703 T DE112017001703 T DE 112017001703T DE 112017001703 T5 DE112017001703 T5 DE 112017001703T5
Authority
DE
Germany
Prior art keywords
processor
bvh
level
nodes
instantiated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112017001703.3T
Other languages
English (en)
Inventor
Ingo Wald
Sven Woop
Carsten Benthin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel IP Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel IP Corp filed Critical Intel IP Corp
Publication of DE112017001703T5 publication Critical patent/DE112017001703T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

Es werden Verfahren und Vorrichtungen bezüglich eines effizienteren Ray-Tracing von instanziierter Geometrie beschrieben. In einer Ausführungsform werden überlappende Instanzen entflochten, indem nicht die gesamten Objekte instanziiert werden, sondern mehrere Sub-BVH-Knoten der Objekte instanziiert werden, wodurch die Render-Leistung verbessert wird, indem Überlappungen von BVH-Knoten reduziert werden. Andere Ausführungsformen werden ebenfalls offenbarte und beansprucht.

Description

  • GEBIET
  • Die vorliegende Offenbarung betrifft allgemein das Gebiet der Elektronik. Insbesondere betreffen einige Ausführungsformen Techniken zum effizienteren Ray-Tracing von instanziierter Geometrie.
  • HINTERGRUND
  • In der digitalen Bildverarbeitung meint „Rendern“ allgemein den Prozess im Zusammenhang mit dem Generieren eines Bildes aus einem zweidimensionalen (2D) oder dreidimensionalen (3D) Modell. Das 2D/3D-Modell kann verschiedene Objekte mit unterschiedlichen Geometrien enthalten. Eine Rendering-Technik kann Ray-Tracing zum Simulieren des natürlichen Lichtflusses verwenden. Jedoch ist Ray-Tracing eine überaus rechenintensive Aufgabe, die eine große Anzahl von Rechenzyklen beansprucht (insbesondere in der Filmproduktion, wo mehrere Bilder pro Sekunde verarbeitet werden) und oft nur auf Computersystemen der absoluten High-End-Klasse implementiert werden kann, zum Beispiel unter Einsatz riesiger Rendering-Computerparks.
  • Figurenliste
  • Die detaillierte Beschreibung erfolgt unter Bezug auf die beiliegenden Figuren. In den Figuren identifizieren die eine oder die mehreren äußerst linken Ziffern einer Bezugszahl die Figur, in der die Bezugszahl zuerst auftaucht. Die Verwendung der gleichen Bezugszahlen in verschiedenen Figuren bezeichnet ähnliche oder identische Punkte.
    • Die 1, 3, 4, 13 und 15 veranschaulichen Blockschaubilder von Ausführungsformen von Computersystemen, die dafür verwendet werden können, verschiedene im vorliegenden Text besprochene Ausführungsformen zu implementieren.
    • 2A veranschaulicht ein Blockschaubild, wo mehrere transformierte Referenzen zum Anordnen desselben Objekts in einer Szenenhierarchie verwendet werden.
    • 2B veranschaulicht ein Blockschaubild einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Technik, dass kann sein, das in einigen Implementierungen verwendet wird.
    • 2C veranschaulicht ein Blockschaubild einer modifizierten BVH-Struktur gemäß einer Ausführungsform.
    • 2D veranschaulicht ein Flussdiagramm eines Verfahrens gemäß einer Ausführungsform.
    • 5-9 und 11 veranschaulichen verschiedene Komponenten von Prozessen gemäß einigen Ausführungsformen.
    • 10 veranschaulicht Grafikkerninstruktionsformate gemäß einigen Ausführungsformen.
    • 12A und 12B veranschaulichen Grafikprozessorbefehlsformat bzw. - sequenz gemäß einigen Ausführungsformen.
    • 14 veranschaulicht ein Schaubild einer IP-Kern-Entwicklung gemäß einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche konkrete Details dargelegt, um ein gründliches Verständnis der vorliegenden Erfindung zu ermöglichen. Jedoch können verschiedene Ausführungsformen auch ohne diese konkreten Details praktiziert werden. In anderen Fällen sind allgemein bekannte Verfahren, Abläufe, Komponenten und Schaltkreise nicht im Detail beschrieben worden, um die konkreten Ausführungsformen nicht zu überfrachten. Des Weiteren können verschiedene Aspekte von Ausführungsformen unter Verwendung verschiedener Mittel ausgeführt werden, wie zum Beispiel integrierter Halbleiterschaltkreise (Hardware), computerlesbarer Instruktionen, die zu einem oder mehreren Programmen organisiert sind (Software), oder einer Kombination von Hardware und Software. Für die Zwecke dieser Offenbarung meint ein Verweis auf „Logik“ entweder Hardware, Software, Firmware oder eine Kombination davon.
  • Wie oben angesprochen, ist Ray-Tracing zwar eine nützliche Technik in der digitalen Bildverarbeitung, doch seine Verwendung ist unter Umständen nur möglich, indem man Zugang zu absoluten High-End-Computerparks hat, die zum Beispiel mit Tausenden von High-End-Computerservern arbeiten. Darüber hinaus kann bei der Verarbeitung komplexer Filminhalte eine Technik verwendet werden, um den Speicherverbrauch zu verringern (als Instanziierung bezeichnet), wobei bestimmte Objekte, die mehrfach in einer Szene auftauchen (wie zum Beispiel eine bestimmte Art eines Autos oder eines Charakters), nur ein einziges Mal gespeichert werden. Das oder die gespeicherten Objekte können dann mehrfach an variierenden Positionen in derselben Szene verwendet werden. Anstatt also mehrere Kopien desselben Objekts zu speichern, erlaubt die Instanziierung die lediglich einmalige Speicherung des Objekts, wobei mehrere (zum Beispiel transformierte) Referenzen zum Platzieren des oder der Objekts an verschiedenen Positionen in einer Szenenhierarchie verwendet werden.
  • Zu diesem Zweck stellen einige Ausführungsformen Verfahren und Vorrichtungen zum effizienteren Ray-Tracing von instanziierter Geometrie bereit. In einer Ausführungsform werden ein Verfahren und eine Datenstruktur verwendet, welche die Ray-Tracing-Leistung für Szenen, die eine Instanziierung von Geometrie verwenden, signifikant verbessern können.
  • Des Weiteren können einige Ausführungsformen in Computersystemen angewendet werden, die eine oder mehrere Prozessoren enthalten (zum Beispiel mit einem oder mehreren Prozessorkernen), wie zu Beispiel jenen, die mit Bezug auf die 1-15 besprochen werden, einschließlich beispielsweise mobile Computergeräte, zum Beispiel ein Smartphone, ein Tablet, ein UMPC (Ultra-Mobile Personal Computer), ein Laptop-Computer, eine Ultrabook™ Computervorrichtung, am Körper tragbare Geräte (wie zum Beispiel eine Smart-Watch oder Smart-Brillen) usw. Insbesondere veranschaulicht 1 ein Blockschaubild eines Computersystems 100 gemäß einer Ausführungsform. Das System 100 kann eine oder mehrere Prozessoren 102-1 bis 102-N enthalten (im vorliegenden Text allgemein als Prozessoren 102 oder Prozessor 102 bezeichnet). Die Prozessoren 102 können Allzweck-CPUs und/oder GPUs in verschiedenen Ausführungsformen enthalten. Die Prozessoren 102 können über eine Zwischenverbindung oder einen Bus 104 kommunizieren. Jeder Prozessor kann verschiedene Komponenten enthalten, von denen einige im Interesse der Klarheit nur mit Bezug auf den Prozessor 102-1 besprochen werden. Dementsprechend kann jeder der übrigen Prozessoren 102-2 bis 102-N die gleichen oder ähnliche Komponenten enthalten, die mit Bezug auf die Prozessor 102-1 besprochen werden.
  • In einer Ausführungsform kann der Prozessor 102-1 eine oder mehrere Prozessorkerne 106-1 bis 106-M (im vorliegenden Text als Kerne 106 oder Kern 106 bezeichnet), einen Cache 108 und/oder einen Router 110 enthalten. Die Prozessorkerne 106 können auf einem einzigen Integrated Circuit (IC)-Chip implementiert werden. Darüber hinaus kann der Chip eine oder mehrere gemeinsam genutzte und/oder private Cache-Speicher (wie zum Beispiel Cache 108), Busse oder Zwischenverbindungen (wie zum Beispiel einen Bus oder eine Zwischenverbindung 112), Grafik- und/oder Speicher-Steuereinheiten (wie zu Beispiel jene, die mit Bezug auf die 3-15 besprochen werden) oder anderen Komponenten enthalten.
  • In einer Ausführungsform kann der Router 110 dafür verwendet werden, zwischen verschiedenen Komponenten des Prozessors 102-1 und/oder des Systems 100 zu kommunizieren. Darüber hinaus kann der Prozessor 102-1 mehr als einen Router 110 enthalten. Darüber hinaus kann die Vielzahl von Routern 110 in Kommunikation stehen, um eine Daten-Routung zwischen verschiedenen Komponenten innerhalb oder außerhalb des Prozessors 102-1 zu ermöglichen.
  • Der Cache 108 kann Daten (zum Beispiel einschließlich Instruktionen) speichern, die durch eine oder mehrere Komponenten des Prozessors 102-1, wie zum Beispiel die Kerne 106, genutzt werden. Zum Beispiel kann der Cache 108 lokal Daten zwischenspeichern, die in einem Speicher 114 gespeichert sind, damit die Komponenten des Prozessors 102 (zum Beispiel die Kerne 106) schneller darauf zugreifen können. Wie in 1 gezeigt, kann der Speicher 114 mit den Prozessoren 102 über die Zwischenverbindung 104 kommunizieren. In einer Ausführungsform kann der Cache 108 (der gemeinsam genutzt werden kann) ein Mid-Level-Cache (MLC), ein Last-Level-Cache (LLC) usw. sein. Des Weiteren kann jeder der Kerne 106 einen Level 1 (L1)-Cache (116-1) (im vorliegenden Text allgemein als L1-Cache 116 bezeichnet) oder andere Cache-Level, wie zum Beispiel einen Level 2 (L2)-Cache, enthalten. Darüber hinaus können verschiedene Komponenten des Prozessors 102-1 mit dem Cache 108 direkt, durch einen Bus (zum Beispiel den Bus 112) und/oder einen Speicher-Controller oder Hub kommunizieren.
  • Wie in 1 gezeigt, kann der Prozessor 102 des Weiteren Grafik-Logik 140 enthalten (die zum Beispiel eine oder mehrere Graphics Processing Units (GPU)-Kerne enthalten kann, wie zu Beispiel jene, die mit Bezug auf die 3-15 besprochen werden), um verschiedene Grafik- und/oder Allzweckberechnungs-bezogene Operationen auszuführen, wie zum Beispiel im vorliegenden Text besprochen. Die Logik 140 kann Zugriff auf ein oder mehrere im vorliegenden Text besprochene Speichergeräte haben (wie zum Beispiel Video- (oder Bild-, Grafik- usw.) Speicher, Cache 108, L1-Cache 116, Speicher 114, ein oder mehrere Register 150 oder einen anderen Speicher im System 100), um Informationen bezüglich Operationen der Logik 140 zu speichern, wie zum Beispiel Informationen, die mit verschiedenen Komponenten des Systems 100 ausgetauscht werden, wie im vorliegenden Text besprochen. Wie im vorliegenden Text besprochen, können die Register 150 in einer oder mehreren Registerdateien organisiert sein, wobei jede Registerdatei eine Gruppierung von Registern enthalten kann, auf die eine CPU oder GPU zugreifen soll. Des Weiteren sind Logik 140 und Register 150 zwar innerhalb des Prozessors 102 (oder mit der Zwischenverbindung 104 gekoppelt) gezeigt, doch können sie in verschiedenen Ausführungsformen auch anderenorts in dem System 100 angeordnet sein. Zum Beispiel kann die Logik 140 einen der Kerne 106 ersetzen, kann direkt mit der Zwischenverbindung 112 gekoppelt sein usw. Des Weiteren können Register 150 direkt mit der Zwischenverbindung 112 gekoppelt sein usw.
  • 2A veranschaulicht ein Blockschaubild, wo mehrere transformierte Referenzen zum Anordnen desselben Objekts in einer Szenenhierarchie verwendet werden. 2B veranschaulicht ein Blockschaubild einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Technik, die in einigen Implementierungen verwendet kann. 2C veranschaulicht ein Blockschaubild einer modifizierten BVH-Struktur gemäß einer Ausführungsform. Eine oder mehrere Komponenten, die mit Bezug auf die 1 oder 3-15 besprochen werden (wie zum Beispiel Grafik-Logik 140 und/oder eine GPU/Kern), können verwendet werden, um eine oder mehrere Operationen auszuführen, die mit Bezug auf die 2C und/oder 2D besprochen werden.
  • In 2A ist eine Instanziierung mit einer Zwei-Ebenen-BVH gezeigt. Die Haupt (Top-Level oder TL)-Szene bezieht sich auf transformierte Objekte (wobei „A:X1“ meint, dass Objekt A durch Matrix X1 transformiert wird usw.). Objekte und Top-Level haben jeweils eine BVH, und Grundformen in einer Top-Level-BVH beziehen sich auf die gesamten (zum Beispiel transformierten) Objekte. Wie in 2A gezeigt, anstatt mehrere Kopien desselben Objekts zu speichern, erlaubt die Instanziierung, das Objekt nur ein einziges Mal zu speichern, wobei mehrere (zum Beispiel transformierte) Referenzen verwendet werden, um das oder die Objekte an verschiedenen Positionen in einer Szenenhierarchie zu platzieren.
  • Wie in 2B zu sehen, enthalten einige Implementierungen für die Vornahme einer Instanziierung in einem Ray-Tracer den Aufbau einer Zwei-Ebenen-Hierarchie mit einem Level einer Beschleunigungsstruktur (zum Beispiel einer BVH) über jedem Basisobjekt (zum Beispiel eine gegebene Art von Auto) und einem anderen Level (die Top-Level-BVH) über alle Instanzen, wobei sich jede Top-Level-Grundform auf ein gesamtes Objekt (und die zugehörige Transformation) bezieht. Beim Ray-Tracing („Strahlverfolgung“) wird zuerst der Strahl durch die Top-Level-BVH verfolgt (zum Beispiel Knoten TL, TL0 und TL1 in 2A), und dann wird der Strahl an den Blättern (zum Beispiel Knoten A:X0, A:X1, B:X2, A:X3 in 2A) zu dem Objektraum der jeweiligen Instanz transformiert, wo er das Objekt BVH durchquert (siehe zum Beispiel Objekt A und Objekt B in 2A).
  • Ein Problem mit dem Lösungsansatz von 2A ist, dass, wenn verschiedene Instanzen sich im Welt-Raum (oder der gesamten Szene) überlappen, dieselbe räumliche Region mehrmals durchquert werden muss (einmal pro überlappender Instanz), was zu einem signifikanten Datenverwaltungsaufwand führt (zum Beispiel der Verbrauch mehrerer Rechenzyklen). Eine Instanziierung unter Verwendung dieses Lösungsansatzes mag also für die Verringerung des belegten Speicherplatzes bestens geeignet sein, doch nur um den Preis signifikanter Leistungseinbußen, wodurch das Rendern einer instanziierten Szene um ein Mehrfaches teurer werden kann (zum Beispiel im Hinblick auf Rechenzyklen) als ohne Instanziierung (unter Verwendung einer einzigen großen BVH über die gesamte Geometrie).
  • Im Gegensatz dazu modifizieren einige Ausführungsformen (wie zum Beispiel in 2C veranschaulicht) die BVH-Struktur, um jene Knoten in den Instanz-BVHs zu überspringen, die zu einer überlappenden Instanz geführt haben würden, und statt dessen neue und/oder bessere Knoten in die Top-Level-BVH einzusetzen, die in der Lage sind, direkt in geeignete Stellen der instanziierten Objekt-BVHs hinein zu zeigen. Das hat schlussendlich einen Top-Level-Baum zur Folge, der auf Unterbäume von Instanzen verweist, die keine (oder zumindest weniger) Überlappungen haben.
  • Insbesondere enthält eine Ausführungsform: (a) einen neuartigen Zwei-Ebenen-BVH-Typ, bei dem Blätter der Top-Level-BVH nicht auf gesamte Instanzen verweisen sondern statt dessen auf individuelle BVH-Unterbäume der instanziierten Objekte verweisen (jedes mit der originalen Transformationsmatrix der Instanz)); und/oder (b) eine Technik, um zu bestimmen, wie eine solche neuen BVH-Datenstruktur aufzubauen ist (zum Beispiel um zu bestimmen, auf welchen Unterbaum-Satz von der Top-Level-BVH aus zu verweisen ist).
  • 2D veranschaulicht ein Flussdiagramm eines Verfahrens 250 zum Überspringen eines oder mehrerer Knoten einer BVH-Struktur, die zu einer überlappenden Instanz führen würden, gemäß einigen Ausführungsformen. Eine oder mehrere Komponenten, die im vorliegenden Text mit Bezug auf die 1, 3-15 besprochen werden (einschließlich zum Beispiel Grafik-Logik 140 und/oder GPU/Kern) können dafür verwendet werden, eine oder mehrere Operationen auszuführen, die mit Bezug auf 2D besprochen werden.
  • Wie in den 1-2D zu sehen, werden bei einer Operation 252 Informationen, die einer BVH-Struktur entsprechen, gespeichert (zum Beispiel wie in 2C gezeigt). Die gespeicherten Informationen werden dann bei Operation 254 analysiert (zum Beispiel durch Logik 140 und/oder eine GPU/Kern, wie zu Beispiel jenen im vorliegenden Text besprochene). Bei einer Operation 256 wird bestimmt, ob die gespeicherten Informationen von Operation 252 eine oder mehrere überlappende Instanzen identifizieren (zum Beispiel pro Analyse von Operation 254). Und falls eine Überlappung bei Operation 256 detektiert wird, so modifiziert Operation 258 die BVH-Struktur, wie zum Beispiel im vorliegenden Text besprochen (zum Beispiel, um einen oder mehrere Knoten zu überspringen, die zu einer überlappenden Instanz führen würden).
  • Nehmen wir als ein Beispiel das Blockschaubild von 2C, in dem sich die Strichlinien und schraffierten Kästchen auf eine Zwei-Ebenen-BVH für die in 2B gezeigte Einstellung beziehen. Die Datenstruktur würde nicht auf die stark überlappenden Regionen (A und B sowie A0 und B0) verweisen und würden diese „schlechten“ Knoten durch Einsetzen neuer Top-Level-Knoten (T0...T01) überspringen, die auf geeignetere Knoten verweisen (A00, B00, A01, B01, A1 und B1, wie in 2C gezeigt). Diese neuen Knoten werden als geeigneter angesehen, zum Teil deshalb, weil sie zu einem besseren Baum führen würden, der effizienter durchquert werden kann.
  • In einer Ausführungsform wird im Fall räumlich überlappender Instanzen die Überlappung signifikant verringert. Anstatt gesamte Hierarchien sequenziell zu durchqueren, ist eine solche geflochtene Top-Level-BVH in der Lage, (alle oder die meisten) Knoten in Instanzen zu überspringen, die sich davor überlappt haben würden, und direkt zu zweckmäßigeren Unterbäumen zu queren, die sich nicht (oder wenigstens deutlich weniger) überlappen. Dadurch ergibt sich eine signifikant höhere Leistung insbesondere für Modelle, die in hohem Maße Instanziierung verwenden, wie zum Beispiel, wenn sich viele solcher Instanzen überlappen. Somit können in einigen Ausführungsformen mindestens einige Verfahren und/oder Datenstrukturen das Rendern oder Ray-Tracing von Instanzen in diesen Fällen signifikant beschleunigen und können die Instanziierung (zum Beispiel potenziell zu moderaten Kosten bei höherem Speicherverbrauch) nahezu so schnell machen wie das Rendern replizierter (d. h. nicht-instanziierter) Geometrie.
  • In einer Ausführungsform ähnelt die grundlegende Datenstruktur strukturell einer Zwei-Ebenen-BVH, mit einer Modifizierung, um es zu ermöglichen, dass Grundformen in der Top-Level-BVH nicht auf Instanzen verweisen, sondern statt dessen auf spezifische Instanz-BVH-Unterbäume verweisen. Darüber hinaus wäre jede Blatt-Grundform in der Top-Level-BVH ein Paar (Instanz-ID (Identifikator), Unterbaum-ID), wobei die Instanz-ID das Bestimmen der Transformation erlaubt, der die Objekt-BVH unterzogen werden sollte, sowie der Objekt-BVH, auf die der zweite Parameter (die Unterbaum-ID) verweist.
  • Das Durchqueren einer solchen Struktur würde gemäß einigen Ausführungsformen einfach sein. Insbesondere durchquert der Strahl zuerst die Top-Level-BVH, und wenn er ein Blatt erreicht, so wird der Strahl zu dem Koordinatensystem der Instanz transformiert und springt direkt zum Durchqueren des jeweiligen Unterbaums jener Instanz, auf die die Top-Level-Grundform verwiesen hat. Um wiederholte Transformationen eines Strahls mit derselben Transformationsmatrix zu vermeiden, ist es möglich (aber nicht erforderlich), das Ergebnis jener Transformation zwischenzuspeichern (zum Beispiel in einem Speicher/Cache, wie zu Beispiel dem, der mit Bezug auf die 1 und/oder 3-15 besprochen wird). Erweiterungen zum Durchqueren mit SIMD (Single Instruction, Multiple Data) oder Vektorinstruktionen ähnlich dem Durchqueren regulärer BVHs sind möglich, wie auch die Ausweitung solcher Ausführungsformen auf andere Beschleunigungsstrukturen, wie zum Beispiel die Mehrfachverzweigung von BVHs, Octrees, k-dimensionale (kd) Bäume, Gitter usw.
  • In einigen Ausführungsformen nehmen die beschriebenen Konstruktionsalgorithmen an, dass ein Teil der BVH bereits für jedes Objekt, das instanziiert ist, errichtet ist. Dieser Lösungsansatz ist unabhängig von dem Algorithmus, der zum Aufbau dieser Objekt-weisen Hierarchien verwendet wird.
  • Darüber hinaus gibt es für den Aufbau der Datenstruktur eine Vielzahl verschiedener Optionen. Zum Beispiel besteht eine Option darin, zuerst eine a-priori-„Entflechtung“ aller Objekt-BVHs bis zu einem bestimmten Level oder bis zu einer bestimmten Größe von Dreiecken pro Unterbaum, Fläche pro (Welt-Raum-) Begrenzungskästchen eines Unterbaums usw. auszuführen. Das führt zu einem Satz von (Instanz-ID-, Unterbaum-ID-) Paaren, auf denen die Top-Level-BVH dann aufgebaut werden kann. Das Berechnen des (Welt-Raum-) Begrenzungskästchens einer jeden solchen Grundform kann erfolgen, indem man das Begrenzungskästchen des Unterbaums der jeweiligen Instanz zu einem Welt-Raum transformiert (zum Beispiel unter Verwendung der Transformationsmatrix der Instanz), oder eventuell einige der Kind-Kästchen oder Grundformen der Instanz ansieht und diese transformiert. Sobald zweckmäßige Begrenzungskästchen für die Top-Level-Grundformen verfügbar sind, kann ein existierender BVH-Builder verwendet werden, einschließlich beispielsweise auf Surface Area Heuristic (SAH)-Basis, auf Binning-Basis, auf Morton-Code-Basis usw.
  • Eine andere Option ist es, das Entflechten nach Bedarf während der Top-Down-Konstruktion der Top-Level-BVH auszuführen. Ein standardmäßiger BVH-Builder beginnt mit einer Liste von Baugrundformen (in unserem Fall Paaren aus Transformation und BVH-Knoten der Objekt-BVH). Diese Liste von Baugrundformen wird unter Verwendung einiger räumlicher Kriterien (wie zum Beispiel der Surface Area Heuristic) in zwei Listen geteilt. Der Builder erzeugt dann einen Knoten und rekursiert mit den kleineren Baugrundformlisten, um die Kind-Knoten zu bauen. Beim Ausführen von etwas Entflechtung vor dem Teilen der Baugrundformlisten kann man die Überlappung zwischen den Kästchen der Kind-Knoten reduzieren, um die Rendering-Leistung zu verbessern. Eine weitere Option ist die Einbindung des Entflechtens in die Evaluierung der Teilungsheuristik, um eine Baugrundform nur zu entflechten, wenn dies die Heuristik verbessert.
  • In einer Ausführungsform kann das Entflechten folgendermaßen vonstatten gehen:
    1. (1) Erzeugen einer Liste aller Top-Level Instanzen; das heißt einer Liste über alle Paare (G,X), wobei G ein zu instanziierendes Objekt ist und X die Transformation ist, mit der es zu instanziieren ist.
    2. (2) Für jedes (G,X), Generieren von (G,R(G),X), wobei R(G) der Wurzelknoten der Objekt-BVH von G ist. Nun verweist jedes Tripel (G,N,X) auf einen (Unter-) Baum eines zu instanziierenden Objekts.
    3. (3) Definieren einer geeigneten Funktion f(G,N,X) zum Berechnen der Wichtigkeit des Entflechtens eines gegebenen Unterbaums (G,N,X). Ein nützliches Beispiel von f wäre die Oberfläche des Welt-Raum-Begrenzungskästchens des Unterbaumes N, Area(bounds(X(N)).
    4. (4) Aus der gegebenen Liste von (G,N,X)'es, die entflochten werden könnte, wird die mit der höchsten Prioritätsfunktion herausgesucht. Für parallele Implementierungen kann dieses Heraussuchen auch annähernd erfolgen.
    5. (5) Entfernen des herausgesuchten (G,N,X) aus der Liste und Einsetzen von (G,C0(N),X) (G,C1(N),X) usw. in die Liste, wobei C0(N), C1(N) usw. die Kinder von Knoten N sind.
    6. (6) Iterieren von 4-5, bis ein bestimmtes Beendigungskriterium - wie zum Beispiel, dass eine Gesamtzahl von Teilungen ausgeführt wird - erreicht ist.
    7. (7) Aufbau einer Top-Level-BVH über alle (G,N,X)'es in dieser Liste.
  • In verschiedenen Ausführungsformen können andere Variationen verwendet werden. Als Aufbauvarianten können eines oder mehrere des Folgenden verwendet werden:
    • (a) Als das Beendigungskriterium könnte man auch eine relative Anzahl von generierten neuen Knoten, eine Anzahl von ausgeführten Teilungen, gesamter oder relative Speicherverwaltungsaufwand, ein Zielfraktion entflochtener BVH-Knoten pro eingegebener Grundform, eine Zielfraktion entflochtener BVH-Knoten pro instanziierter eingegebener Grundform usw. in Betracht ziehen.
    • (b) Die Prioritätsfunktion könnte auch die Oberfläche der Kinder, die Anzahl der Grundformen in dem Unterbaum, die Tiefe des Knotens in der Objekt-BVH, eine Verstärkung der Flächenreduzierung beim Entflechten des Knotens usw. in Betracht ziehen.
    • (c) Die Prioritätsfunktion könnte auch die Überlappung dieses Knotens mit anderen Knoten in Betracht ziehen.
    • (d) Das Entflechten könnte als ein Nachbearbeitungsschritt einer existierenden Top-Level-BVH ausgeführt werden. Zum Beispiel könnte die Aufbaualgorithmus, beginnend mit einer existierenden Top-Level-BVH, versuchen, überlappende Knoten zu finden und entflechten, indem neue Knoten in den Top-Level-Baum eingefügt werden.
    • (e) Es könnte hilfreich sein, das Entflechten nur an jenen Instanzen auszuführen, die mindestens eine gewisse Überlappung mit anderen Instanzen aufweisen.
    • (f) Eine Nachoptimierung könnte ausgeführt werden, die Kinder in der Top-Level-BVH, die die gleiche Transformationsmatrix haben, wieder fusioniert.
  • In verschiedenen Ausführungsformen können Durchquerungsvarianten eines oder mehrere des Folgenden enthalten:
    1. (i) Top-Level-Verweise auf verschiedene Unterbäume derselben Objekt-BVH können (zum Beispiel alle) dieselbe Strahltransformation während des Durchquerens verwenden. Um wiederholte Transformationen mit derselben Transformation zu vermeiden, könnte das Ergebnis von Strahltransformationen in einem Speicher/Cache zwischengespeichert werden, wie zu Beispiel jenen, die mit Bezug auf die 1 und/oder 3-15 besprochen werden.
    2. (ii) Das Durchqueren könnte spezielle Arten von Transformationen optimieren, falls der Transformationstyp in jedem Instanzknoten der Top-Level-BVH gespeichert wird. Das Durchqueren kann dann diesen Typ überprüfen und spezielle Code-Pfade für eines oder mehrere von: Identitätstransformation, Translationen, Rotationen, Skalierungstransformationen usw. implementieren.
  • In einigen Ausführungsformen können eine oder mehrere der im vorliegenden Text besprochenen Komponenten als eine System on Chip (SoC)-Vorrichtung verkörpert werden. 3 veranschaulicht ein Blockschaubild eines SoC-Package gemäß einer Ausführungsform. Wie in 3 veranschaulicht, enthält das SoC 302 einen oder mehrere Central Processing Unit (CPU)-Kerne 320 (die die gleichen oder ähnliche sein können wie die Kerne 106 von 1), einen oder mehrere Graphics Processing Unit (GPU)-Kerne 330 (die die gleichen oder ähnliche sein können wie die Grafik-Logik 140 von 1), eine Eingabe/Ausgabe (E/A)-Schnittstelle 340 und einen Speicher-Controller 342. Verschiedene Komponenten des SoC-Package 302 können mit einer Interconnect-Verbindung oder einem Bus gekoppelt sein, wie zum Beispiel im vorliegenden Text mit Bezug auf die anderen Figuren besprochen. Des Weiteren kann das SoC-Package 302 mehr oder weniger Komponenten enthalten, wie zu Beispiel jene, die im vorliegenden Text mit Bezug auf die anderen Figuren besprochen wurden. Des Weiteren kann jede Komponente des SoC-Package 320 eine oder mehrere andere Komponenten enthalten, wie sie zum Beispiel mit Bezug auf die anderen Figuren im vorliegenden Text besprochen werden. In einer Ausführungsform ist das SoC-Package 302 (und seine Komponenten) auf einem oder mehreren Integrated Circuit (IC)-Dies angeordnet, die zum Beispiel in einer einzigen Halbleitervorrichtung verkapselt sind.
  • Wie in 3 veranschaulicht, ist das SoC-Package 302 über den Speicher-Controller 342 mit einem Speicher 360 gekoppelt (der ähnlich oder derselbe sein kann wie der Speicher, der im vorliegenden Text mit Bezug auf die anderen Figuren besprochen wird, wie zum Beispiel der Systemspeicher 114 von 1). In einer Ausführungsform kann der Speicher 360 (oder ein Abschnitt davon) in das SoC-Package 302 integriert sein.
  • Die E/A-Schnittstelle 340 kann mit einer oder mehreren E/A-Vorrichtungen 370 gekoppelt sein, zum Beispiel über eine Interconnect-Verbindung und/oder einen Bus, wie zum Beispiel im vorliegenden Text mit Bezug auf die anderen Figuren besprochen. Die eine oder die mehreren E/A-Vorrichtungen 370 können eines oder mehrere von Folgendem enthalten: eine Tastatur, eine Maus, ein Touchpad, eine Anzeige, eine Bild-/Videoaufnahmevorrichtung (wie zum Beispiel eine Kamera oder ein Camcorder/Videorecorder), einen Berührungsbildschirm, einen Lautsprecher oder dergleichen. Darüber hinaus kann das SoC-Package 302 in einer Ausführungsform die Logik 140 und/oder ein oder mehrere Register 150 (oder einen Abschnitt des einen oder der mehreren Register 150) enthalten/integrieren. Alternativ können die Logik 140 und/oder ein oder mehrere Register 150 (oder ein Abschnitt des einen oder der mehreren Register 150) außerhalb des SoC-Package 302 angeordnet werden (d. h. als eine diskrete Logik).
  • 4 ist ein Blockschaubild eines Verarbeitungssystems 400 gemäß einer Ausführungsform. In verschiedenen Ausführungsformen enthält das System 400 einen oder mehrere Prozessoren 402 und einen oder mehrere Grafikprozessoren 408 (wie zum Beispiel die Grafik-Logik 140 von 1), und kann ein Einprozessor-Desktopsystem, ein Mehrprozessor-Workstation-System oder ein Serversystem sein, das ein große Anzahl von Prozessoren 402 (wie zum Beispiel Prozessor 102 von 1) oder Prozessorkernen 407 (wie zum Beispiel Kerne 106 von 1) aufweist. In einer Ausführungsform ist das System 400 eine Verarbeitungsplattform, die in einen integrierten System-on-Chip (SoC)-Schaltkreis zur Verwendung in mobilen, handgehaltenen oder eingebetteten Geräten integriert ist.
  • Eine Ausführungsform des Systems 400 kann eine Server-basierte Spiele-Plattform, eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole, eine mobile Spielekonsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole enthalten oder darin integriert sein. In einigen Ausführungsformen ist das System 400 ein Mobiltelefon, ein Smartphone, eine Tablet-Computervorrichtung oder eine mobile Internet-Vorrichtung. Das Datenverarbeitungssystem 400 kann auch eine am Körper tragbare Vorrichtung, wie zum Beispiel eine am Körper tragbare Smart-Watch, eine Smart-Eyewear-Vorrichtung, eine Augmented-Reality-Vorrichtung oder eine Virtual-Reality-Vorrichtung, enthalten oder damit gekoppelt oder darin integriert sein. In einigen Ausführungsformen ist das Datenverarbeitungssystem 400 ein Fernseher oder eine Set-Top-Box, der bzw. die einen oder mehrere Prozessoren 402 und eine grafische Schnittstelle hat, die durch einen oder mehrere Grafikprozessoren 408 generiert wird.
  • In einigen Ausführungsformen können der eine oder die mehreren Prozessoren 402 jeweils einen oder mehrere Prozessorkerne 407 enthalten, um Instruktionen zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- und Nutzer-Software ausführen. In einigen Ausführungsformen ist jeder des einen oder der mehreren Prozessorkerne 407 dafür konfiguriert, einen speziellen Instruktionssatz 409 zu verarbeiten. In einigen Ausführungsformen kann der Instruktionssatz 409 Complex Instruction Set Computing (CISC), Reduced Instruction Set Computing (RISC) oder das Berechnen über ein Very Long Instruction Word (VLIW) ermöglichen. Mehrere Prozessorkerne 407 können jeweils einen anderen Instruktionssatz 409 verarbeiten, der Instruktionen enthalten kann, um die Emulation anderer Instruktionssätze zu ermöglichen. Der Prozessorkern 407 kann auch andere Verarbeitungsvorrichtungen enthalten, wie zum Beispiel einen Digitalsignalprozessor (DSP).
  • In einigen Ausführungsformen enthält der Prozessor 402 Cache-Speicher 404. In Abhängigkeit von der Architektur kann der Prozessor 402 einen einzigen internen Cache oder mehrere Level von internem Cache haben. In einigen Ausführungsformen wird der Cache-Speicher zwischen verschiedenen Komponenten des Prozessors 402 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 402 auch einen externen Cache (zum Beispiel ein Level-3 (L3)-Cache oder Last-Level-Cache (LLC)) (nicht gezeigt), der zwischen Prozessorkernen 407 gemeinsam genutzt werden kann, die bekannte Cache-Kohärenz-Techniken nutzen. Eine Registerdatei 406 ist zusätzlich in dem Prozessor 402 enthalten, die verschiedene Arten von Registern zum Speichern verschiedener Arten von Daten enthalten kann (zum Beispiel Ganzzahl-Register, Gleitkomma-Register, Status-Register und ein Instruktionszeiger-Register). Einige Register können Allzweck-Register sein, während andere Register für das Design des Prozessors 402 spezifisch sein können.
  • In einigen Ausführungsformen ist der Prozessor 402 mit einem Prozessor-Bus 410 gekoppelt, um Kommunikationssignale, wie zum Beispiel Adresse, Daten oder Steuersignale, zwischen dem Prozessor 402 und anderen Komponenten in dem System 400 zu übertragen. In einer Ausführungsform verwendet das System 400 eine beispielhafte „Hub“-Systemarchitektur, die einen Speicher-Controller-Hub 416 und einen Eingabe/Ausgabe (E/A)-Controller-Hub 430 enthält. Ein Speicher-Controller-Hub 416 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 400, während ein E/A-Controller-Hub (ICH) 430 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt. In einer Ausführungsform ist die Logik des Speicher-Controller-Hubs 416 ist in den Prozessor integriert.
  • Die Speichervorrichtung 420 kann eine Dynamic Random Access Memory (DRAM)-Vorrichtung, einen Static Random Access Memory (SRAM)-Vorrichtung, eine Flash-Speichervorrichtung, eine Phasenänderungs-Speichervorrichtung oder irgend eine andere Speichervorrichtung sein, die eine geeignete Leistung besitzt, um als Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 420 als Systemspeicher für das System 400 arbeiten, um Daten 422 und Instruktionen 421 zu speichern, um sie zu verwenden, wenn der eine oder die mehreren Prozessoren 402 eine Anwendung oder einen Prozess ausführen. Der Speicher-Controller-Hub 416 ist außerdem mit einem optionalen externen Grafikprozessor 412 gekoppelt sein, der mit dem einen oder den mehreren Grafikprozessoren 408 in Prozessoren 402 kommunizieren kann, um Grafik- und Medienoperationen auszuführen.
  • In einigen Ausführungsformen ermöglicht der ICH 430 es Peripheriegeräten, sich mit der Speichervorrichtung 420 und dem Prozessor 402 über einen Hochgeschwindigkeits-E/A-Bus zu verbinden. Zu den E/A-Peripheriegeräten gehören beispielsweise ein Audio-Controller 446, eine Firmware-Schnittstelle 428, ein Drahtlos-Transceiver 426 (zum Beispiel Wi-Fi, Bluetooth), eine Datenspeichervorrichtung 424 (zum Beispiel Festplattenlaufwerk, Flash-Speicher usw.) und ein E/A-Controller 440 älterer Bauart, um Geräte älterer Bauart (zum Beispiel Personal System 2 (PS/2)) mit dem System zu koppeln. Ein oder mehrere Universal Serial Bus (USB)-Controller 442 verbinden Eingabegeräte, wie zum Beispiel Tastatur- und Maus 444-Kombinationen. Ein Netzwerk-Controller 434 kann ebenfalls mit dem ICH 430 gekoppelt sein. In einigen Ausführungsformen ist ein Hochleistungs-Netzwerk-Controller (nicht gezeigten) mit dem Prozessor-Bus 410 gekoppelt. Es versteht sich, dass das gezeigte System 400 beispielhaft und nicht einschränkend ist, da andere Arten von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann der E/A-Controller-Hub 430 in den einen oder mehrere Prozessoren 402 integriert werden, oder der Speicher-Controller-Hub 416 und der E/A-Controller-Hub 430 können in einen diskreten externen Grafikprozessor, wie zum Beispiel den externen Grafikprozessor 412, integriert werden.
  • 5 ist ein Blockschaubild einer Ausführungsform eines Prozessors 500, der einen oder mehrere Prozessorenkerne 502A - 502N, einen integrierten Speicher-Controller 514 und einen integrierten Grafikprozessor 508 aufweist. Der Prozessor 500 kann ähnlich oder der gleiche sein wie der Prozessor 102, der mit Bezug auf 1 besprochen wird. Jene Elemente von 5, die die gleichen Bezugszahlen (oder Namen) haben wie die Elemente jeder anderen Figur im vorliegenden Text, können in jeder Weise ähnlich denjenigen arbeiten oder funktionieren, die an anderer Stelle im vorliegenden Text beschrieben sind, ohne darauf beschränkt zu sein. Der Prozessor 500 kann zusätzliche Kerne bis einschließlich dem zusätzlichen Kern 502N enthalten, wie durch die Strichlinienkästchen dargestellt. Jeder der Prozessorkerne 502A - 502N enthält eine oder mehrere interne Cache-Einheiten 504A - 504N. In einigen Ausführungsformen hat jeder Prozessorkern ebenfalls Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 506.
  • Die internen Cache-Einheiten 504A - 504N und die gemeinsam genutzten Cache-Einheiten 506 repräsentieren eine Cache-Speicher-Hierarchie in dem Prozessor 500. Die Cache-Speicher-Hierarchie kann mindestens einen Level von Instruktions- und Daten-Cache innerhalb jedes Prozessorkerns und einem oder mehrere Level von gemeinsam genutztem Mid-Level-Cache, wie zum Beispiel einen Level 2 (L2)-, Level 3 (L3)-, Level 4 (L4)- oder andere Level von Cache enthalten, wobei der höchste Level von Cache vor dem externen Speicher als der LLC klassifiziert ist. In einigen Ausführungsformen hält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 506 und 504A - 504N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 500 auch einen Satz aus einem oder mehreren Bus-Controller-Einheiten 516 und einem Systemagent-Kern 510 enthalten. Der eine oder die mehreren Bus-Controller-Einheiten 516 verwalten einen Satz von peripheren Bussen, wie zum Beispiel einem oder mehreren Peripheral Component Interconnect-Bussen (zum Beispiel PCI, PCI Express). Der Systemagent-Kern 510 stellt Managementfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen enthält der Systemagent-Kern 510 einen oder mehrere integrierte Speicher-Controller 514 zum Verwalten des Zugriffs auf verschiedene (nicht gezeigte) externe Speichervorrichtungen.
  • In einigen Ausführungsformen enthalten einer oder mehrere der Prozessorkerne 502A - 502N Unterstützung für gleichzeitiges Multi-Threading. In einer solchen Ausführungsform enthält der Systemagent-Kern 510 Komponenten zum Koordinieren und Betreiben der Kerne 502A - 502N während der nebenläufigen Verarbeitung. Der Systemagent-Kern 510 kann zusätzlich eine Power Control Unit (PCU) enthalten, die Logik und Komponenten zum Regeln des Energiezustands der Prozessorkerne 502A-502N und des Grafikprozessors 508 enthält.
  • In einigen Ausführungsformen enthält der Prozessor 500 zusätzlich einen Grafikprozessor 508 zum Ausführen von Grafikverarbeitungsoperationen. In einigen Ausführungsformen ist der Grafikprozessor 508 mit dem Satz gemeinsam genutzter Cache-Einheiten 506 und dem Systemagent-Kern 510, einschließlich dem einen oder den mehreren integrierten Speicher-Controllern 514, gekoppelt. In einigen Ausführungsformen ist ein Anzeige-Controller 511 mit dem Grafikprozessor 508 gekoppelt, um die Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen zu steuern. In einigen Ausführungsformen kann der Anzeige-Controller 511 ein separates Modul sein, das mit dem Grafikprozessor über mindestens eine Interconnect-Verbindung gekoppelt ist, oder kann in den Grafikprozessor 508 oder Systemagent-Kern 510 integriert sein.
  • In einigen Ausführungsformen wird eine Ring-basierte Interconnect-Einheit 512 dafür verwendet, die internen Komponenten des Prozessors 500 zu koppeln. Jedoch kann auch eine alternative Interconnect-Einheit verwendet werden, wie zum Beispiel eine Punkt-zu-Punkt-Interconnect-Verbindung, ein geschaltete Interconnect-Verbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik allgemein bekannt sind. In einigen Ausführungsformen ist der Grafikprozessor 508 mit der Ring-Interconnect-Verbindung 512 über einen E/A-Link 513 gekoppelt.
  • Der beispielhafte E/A-Link 513 repräsentiert mindestens eines von mehreren verschiedenen Arten von E/A-Interconnect-Verbindungen, einschließlich einer on-Package-E/A-Interconnect-Verbindung, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 518 ermöglicht, wie zum Beispiel einem eDRAM (oder eingebetteten DRAM)-Modul. In einigen Ausführungsformen verwenden jeder der Prozessorkerne 502 - 502N und der Grafikprozessor 508 eingebettete Speichermodule 518 als einen gemeinsam genutzten Last-Level-Cache.
  • In einigen Ausführungsformen sind die Prozessorkerne 502A - 502N homogene Kerne, die die gleiche Instruktionssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 502A - 502N im Hinblick auf die Instruktionssatzarchitektur (ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 502A - 502N einen ersten Instruktionssatz ausführen, während mindestens einer der anderen Kerne eine Teilmenge des ersten Instruktionssatzes oder einen anderen Instruktionssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 502A - 502N im Hinblick auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die einen relativ höheren Stromverbrauch haben, mit einem oder mehreren Leistungskernen gekoppelt sind, die einen niedrigeren Stromverbrauch haben. Zusätzlich kann der Prozessor 500 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung implementiert werden, die die veranschaulichten Komponenten, zusätzlich zu anderen Komponenten, aufweist.
  • 6 ist ein Blockschaubild eines Grafikprozessors 600, der eine diskrete Grafikverarbeitungseinheit sein kann, oder ein Grafikprozessor sein kann, der in mehrere Verarbeitungskerne integriert ist. Der Grafikprozessor 600 kann ähnlich oder der gleiche sein wie die Grafik-Logik 140, die mit Bezug auf 1 besprochen wird. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine Speichergemappte E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in dem Prozessorspeicher abgelegt werden. In einigen Ausführungsformen enthält der Grafikprozessor 600 eine Speicherschnittstelle 614 für einen Zugriff auf den Speicher. Die Speicherschnittstelle 614 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Cache-Speichern, einem oder mehreren gemeinsam genutzten externen Cache-Speichern und/oder zu Systemspeicher sein.
  • In einigen Ausführungsformen enthält der Grafikprozessor 600 auch einen Anzeige-Controller 602 zum Ansteuern von Anzeige-Ausgabedaten zu einer Anzeigevorrichtung 620. Der Anzeige-Controller 602 enthält Hardware für eine oder mehrere Überlagerungsebenen zum Anzeigen und Zusammensetzen mehrerer Schichten von Video oder Nutzerschnittstellenelementen. In einigen Ausführungsformen enthält der Grafikprozessor 600 eine Video-Codec-Engine 606 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierformaten, einschließlich beispielsweise Moving Picture Experts Group (MPEG)-Formate wie zum Beispiel MPEG-2, Advanced Video Coding (AVC)-Formate wie zum Beispiel H.264/MPEG-4 AVC sowie die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG)-Formate wie zum Beispiel JPEG und Motion JPEG (MJPEG)-Formate.
  • In einigen Ausführungsformen enthält der Grafikprozessor 600 eine Block Image Transfer (BLIT)-Engine 604 zum Auszuführen zweidimensionaler (2D) Rasterisierer-Operationen, einschließlich beispielsweise Bit-Grenzen-Blocktransfers. Jedoch werden in einer Ausführungsform 2D-Grafik-Operationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 610 ausgeführt. In einigen Ausführungsformen ist die Grafikverarbeitungs-Engine 610 eine Computer-Engine zum Ausführen von Grafik-Operationen, einschließlich dreidimensionaler (3D) Grafik-Operationen und Medienoperationen.
  • In einigen Ausführungsformen enthält die GPE 610 eine 3D-Pipeline 612 zum Ausführen von 3D-Operationen, wie zum Beispiel Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundformen (zum Beispiel Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 612 enthält programmierbare und fixe Funktionselemente, die verschiedene Aufgaben in dem Element ausführen und/oder Ausführungs-Threads zu einem 3D/Medien-Subsystem 615 initiieren. Zwar kann die 3D-Pipeline 612 dafür verwendet werden, Medienoperationen auszuführen, doch enthält eine Ausführungsform der GPE 610 auch eine Medien-Pipeline 616, die speziell dafür verwendet wird, Medienoperationen auszuführen, wie zum Beispiel Videonachbearbeitung und Bildoptimierung.
  • In einigen Ausführungsformen enthält die Medien-Pipeline 616 Festfunktions- oder programmierbare Logik-Einheiten zum Ausführen einer oder mehrerer spezialisierter Medienoperationen, wie zum Beispiel Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung, anstelle oder im Namen der Video-Codec-Engine 606. In einigen Ausführungsformen enthält die Medien-Pipeline 616 zusätzlich eine Thread-Initiierungs-Einheit zum Initiieren von Threads zur Ausführung auf dem 3D/Medien-Subsystem 615. Die initiierten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten aus, die in dem 3D/Medien-Subsystem 615 enthalten sind.
  • In einigen Ausführungsformen enthält das 3D/Medien-Subsystem 615 Logik zum Ausführen von Threads, die durch die 3D-Pipeline 612 und die Medien-Pipeline 616 initiiert wurden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 615, das Thread-Dispatchlogik zum Arbitrieren und Versenden der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen enthält. Die Ausführungsressourcen enthalten eine Gruppierung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen enthält das 3D/Medien-Subsystem 615 einen oder mehrere interne Cache-Speicher für Thread-Instruktionen und Daten. In einigen Ausführungsformen das enthält Subsystem auch gemeinsam genutzten Speicher, einschließlich Register und adressierbaren Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • 7 ist ein Blockschaubild einer Grafikverarbeitungs-Engine 710 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die GPE 710 eine Version der in 6 gezeigten GPE 610. Elemente von 7, die die gleichen Bezugszahlen (oder Namen) haben wie die Elemente jeder anderen Figur im vorliegenden Text, können in jeder Weise ähnlich denjenigen arbeiten oder funktionieren, die an anderer Stelle im vorliegenden Text beschrieben sind, ohne darauf beschränkt zu sein.
  • In einigen Ausführungsformen ist die GPE 710 mit einem Befehls-Streamer 703 gekoppelt, der einen Befehls-Stream an die GPE 3D- und Medien-Pipelines 712, 716 bereitstellt. In einigen Ausführungsformen ist der Befehls-Streamer 703 mit Speicher gekoppelt, der Systemspeicher oder interner Cache-Speicher und/oder gemeinsam genutzter Cache-Speicher sein kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 703 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 712 und/oder die Medien-Pipeline 716. Die Befehle sind Direktiven, die aus einem Ringpuffer geholt werden, der Befehle für die 3D- und Medien-Pipelines 712, 716 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Batch-Befehlspuffer enthalten, die Batches von mehreren Befehlen speichern. Die 3D- und Medien-Pipelines 712, 716 verarbeiten die Befehle durch Ausführen von Operationen über Logik innerhalb der jeweiligen Pipelines oder durch Versenden eines oder mehrerer Ausführungs-Threads an eine Ausführungseinheiten-Gruppierung 714. In einigen Ausführungsformen ist die Ausführungseinheiten-Gruppierung 714 skalierbar, dergestalt, dass die Gruppierung eine variable Anzahl von Ausführungseinheiten auf der Basis der Zielenergie und der Leistungsstufe der GPE 710 enthält.
  • In einigen Ausführungsformen ist eine Sampling-Engine 730 mit Speicher (zum Beispiel Cache-Speicher oder Systemspeicher) und der Ausführungseinheiten-Gruppierung 714 gekoppelt. In einigen Ausführungsformen stellt die Sampling-Engine 730 einen Speicherzugangsmechanismus für die Ausführungseinheiten-Gruppierung 714 bereit, der es der Ausführungsgruppierung 714 erlaubt, Grafik- und Medien-Daten aus dem Speicher zu lesen. In einigen Ausführungsformen enthält die Sampling-Engine 730 Logik zum Ausführen spezialisierter Bild-Sampling-Operationen für Medien.
  • In einigen Ausführungsformen enthält die spezialisierte Medien-Sampling-Logik in der Sampling-Engine 730 ein Entrauschungs-/Entschachtelungsmodul 732, ein Bewegungsschätzungsmodul 734 und ein Bildskalierungs- und -filterungsmodul 736. In einigen Ausführungsformen enthält das Entrauschungs-/Entschachtelungsmodul 732 Logik zum Ausführen eines Entrauschungs- und/oder Entschachtelungsalgorithmus an decodierten Video-Daten. Die Entschachtelungslogik kombiniert abwechselnde Felder von verschachteltem Videoinhalt zu einem einzigen Videovollbild. Die Entrauschungslogik verringert oder entfernt Datenrauschen aus Video- und Bild-Daten. In einigen Ausführungsformen sind die Entrauschungslogik und die Entschachtelungslogik bewegungsadaptiv und verwenden räumliche oder zeitliche Filterung auf der Basis des in den Video-Daten detektierten Bewegungsbetrages. In einigen Ausführungsformen enthält das Entrauschungs-/Entschachtelungsmodul 732 dedizierte Bewegungsdetektionslogik (zum Beispiel in der Bewegungsschätzungs-Engine 734).
  • In einigen Ausführungsformen stellt die Bewegungsschätzungs-Engine 734 Hardware-Beschleunigung für Video-Operationen durch Ausführen von Videobeschleunigungsfunktionen wie zum Beispiel Bewegungsvektorschätzung und Vorhersage von Video-Daten bereit. Die Bewegungsschätzungs-Engine bestimmt Bewegungsvektoren, die die Transformation von Bild-Daten zwischen aufeinanderfolgenden Videovollbildern beschreiben. In einigen Ausführungsformen verwendet ein Grafikprozessormediencodec die Video-Bewegungsschätzungs-Engine 734 zum Ausführen von Operationen an Video auf der Makro-Block-Ebene, deren Ausführung mit einem Allzweck-Prozessor sonst zu rechenintensiv sein könnte. In einigen Ausführungsformen steht die Bewegungsschätzungs-Engine 734 allgemein Grafikprozessorkomponenten zur Verfügung, um Videodecodier- und - verarbeitungsfunktionen zu unterstützen, die für die Richtung oder Größenordnung der Bewegung innerhalb von Video-Daten empfindlich oder adaptiv sind.
  • In einigen Ausführungsformen führt das Bildskalierungs- und -filterungsmodul 736 Bildverarbeitungsoperationen aus, um die visuelle Qualität von generierten Bildern und generiertem Video zu verbessern. In einigen Ausführungsformen verarbeitet das Skalierungs- und -filterungsmodul 736 Bild- und Video-Daten während der Sampling-Operation vor dem Übermitteln der Daten an die Ausführungseinheiten-Gruppierung 714.
  • In einigen Ausführungsformen enthält die GPE 710 einen Daten-Port 744, der einen zusätzlichen Mechanismus für Grafiksubsysteme zu Zugreifen auf Speicher bereitstellt. In einigen Ausführungsformen ermöglicht der Daten-Port 744 den Speicherzugriff für Operationen wie zum Beispiel Renderziel-Schreibvorgänge, konstante Puffer-Lesevorgänge, Scratch-Speicherraum-Lesevorgänge/Schreibvorgänge und Medienoberflächenzugriffe. In einigen Ausführungsformen enthält der Daten-Port 744 Cache-Speicherraum für Cache-Zugriffe auf Speicher. Der Cache-Speicher kann ein einzelner Daten-Cache sein oder kann aufgeteilt sein in mehrere Cache-Speicher für die mehreren Subsysteme, die auf Speicher über den Daten-Port zugreifen (zum Beispiel ein Renderpuffer-Cache, ein konstanter Puffer-Cache usw.). In einigen Ausführungsformen kommunizieren Threads, die auf einer Ausführungseinheit in der Ausführungseinheiten-Gruppierung 714 ausgeführt werden, mit dem Daten-Port durch Austauschen von Nachrichten über eine Datenverteilungs-Interconnect-Verbindung, die jedes der Subsysteme von GPE 710 koppelt.
  • 8 ist ein Blockschaubild einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8, die die gleichen Bezugszahlen (oder Namen) haben wie die Elemente jeder anderen Figur im vorliegenden Text, können in jeder Weise ähnlich denjenigen arbeiten oder funktionieren, die an anderer Stelle im vorliegenden Text beschrieben sind, ohne darauf beschränkt zu sein.
  • In einigen Ausführungsformen enthält der Grafikprozessor 800 eine Ring-Interconnect-Verbindung 802, ein Pipeline-Frontend 804, eine Medien-Engine 837 und Grafikkerne 880A - 880N. In einigen Ausführungsformen koppelt die Ring-Interconnect-Verbindung 802 den Grafikprozessor mit anderen Verarbeitungseinheiten, darunter andere Grafikprozessoren oder ein oder mehrere Allzweck-Prozessorkerne. In einigen Ausführungsformen ist der Grafikprozessor einer von vielen Prozessoren, die in einem Mehrkernverarbeitungssystem integriert sind.
  • In einigen Ausführungsformen empfängt der Grafikprozessor 800 Batches von Befehlen über die Ring-Interconnect-Verbindung 802. Die ankommenden Befehle werden durch einen Befehls-Streamer 803 in dem Pipeline-Frontend 804 interpretiert. In einigen Ausführungsformen enthält der Grafikprozessor 800 skalierbare Ausführungslogik zum Ausführen einer 3D-Geometrieverarbeitung und Medienverarbeitung über den oder die Grafikkerne 880A - 880N. Für 3D-Geometrieverarbeitungsbefehle gibt der Befehls-Streamer 803 Befehle an die Geometrie-Pipeline 836 aus. Für mindestens einige Medienverarbeitungsbefehle gibt der Befehls-Streamer 803 die Befehle an ein Video-Frontend 834 aus, das mit einer Medien-Engine 837 gekoppelt ist. In einigen Ausführungsformen enthält die Medien-Engine 837 eine Videoqualitäts-Engine (VQE) 830 für Video- und Bild-Nachbearbeitung und eine Multiformat-Codier/Decodier (MFX)-Engine 833, um Hardware-beschleunigtes Medien-Daten-Codieren und -Decodieren bereitzustellen. In einigen Ausführungsformen generieren die Geometrie-Pipeline 836 und die Medien-Engine 837 jeweils Ausführungs-Threads für die Thread-Ausführungsressourcen, die durch mindestens einen Grafikkern 880A bereitgestellt werden.
  • In einigen Ausführungsformen enthält der Grafikprozessor 800 skalierbare Thread-Ausführungsressourcen, die modulare Kerne 880A - 880N aufweisen (mitunter als Kern-Slices bezeichnet), die jeweils mehrere Sub-Kerne 850A - 850N, 860A-860N aufweisen (mitunter als Kern-Subslices bezeichnet). In einigen Ausführungsformen kann der Grafikprozessor 800 jede beliebige Anzahl von Grafikkernen 880A bis 880N haben. In einigen Ausführungsformen enthält der Grafikprozessor 800 einen Grafikkern 880A, der mindestens einen ersten Sub-Kern 850A und einen zweiten Sub-Kern 860A aufweist. In anderen Ausführungsformen ist der Grafikprozessor ein Niedrigenergieprozessor mit einem einzelnen Sub-Kern (zum Beispiel 850A). In einigen Ausführungsformen enthält der Grafikprozessor 800 mehrere Grafikkerne 880A - 880N, die jeweils einen Satz erster Sub-Kerne 850A - 850N und einen Satz zweiter Sub-Kerne 860A - 860N enthalten. Jeder Sub-Kern in dem Satz erster Sub-Kerne 850A - 850N enthält mindestens einen ersten Satz von Ausführungseinheiten 852A - 852N und Medien/Textur-Samplern 854A - 854N. Jeder Sub-Kern in dem Satz zweiter Sub-Kerne 860A - 860N enthält mindestens einen zweiten Satz von Ausführungseinheiten 862A - 862N und Sampler 864A - 864N. In einigen Ausführungsformen teilt sich jeder Sub-Kern 850A - 850N, 860A - 860N einen Satz gemeinsam genutzter Ressourcen 870A - 870N. In einigen Ausführungsformen enthalten die gemeinsam genutzten Ressourcen gemeinsam genutzten Cache-Speicher und Pixeloperationslogik. Andere gemeinsam genutzte Ressourcen können ebenfalls in den verschiedenen Ausführungsformen des Grafikprozessors enthalten sein.
  • 9 veranschaulicht eine Thread-Ausführungslogik 900, die eine Gruppierung von Verarbeitungselementen enthält, die in einigen Ausführungsformen einer GPE verwendet werden. Elemente von 9, die die gleichen Bezugszahlen (oder Namen) haben wie die Elemente jeder anderen Figur im vorliegenden Text, können in jeder Weise ähnlich denjenigen arbeiten oder funktionieren, die an anderer Stelle im vorliegenden Text beschrieben sind, ohne darauf beschränkt zu sein.
  • In einigen Ausführungsformen enthält die Thread-Ausführungslogik 900 einen Pixel-Shader 902, einen Thread-Dispatcher 904, Instruktions-Cache 906, eine skalierbare Ausführungseinheiten-Gruppierung, die mehrere Ausführungseinheiten 908A - 908N enthält, einen Sampler 910, einen Daten-Cache 912 und einen Daten-Port 914. In einer Ausführungsform sind die enthaltenen Komponenten über ein Interconnect-Fabric miteinander verbunden, das mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen enthält die Thread-Ausführungslogik 900 eine oder mehrere Verbindungen zu Speicher, wie zum Beispiel Systemspeicher oder Cache-Speicher, durch einen oder mehrere von Instruktions-Cache 906, Daten-Port 914, Sampler 910 und Ausführungseinheiten-Gruppierung 908A - 908N. In einigen Ausführungsformen ist jede Ausführungseinheit (zum Beispiel 908A) ein individueller Vektorprozessor, der in der Lage ist, mehrere gleichzeitige Threads auszuführen und mehrere Datenelemente parallel für jeden Thread zu verarbeiten. In einigen Ausführungsformen enthält die Ausführungseinheiten-Gruppierung 908A - 908N eine beliebige Anzahl individueller Ausführungseinheiten.
  • In einigen Ausführungsformen wird die Ausführungseinheiten-Gruppierung 908A - 908N vor allem dafür verwendet, „Shader“-Programme auszuführen. In einigen Ausführungsformen führen die Ausführungseinheiten in Gruppierung 908A - 908N einen Instruktionssatz aus, der native Unterstützung für viele Standard-3D-Grafik-Shader-Instruktionen enthält, dergestalt, dass Shader-Programme aus Grafikbibliotheken (zum Beispiel Direct 3D und OpenGL) mit einer minimalen Translation ausgeführt werden. Die Ausführungseinheiten unterstützen Scheitelpunkt- und Geometrieverarbeitung (zum Beispiel Scheitelpunktprogramme, Geometrieprogramme, Scheitelpunkt-Shader), Pixelverarbeitung (zum Beispiel Pixel-Shader, Fragment-Shader) und Allzweckverarbeitung (zum Beispiel Berechnungs- und Medien-Shader).
  • Jede Ausführungseinheit in der Ausführungseinheiten-Gruppierung 908A-908N bearbeitet Gruppierungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für die Instruktion. Ein Ausführungskanal ist eine logische Ausführungseinheit für die Datenelementzugriffs-, - maskierungs- und -Flow-Steuerung innerhalb von Instruktionen. Die Anzahl von Kanälen kann unabhängig von der Anzahl physischer Arithmetic Logic Units (ALUs) oder Gleitkomma-Einheiten (FPUs) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen Ausführungseinheiten 908A - 908N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheiten-Instruktionssatz enthält Single Instruction Multiple Data (SIMD)-Instruktionen. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert werden, und die Ausführungseinheit verarbeitet die verschiedenen Elemente auf der Basis der Datengröße der Elemente. Wenn zum Beispiel ein 256 Bit breiter Vektor bearbeitet wird, so werden die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit bearbeitet den Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente von Quad-Word (QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente von Double Word (DW)-Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente von Word (W)-Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente von Byte (B)-Größe). Es sind jedoch auch andere Vektorbreiten und Registergrößen möglich.
  • Ein oder mehrere interne Instruktions-Cache-Speicher (zum Beispiel 906) sind in der Thread-Ausführungslogik 900 enthalten, um Thread-Instruktionen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Cache-Speicher (zum Beispiel 912) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist ein Sampler 910 enthalten, um Textur-Sampling für 3D-Operationen und Medien-Sampling für Medienoperationen bereitzustellen. In einigen Ausführungsformen enthält der Sampler 910 spezialisierte Textur- oder Medien-Sampling-Funktionalität zum Verarbeiten von Textur- oder Medien-Daten während des Sampling-Prozesses vor dem Übermitteln der gesampelten Daten an eine Ausführungseinheit.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanforderungen über Thread-Initiierungs- und -Dispatch-Logik an die Thread-Ausführungslogik 900. In einigen Ausführungsformen enthält die Thread-Ausführungslogik 900 einen lokalen Thread-Dispatcher 904, der Thread-Initiierungsanforderungen von den Grafik- und Medien-Pipelines arbitriert und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten 908A - 908N instanziiert. Zum Beispiel disponiert die Geometrie-Pipeline (zum Beispiel 836 von 8) Scheitelpunktverarbeitungs-, Tessellierungs- oder Geometrieverarbeitungs-Threads zu der Thread-Ausführungslogik 900 (9). In einigen Ausführungsformen kann der Thread-Dispatcher 904 auch Laufzeitthread-Initiierungsanforderungen von den ausführenden Shader-Programmen verarbeiten.
  • Sobald eine Gruppe von geometrischen Objekten verarbeitet und zu Pixeldaten rasterisiert wurde, wird der Pixel-Shader 902 aufgerufen, um Ausgabe-Informationen weiter zu berechnen und zu veranlassen, dass Ergebnisse auf Ausgabeoberflächen geschrieben werden (zum Beispiel Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In einigen Ausführungsformen berechnet der Pixel-Shader 902 die Werte der verschiedenen Scheitelpunktattribute, die über das rasterisierte Objekt hinweg zu interpolieren sind. In einigen Ausführungsformen führt der Pixel-Shader 902 dann ein über eine Anwendungsprogrammierschnittstelle (API) übermitteltes Pixel-Shader-Programm aus. Um das Pixel-Shader-Programm auszuführen, versendet der Pixel-Shader 902 Threads zu einer Ausführungseinheit (zum Beispiel 908A) über den Thread-Dispatcher 904. In einigen Ausführungsformen verwendet der Pixel-Shader 902 Textur-Sampling-Logik im Sampler 910 für einen Zugriff auf die Textur-Daten in Textur-Maps, die in einem Speicher gespeichert werden. Arithmetische Operationen an den Textur-Daten und den eingegebenen Geometrie-Daten berechnen Pixelfarbdaten für jedes geometrische Fragment oder schließen einen oder mehrere Pixel von der weiteren Verarbeitung aus.
  • In einigen Ausführungsformen stellt der Daten-Port 914 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 900 bereit, um verarbeitete Daten an einen Speicher zum Verarbeiten auf einer Grafikprozessor-Ausgabe-Pipeline auszugeben. In einigen Ausführungsformen enthält der Daten-Port 914 einen oder mehrere Cache-Speicher (zum Beispiel Daten-Cache 912), oder ist damit gekoppelt, um Daten für einen Speicherzugriff über den Daten-Port zwischenzuspeichern.
  • 10 ist ein Blockschaubild, das ein Grafikprozessor-Instruktionsformat 1000 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Instruktionssatz, der Instruktionen in mehreren Formaten aufweist. Die mit durchgezogenen Linien gezeichneten Kästchen veranschaulichen die Komponenten, die allgemein in einer Ausführungseinheit-Instruktion enthalten sind, während die Strichlinien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Instruktionen enthalten sind. In einigen Ausführungsformen ist das beschriebene und veranschaulichte Instruktionsformat 1000 insofern Makro-Instruktionen, als sie Instruktionen sind, die an die Ausführungseinheit übermittelt werden, im Gegensatz zu Mikro-Operationen, die aus einer Instruktionsdecodierung resultieren, sobald die Instruktion verarbeitet wurde.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Instruktionen in einem 128-Bit-Format 1010. Ein kompaktiertes 64-Bit-Instruktionsformat 1030 ist für einige Instruktionen auf der Basis der ausgewählten Instruktion, Instruktionsoptionen und Anzahl von Operanden verfügbar. Das native 128-Bit-Format 1010 erlaubt den Zugriff auf alle Instruktionsoptionen, während einige Optionen und Operationen in dem 64-Bit-Format 1030 beschränkt sind. Die nativen Instruktionen, die in dem 64-Bit-Format 1030 verfügbar sind, variieren nach Ausführungsform. In einigen Ausführungsformen wird die Instruktion teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 1013 kompaktiert. Die Ausführungseinheit-Hardware nimmt auf einen Satz Kompaktierungstabellen auf der Basis der Indexwerte Bezug und verwendet die Ausgabe der Kompaktierungstabellen, um eine native Instruktion in dem 128-Bit-Format 1010 zu rekonstruieren.
  • Für jedes Format definiert der Instruktions-Opcode 1012 die Operation, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jede Instruktion parallel an den mehreren Datenelementen jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit in Reaktion auf eine Addier-Instruktion eine gleichzeitige Addier-Operation an jedem Farbkanal aus, der ein Texturelement oder Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Instruktion an allen Datenkanälen der Operanden aus. In einigen Ausführungsformen ermöglicht das Instruktionssteuerungsfeld 1014 eine Kontrolle über bestimmte Ausführungsoptionen, wie zum Beispiel Kanalauswahl (zum Beispiel Prädikation) und Datenkanalreihenfolge (zum Beispiel Swizzle). Für 128-Bit-Instruktionen 1010 begrenzt ein Exec-Größen-Feld 1016 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen steht das Exec-Größen-Feld 1016 zur Verwendung in dem kompakten 64-Bit-Instruktionsformat 1030 nicht zur Verfügung.
  • Einige Ausführungseinheit-Instruktionen haben bis zu drei Operanden, einschließlich zwei Quellenoperanden, src0 1022, src1 1022 und einen Bestimmungsort 1018. In einigen Ausführungsformen unterstützen die Ausführungseinheiten duale Bestimmungsort-Instruktionen, wobei einer der Bestimmungsorte impliziert wird. Datenhandhabungs-Instruktionen können einen dritten Quellenoperanden haben (zum Beispiel SRC2 1024), wobei der Instruktions-Opcode 1012 die Anzahl von Quellenoperanden bestimmt. Der letzte Quellenoperand einer Instruktion kann ein unmittelbarer (zum Beispiel hartcodierter) Wert sein, der mit der Instruktion mitgeschickt wird.
  • In einigen Ausführungsformen enthält das 128-Bit-Instruktionsformat 1010 eine Zugriffs-/Adressmodus-Information 1026, die zum Beispiel spezifiziert, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, so wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Instruktion 1010 angegeben.
  • In einigen Ausführungsformen enthält das 128-Bit-Instruktionsformat 1010 ein Zugriffs-/Adressmodus-Feld 1026, das einen Adressmodus und/oder einen Zugriffsmodus für die Instruktion spezifiziert. In einer Ausführungsform dient der Zugriffsmodus zum Definieren einer Datenzugriffsausrichtung für die Instruktion. Einige Ausführungsformen unterstützen Zugriffsmodi, die einen 16-Byte-ausgerichteten Zugriffsmodus und einen 1-Byte-ausgerichteten Zugriffsmodus enthalten, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Instruktionsoperanden bestimmt; wenn zum Beispiel in einem ersten Modus die Instruktion 1010 eine Byte-ausgerichtete Adressierung für Quellen- und Bestimmungsort-Operanden verwenden kann, und wenn in einem zweitem Modus die Instruktion 1010 eine 16-Byte-ausgerichtete Adressierung für alle Quellen und Bestimmungsort-Operanden verwenden kann.
  • In einer Ausführungsform bestimmt der Adressmodus-Abschnitt des Zugriffs-/Adressmodus-Feldes 1026, ob die Instruktion direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, so übermitteln Bits in der Instruktion 1010 direkt die Registeradresse eines oder mehrerer Operanden. Wenn der indirekte Registeradressierungsmodus verwendet wird, so kann die Registeradresse eines oder mehrerer Operanden auf der Basis eines Adressenregisterwertes und eines Adressen-Immediate-Feldes in der Instruktion berechnet werden.
  • In einigen Ausführungsformen werden Instruktionen auf der Basis von Opcode 1012 Bit-Feldern gruppiert, um die Opcode-Decodierung 1040 zu vereinfachen. Für einen 8-Bit-Opcode erlauben die Bits 10, 11 und 12 es der Ausführungseinheit, den Typ des Opcodes zu bestimmen. Die genaue gezeigte Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen enthält eine Bewegungs- und Logik-Opcode-Gruppe 1042 Datenbewegungs- und Logik-Instruktionen (zum Beispiel Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logik-Gruppe 1042 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei Bewegungs (mov)-Instruktionen die Form 0000xxxxb haben und Logik-Instruktionen die Form 0001xxxxb haben. Eine Flusssteuerungs-Instruktionsgruppe 1044 (zum Beispiel Rufen, Springen (jmp)) enthält Instruktionen in der Form 0010xxxxb (zum Beispiel 0x20). Eine Sonstige-Instruktionen-Gruppe 1046 enthält einen Mix von Instruktionen, einschließlich Synchronisationsinstruktionen (zum Beispiel Warten, Senden) in der Form 0011xxxxb (zum Beispiel 0x30). Ein Parallele-Math-Instruktionsgruppe 1048 enthält Komponenten-weise Arithmetik-Instruktionen (zum Beispiel Addieren, Multiplizieren (mul)) in der Form 0100xxxxb (zum Beispiel 0x40). Die Parallele-Math-Gruppe 1048 führt die arithmetischen Operationen parallel an Datenkanälen aus. Die Vektor-Math-Gruppe 1050 enthält Arithmetik-Instruktionen (zum Beispiel dp4) in der Form 0101xxxxb (zum Beispiel 0x50). Die Vektor-Math-Gruppe führt Arithmetik wie zum Beispiel Punktprodukt-Berechnungen an Vektor-Operanden aus.
  • 11 ist ein Blockschaubild einer anderen Ausführungsform eines Grafikprozessors 1100. Elemente von 11, die die gleichen Bezugszahlen (oder Namen) haben wie die Elemente jeder anderen Figur im vorliegenden Text, können in jeder Weise ähnlich denjenigen arbeiten oder funktionieren, die an anderer Stelle im vorliegenden Text beschrieben sind, ohne darauf beschränkt zu sein.
  • In einigen Ausführungsformen enthält der Grafikprozessor 1100 eine Grafik-Pipeline 1120, eine Medien-Pipeline 1130, eine Anzeige-Engine 1140, eine Thread-Ausführungslogik 1150 und eine Renderausgabe-Pipeline 1170. In einigen Ausführungsformen ist der Grafikprozessor 1100 ein Grafikprozessor innerhalb eines Mehrkernverarbeitungssystems, das einen oder mehrere Allzweckverarbeitungskerne enthält. Der Grafikprozessor wird durch Register-Schreibvorgänge in ein oder mehrere (nicht gezeigte) Steuerregister oder über Befehle, die an den Grafikprozessor 1100 über eine Ring-Interconnect-Verbindung 1102 ausgegeben werden, gesteuert. In einigen Ausführungsformen koppelt die Ring-Interconnect-Verbindung 1102 den Grafikprozessor 1100 mit anderen Verarbeitungskomponenten, wie zum Beispiel anderen Grafikprozessoren oder Allzweck-Prozessoren. Befehlen von der Ring-Interconnect-Verbindung 1102 werden durch einen Befehls-Streamer 1103 interpretiert, der Instruktionen an individuelle Komponenten der Grafik-Pipeline 1120 oder Medien-Pipeline 1130 ausgibt.
  • In einigen Ausführungsformen weist der Befehls-Streamer 1103 den Betrieb einer Scheitelpunkt-Holvorrichtung 1105 an, die Scheitelpunkt-Daten aus einem Speicher liest und Scheitelpunktverarbeitungsbefehle ausführt, die durch den Befehls-Streamer 1103 bereitgestellt werden. In einigen Ausführungsformen übermittelt die Scheitelpunkt-Holvorrichtung 1105 Scheitelpunkt-Daten an einen Scheitelpunkt-Shader 1107, der eine Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Scheitelpunkt ausführt. In einigen Ausführungsformen führen die Scheitelpunkt-Holvorrichtung 1105 und der Scheitelpunkt-Shader 1107 Scheitelpunkt-Verarbeitungsinstruktionen durch Versenden von Ausführungs-Threads an Ausführungseinheiten 1152A, 1152B über einen Thread-Dispatcher 1131 aus.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 1152A, 1152B eine Gruppierung von Vektorprozessoren, die einen Instruktionssatz zum Ausführen von Grafik- und Medienoperationen haben. In einigen Ausführungsformen haben die Ausführungseinheiten 1152A, 1152B einen angefügten L1-Cache 1151, der für jede Gruppierung spezifisch ist oder zwischen den Gruppierungen gemeinsam genutzt wird. Der Cache kann als ein Daten-Cache, ein Instruktions-Cache oder ein einzelner Cache konfiguriert sein, der partitioniert wird, um Daten und Instruktionen in verschiedenen Partitionen zu enthalten.
  • In einigen Ausführungsformen enthält die Grafik-Pipeline 1120 Tessellierungs-Komponenten zum Ausführen einer Hardware-beschleunigten Tessellierung von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 1111 die Tessellierungs-Operationen. Ein programmierbarer Domain-Shader 1117 stellt eine Backend-Evaluierung von Tessellierungsausgaben bereit. Ein Tessellator 1113 arbeitet auf Anweisung des Hull-Shaders 1111 und enthält Spezial-Logik zum Generieren eines Satzes detaillierter geometrischer Objekte auf der Basis eines groben geometrischen Modells, das als Eingang in die Grafik-Pipeline 1120 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Tessellierung verwendet wird, die Tessellierungs-Komponenten 1111, 1113, 1117 umgangen werden.
  • In einigen Ausführungsformen können komplette geometrische Objekte durch einen Geometrie-Shader 1119 über einen oder mehrere Threads, die an Ausführungseinheiten 1152A, 1152B versendet werden, verarbeitet werden oder können direkt zum Clipper 1129 voranschreiten. In einigen Ausführungsformen bearbeitet der Geometrie-Shader gesamte geometrische Objekte anstelle von Scheitelpunkten oder Patches von Scheitelpunkten wie in vorherigen Stufen der Grafik-Pipeline. Falls die Tessellierung deaktiviert wird, empfängt der Geometrie-Shader 1119 Eingaben aus dem Scheitelpunkt-Shader 1107. In einigen Ausführungsformen ist der Geometrie-Shader 1119 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellierung auszuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 1129 Scheitelpunkt-Daten. Der Clipper 1129 kann ein Festfunktions-Clipper oder ein programmierbarer Clipper sein, der Clipping- und Geometrie-Shader-Funktionen hat. In einigen Ausführungsformen disponiert ein Rasterisierer/Tiefe 1173 in der Renderausgabe-Pipeline 1170 Pixel-Shader, um die geometrischen Objekte in ihre Pixel-weisen Repräsentationen umwandeln. In einigen Ausführungsformen ist eine Pixel-Shader-Logik in der Thread-Ausführungslogik 1150 enthalten. In einigen Ausführungsformen kann eine Anwendung den Rasterisierer 1173 umgehen und kann über eine Stream-out-Einheit 1123 auf nicht-rasterisierte Scheitelpunkt-Daten zugreifen.
  • Der Grafikprozessor 1100 hat einen Interconnect-Bus, ein Interconnect-Fabric oder einen anderen Interconnect-Mechanismus, der eine Daten- und Nachrichten-Weitergabe zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 1152A, 1152B und der oder die zugehörigen Cache-Speicher 1151, der Textur- und Medien-Sampler 1154 und der Textur/Sampler-Cache 1158 über einen Daten-Port 1156 miteinander verbunden, um einen Speicherzugriff ausführen und mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Sampler 1154, die Cache-Speicher 1151, 1158 und die Ausführungseinheiten 1152A, 1152B jeweils separate Speicherzugriffspfade.
  • In einigen Ausführungsformen enthält die Renderausgabe-Pipeline 1170 eine Rasterisierer- und Tiefentestkomponente 1173, die Scheitelpunkt-basierte Objekte in eine zugehörige Pixel-basierte Repräsentation umwandelt. In einigen Ausführungsformen enthält die Rasterisierer-Logik eine Windower/Masker-Einheit zum Ausführen einer Festfunktions-Dreieck- und -Linien-Rasterisierung. Ein zugehöriger Render-Cache 1178 und Tiefen-Cache 1179 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationen-Komponente 1177 führt Pixel-basierte Operationen an den Daten aus, obgleich in einigen Fällen Pixeloperationen im Zusammenhang mit 2D-Operationen (zum Beispiel Bit-Block-Bild-Transfers mit Blending) durch die 2D-Engine 1141 ausgeführt werden oder zum Anzeige-Zeitpunkt durch den Anzeige-Controller 1143 unter Verwendung von Overlay-Anzeige-Ebenen ersetzt werden. In einigen Ausführungsformen steht ein gemeinsam genutzter L3-Cache 1175 allen Grafikkomponenten zur Verfügung, was eine gemeinsame Nutzung von Daten ohne Verwendung von Hauptsystemspeicher erlaubt.
  • In einigen Ausführungsformen enthält die Grafikprozessor-Medien-Pipeline 1130 eine Medien-Engine 1137 und ein Video-Frontend 1134. In einigen Ausführungsformen empfängt das Video-Frontend 1134 Pipeline-Befehle von dem Befehls-Streamer 1103. In einigen Ausführungsformen enthält die Medien-Pipeline 1130 einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 1134 Medien-Befehle vor dem Senden des Befehls an die Medien-Engine 1137. In einigen Ausführungsformen enthält die Medien-Engine 1137 Thread-Initiierungs-Funktionalität zum Initiieren von Threads zum Versenden an die Thread-Ausführungslogik 1150 über den Thread-Dispatcher 1131.
  • In einigen Ausführungsformen enthält der Grafikprozessor 1100 eine Anzeige-Engine 1140. In einigen Ausführungsformen befindet sich die Anzeige-Engine 1140 außerhalb des Prozessors 1100 und ist mit dem Grafikprozessor über die Ring-Interconnect-Verbindung 1102 oder einen anderen Interconnect-Bus oder ein anderes Interconnect-Fabric gekoppelt. In einigen Ausführungsformen enthält die Anzeige-Engine 1140 eine 2D-Engine 1141 und einen Anzeige-Controller 1143. In einigen Ausführungsformen enthält die Anzeige-Engine 1140 Spezial-Logik, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In einigen Ausführungsformen ist der Anzeige-Controller 1143 mit einer (nicht gezeigten) Anzeigevorrichtung gekoppelt, die eine System-integrierte Anzeigevorrichtung sein kann, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung, die über einen Anzeigevorrichtungsverbinder angeschlossen ist.
  • In einigen Ausführungsformen können die Grafik-Pipeline 1120 und die Medien-Pipeline 1130 dafür konfiguriert werden, Operationen auf der Basis mehrerer Grafik- und Medienprogrammierungsschnittstellen auszuführen, und sind nicht für eine bestimmte Anwendungsprogrammierungsschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Rufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die durch den Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL) und die Open Computing Language (OpenCL) von der Khronos Group oder für die Direct3D Library von der Microsoft Corporation geboten, oder Unterstützung kann sowohl für OpenGL als auch für D3D geboten werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) geboten werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würden auch unterstützt werden, falls ein Mapping von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • 12A ist ein Blockschaubild, das ein Grafikprozessorbefehlsformat 1200 gemäß einigen Ausführungsformen veranschaulicht. 12B ist ein Blockschaubild, das eine Grafikprozessor-Befehlssequenz 1210 gemäß einer Ausführungsform veranschaulicht. Die mit durchgezogenen Linien gezeichneten Kästchen in 12A veranschaulichen die Komponenten, die allgemein in einem Grafik-Befehl enthalten sind, während die Strichlinien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Grafik-Befehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 1200 von 12A enthält Datenfelder zum Identifizieren eines Ziel-Client 1202 des Befehls, einen Befehlsoperationscode (Opcode) 1204 und die relevanten Daten 1206 für den Befehl. Ein Sub-Opcode 1205 und eine Befehlsgröße 1208 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 1202 die Client-Einheit der Grafik-Vorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehlsparser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten zu der richtigen Client-Einheit zu routen. In einigen Ausführungsformen enthalten die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medien-Einheit. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 1204 und - falls vorhanden - den Sub-Opcode 1205, um die auszuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Daten-Feld 1206 aus. Für einige Befehle wird eine explizite Befehlsgröße 1208 erwartet, um die Größe des Befehls zu spezifizieren. In einigen Ausführungsformen bestimmt der Befehlsparser automatisch die Größe mindestens einiger der Befehle auf der Basis des Befehls-Opcode. In einigen Ausführungsformen werden Befehle über Vielfache eines Double Word ausgerichtet.
  • Das Flussdiagramm in 12B zeigt eine beispielhafte Grafikprozessor-Befehlssequenz 1210. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der gezeigten Befehlssequenz zum Einrichten, Ausführen und Beenden eines Satzes von Grafik-Operationen. Eine Sample-Befehlssequenz ist lediglich für beispielhafte Zwecke gezeigt und beschrieben, da Ausführungsformen nicht auf diese speziellen Befehle oder auf diese Befehlssequenz beschränkt sind. Darüber hinaus können die Befehle als ein Batch von Befehlen in einer Befehlssequenz dergestalt ausgegeben werden, dass der Grafikprozessor die Sequenz von Befehlen in mindestens teilweiser Gleichzeitigkeit verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 1210 mit einem Pipeline-Flush-Befehl 1212 beginnen, um zu veranlassen, dass alle aktiven Grafik-Pipelines die gleichzeitig anhängigen Befehle für die Pipeline abarbeiten. In einigen Ausführungsformen arbeiten die 3D-Pipeline 1222 und die Medien-Pipeline 1224 nicht gleichzeitig. Der Pipeline-Flush wird ausgeführt, um zu veranlassen, dass die aktive Grafik-Pipeline alle anhängigen Befehle abarbeitet. In Reaktion auf einen Pipeline-Flush pausiert der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichnungs-Engines anhängige Operationen abgearbeitet haben und die relevanten Lese-Cache-Speicher ungültig gemacht wurden. Optional können jegliche Daten in dem Render-Cache, die als „dirty“ markiert sind, in einen Speicher gespült werden. In einigen Ausführungsformen kann der Pipeline-Flush-Befehl 1212 zur Pipeline-Synchronisation oder vor dem Versetzen des Grafikprozessors in einen Niedrigeenerigezustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 1213 verwendet, wenn eine Befehlssequenz den Grafikprozessor auffordert, explizit zwischen Pipelines zu wechseln. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 1213 nur einmal innerhalb eines Ausführungskontextes vor dem Ausgeben von Pipeline-Befehlen erforderlich, sofern nicht der Kontext darin besteht, Befehle für beide Pipelines auszugeben. In einigen Ausführungsformen ist einen Pipeline-Flush-Befehl 1212 unmittelbar vor einem Pipeline-Wechsel über den Pipeline-Auswahlbefehl 1213 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerungsbefehl 1214 eine Grafik-Pipeline für den Betrieb und wird dafür verwendet, die 3D-Pipeline 1222 und die Medien-Pipeline 1224 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerungsbefehl 1214 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerungsbefehl 1214 zur Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline vor der Verarbeitung eines Befehls-Batches verwendet.
  • In einigen Ausführungsformen werden Rücklaufpuffer-Zustandsbefehle 1216 dafür verwendet, einen Satz von Rücklaufpuffern für die jeweiligen Pipelines zu konfigurieren, um Daten zu schreiben. Einige Pipeline-Operationen erfordern die Zuordnung, Auswahl oder Konfiguration eines oder mehrerer Rücklaufpuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rücklaufpuffer zum Speichern von Ausgabedaten und zum Ausführen einer Kreuz-Thread-Kommunikation. In einigen Ausführungsformen enthält der Rücklaufpuffer-Zustand 1216 das Auswählen der Größe und der Anzahl von Rücklaufpuffern, die für einen Satz von Pipeline-Operationen zu verwenden sind.
  • Die übrigen Befehle in der Befehlssequenz unterscheiden sich auf der Basis der aktiven Pipeline für Operationen. Auf der Basis einer Pipeline-Bestimmung 1220 wird die Befehlssequenz an die 3D-Pipeline 1222, beginnend mit dem 3D-Pipeline-Zustand 1230, oder an die Medien-Pipeline 1224, beginnend bei dem Medien-Pipeline-Zustand 1240, angepasst.
  • Die Befehle für den 3D-Pipeline-Zustand 1230 enthalten 3D-Zustands-Einstellbefehle für Scheitelpunkt-Puffer-Zustand, Scheitelpunkt-Element-Zustand, konstanter Farb-Zustand, Tiefenpuffer-Zustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Grundform-Befehle verarbeitetet werden. Die Werte dieser Befehle werden mindestens teilweise anhand der jeweils verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind 3D-Pipeline-Zustand 1230-Befehle auch in der Lage, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Grundform 1232-Befehl dafür verwendet, 3D-Grundformen vorzulegen, die durch die 3D-Pipeline verarbeitet werden sollen. Befehle und zugehörige Parameter, die dem Grafikprozessor über den 3D-Grundform 1232-Befehl zugeführt werden, werden an die Scheitelpunkt-Holfunktion in der Grafik-Pipeline weitergeleitet. Die Scheitelpunkt-Holfunktion verwendet die 3D-Grundform 1232-Befehlsdaten zum Generieren von Scheitelpunkt-Datenstrukturen. Die Scheitelpunkt-Datenstrukturen werden in einem oder mehreren Rücklaufpuffern gespeichert. In einigen Ausführungsformen wird der 3D-Grundform 1232-Befehl dafür verwendet, Scheitelpunkt-Operationen an 3D-Grundformen über Scheitelpunkt-Shader auszuführen. Um Scheitelpunkt-Shader zu verarbeiten, versendet die 3D-Pipeline 1222 Shader-Ausführungs-Threads an Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 1222 über einen Ausführen 1234-Befehl oder ein Ausführen 1234-Ereignis ausgelöst. In einigen Ausführungsformen löst ein Register-Schreibvorgang die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen „Go“- oder „Kick“-Befehl in der Befehlssequenz ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlssequenz durch die Grafik-Pipeline zu schieben. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Grundformen aus. Sobald die Operationen abgearbeitet sind, werden die resultierenden geometrischen Objekte rasterisiert, und die Pixel-Engine färbt die resultierenden Pixel ein. Zusätzliche Befehle zum Steuern des Pixel-Shading und der Pixel-Backend-Operationen können für diese Operationen ebenfalls enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 1210 dem Medien-Pipeline 1224-Pfad, wenn Medienoperationen ausgeführt werden. Im Allgemeinen richten sich die konkrete Verwendung und die Programmierungsweise für die Medien-Pipeline 1224 nach den auszuführenden Medien- oder Berechnungsoperationen. Spezielle Medien-Decodierungs-Operationen können zu der Medien-Pipeline während der Medien-Decodierung abgeladen werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden, und eine Medien-Decodierung kann ganz oder teilweise unter Verwendung von Ressourcen ausgeführt werden, die durch einen oder mehrere Allzweckverarbeitungskerne bereitgestellt werden. In einer Ausführungsform enthält die Medien-Pipeline auch Elemente für Allzweck-Grafikprozessoreinheit (GPGPU)-Operationen, wobei der Grafikprozessor dafür verwendet wird, SIMD-Vektoroperationen unter Verwendung von rechnerischen Shader-Programmen auszuführen, die nicht explizit mit dem Rendern von Grafik-Grundformen im Zusammenhang stehen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 1224 in einer ähnlichen Weise konfiguriert wie die 3D-Pipeline 1222. Ein Satz Medien-Pipeline-Zustandsbefehle 1240 wird vor den Medienobjektbefehlen 1242 versendet oder in einer Befehlskette angeordnet. In einigen Ausführungsformen enthalten Medien-Pipeline-Zustandsbefehle 1240 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies enthält Daten zum Konfigurieren der Video-Decodierungs- und Video-Codierungs-Logik innerhalb der Medien-Pipeline, wie zum Beispiel Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen Medien-Pipeline-Zustandsbefehle 1240 auch die Verwendung eines oder mehrere Zeiger zu „indirekten“ Zustandelementen, die einen Batch von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen übermitteln Medienobjektbefehle 1242 Zeiger zu Medienobjekten zum Verarbeiten durch die Medien-Pipeline. Die Medienobjekte enthalten Speicherpuffer, die zu verarbeitende Video-Daten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 1242 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und Medienobjektbefehle 1242 in die Warteschlange eingereiht sind, wird die Medien-Pipeline 1224 über einen Ausführungsbefehl 1244 oder ein äquivalentes Ausführungsereignis (zum Beispiel ein Registerschreibvorgang) ausgelöst. Die Ausgabe aus der Medien-Pipeline 1224 kann dann durch Operationen nachbearbeitet werden, die durch die 3D-Pipeline 1222 oder die Medien-Pipeline 1224 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen in einer ähnlichen Weise konfiguriert und ausgeführt wie Medienoperationen.
  • 13 veranschaulicht eine beispielhafte Grafik-Software-Architektur für ein Datenverarbeitungssystem 1300 gemäß einigen Ausführungsformen. In einigen Ausführungsformen enthält die Software-Architektur eine 3D-Grafik-Anwendung 1310, ein Betriebssystem 1320 und mindestens einen Prozessor 1330. In einigen Ausführungsformen enthält der Prozessor 1330 einen Grafikprozessor 1332 und einen oder mehrere Allzweck-Prozessorkerne 1334. Die Grafik-Anwendung 1310 und das Betriebssystem 1320 werden jeweils in dem Systemspeicher 1350 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafik-Anwendung 1310 ein oder mehrere Shader-Programme, die Shader-Instruktionen 1312 enthalten. Die Shader-Sprachen-Instruktionen können in einer höheren Shader-Sprache vorliegen, wie zum Beispiel der High Level Shader Language (HLSL) oder der OpenGL Shader Language (GLSL). Die Anwendung enthält außerdem ausführbare Instruktionen 1314 in einer Maschinensprache, die für die Ausführung durch den Allzweck-Prozessorkern 1334 geeignet ist. Die Anwendung enthält außerdem Grafik-Objekte 1316, die durch Scheitelpunkt-Daten definiert werden.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows®-Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-artiges Betriebssystem oder ein frei verfügbares UNIX-artiges Betriebssystem, das mit einer Variante des Linux-Kernels arbeitet. Wenn die Direct3D-API verwendet wird, so verwendet das Betriebssystem 1320 einen Frontend-Shader-Kompilierer 1324 zum Kompilieren jeglicher Shader-Instruktionen 1312 in HLSL zu einer niederen Shader-Sprache. Die Kompilation kann eine Just-in-Time (JIT)-Kompilation sein, oder die Anwendung kann eine Shader-Vorkompilation ausführen. In einigen Ausführungsformen werden höhere Shader während der Kompilation der 3D-Grafikanwendung 1310 zu niederen Shadern kompiliert.
  • In einigen Ausführungsformen enthält ein Nutzermodus-Grafiktreiber 1326 einen Backend-Shader-Kompilierer 1327 zum Umwandeln der Shader-Instruktionen 1312 in eine Hardware-spezifische Darstellung. Wenn die OpenGL-API verwendet wird, so werden Shader-Instruktionen 1312 in höherer GLSL-Sprache an den Nutzermodus-Grafiktreiber 1326 zur Kompilation weitergegeben. In einigen Ausführungsformen verwendet der Nutzermodus-Grafiktreiber 1326 Betriebssystemkernelmodus-Funktionen 1328 zum Kommunizieren mit einem Kernelmodus-Grafiktreiber 1329. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1329 mit dem Grafikprozessor 1332, um Befehle und Instruktionen zu versenden.
  • Ein oder mehrere Aspekte von mindestens einer Ausführungsform können durch repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und Logik innerhalb eines integrierten Schaltkreises, wie zum Beispiel einem Prozessor, repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Instruktionen enthalten, die verschiedene Logik in dem Prozessor repräsentieren. Wenn sie durch eine Maschine gelesen werden, so können die Instruktionen die Maschine veranlassen, die Logik zu bilden, um die im vorliegenden Text beschriebenen Techniken auszuführen. Solche Repräsentationen, als „IP-Kerne“ bekannte, sind wiederverwendbare Einheiten von Logik für einen integrierten Schaltkreis, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardware-Modell gespeichert werden können, das die Struktur des integrierten Schaltkreises beschreibt. Das Hardware-Modell kann an verschiedene Kunden von Herstellungseinrichtungen geliefert werden, die das Hardware-Modell auf Fertigungsmaschinen laden, die den integrierten Schaltkreis herstellen. Der integrierte Schaltkreis kann so hergestellt werden, dass der Schaltkreis Operationen ausführt, die in Verbindung mit beliebigen der im vorliegenden Text beschriebenen Ausführungsformen beschrieben sind.
  • 14 ist ein Blockschaubild, das ein IP-Kern-Entwicklungssystem 1400 veranschaulicht, das dafür verwendet werden kann, einen integrierten Schaltkreis herzustellen, um Operationen gemäß einer Ausführungsform auszuführen. Das IP-Kern-Entwicklungssystem 1400 kann dafür verwendet werden, modulare, wiederverwendbare Designs zu generieren, die in ein größeres Design integriert werden können oder verwendet werden können, einen gesamten integrierten Schaltkreis zu konstruieren (zum Beispiel einen integrierten SoC-Schaltkreis). Eine Design-Einrichtung 1430 kann eine Software-Simulation 1410 eines IP-Kern-Designs in einer höheren Programmiersprache (zum Beispiel C/C++) generieren. Die Software-Simulation 1410 kann dafür verwendet werden, das Verhalten des IP-Kerns zu entwerfen, zu testen und zu verifizieren. Ein Register Transfer Level (RTL)-Design kann dann aus dem Simulationsmodell 1400 erzeugt oder synthetisiert werden. Das RTL-Design 1415 ist eine Abstraktion des Verhaltens des integrierten Schaltkreises, die den Fluss von digitalen Signalen zwischen Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Zusätzlich zu einem RTL-Design 1415 können auch niedere Designs auf der Logik-Ebene oder Transistor-Ebene erzeugt, entworfen oder synthetisiert werden. Somit können die konkreten Details des anfänglichen Design und der anfänglichen Simulation variieren.
  • Das RTL-Design 1415 oder ein Äquivalent kann durch die Design-Einrichtung weiter zu einem Hardware-Modell 1420 synthetisiert werden, das in einer Hardware Description Language (HDL) oder einer anderen Repräsentation physischer Designdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Auslieferung an eine Dritt-Fertigungseinrichtung 1465 unter Verwendung von nicht-flüchtigem Speicher 1440 gespeichert werden (zum Beispiel Festplatte, Flash-Speicher oder jedes nicht-flüchtige Speichermedium). Alternativ kann das IP-Kern-Design (zum Beispiel über das Internet) über eine leitungsgebundene Verbindung 1450 oder eine drahtlose Verbindung 1460 übertragen werden. Die Fertigungseinrichtung 1465 kann dann einen integrierten Schaltkreis fertigen, der mindestens teilweise auf dem IP-Kern-Design basiert. Der gefertigte integrierte Schaltkreis kann dafür konfiguriert sein, Operationen gemäß mindestens einer im vorliegenden Text beschriebenen Ausführungsform auszuführen.
  • 15 ist ein Blockschaubild, das einen beispielhaften integrierten System on Chip-Schaltkreis 1500 veranschaulicht, der unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform gefertigt werden kann. Der beispielhafte integrierte Schaltkreis enthält einen oder mehrere Anwendungsprozessoren 1505 (zum Beispiel CPUs) und mindestens einen Grafikprozessor 1510 und kann zusätzlich einen Bildprozessor 1515 und/oder einen Videoprozessor 1520 enthalten, von denen jeder ein modularer IP-Kern aus derselben oder aus mehreren verschiedenen Design-Einrichtungen sein kann. Der integrierte Schaltkreis enthält periphere oder Bus-Logik, die einen USB-Controller 1525, einen UART-Controller 1530, einen SPI/SDIO-Controller 1535 und einen I2S/I2C-Controller 1540 enthält. Zusätzlich kann der integrierte Schaltkreis eine Anzeigevorrichtung 1545 enthalten, die mit einem High-Definition Multimedia Interface (HDMI)-Controller 1550 und/oder einer Mobile Industry Processor Interface (MIPI)-Anzeigeschnittstelle 1555 gekoppelt ist. Die Speicherung kann durch ein Flash-Speicher-Subsystem 1560 bereitgestellt werden, das Flash-Speicher und einen Flash-Speicher-Controller enthält. Die Speicherschnittstelle kann über einen Speicher-Controller 1565 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltkreise enthalten zusätzlich eine eingebettete Security-Engine 1570.
  • Zusätzlich können noch andere Logik und Schaltkreise in dem Prozessor des integrierten Schaltkreises 1500 enthalten sein, einschließlich zusätzlicher Grafikprozessoren/Kerne, peripherer Schnittstellen-Controller oder Allzweck-Prozessorkernen.
  • Die folgenden Beispiele beziehen sich auf weitere Ausführungsformen. Beispiel 1 enthält optional eine Vorrichtung, die Folgendes umfasst: Speicher zum Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen; und einen Prozessor, der mit dem Speicher gekoppelt ist, um die Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien aufzubauen und zu durchqueren, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur dazu dient, eine Transformation und einen Verweis auf einen Knoten einer Geometrie-BVH zu speichern. Beispiel 2 enthält optional die Vorrichtung von Beispiel 1 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, eine Operation auszuführen, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist. Beispiel 3 enthält optional die Vorrichtung von einem der Beispiele 1-2 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die Operation als einen Vorverarbeitungsdurchgang auszuführen, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren. Beispiel 4 enthält optional die Vorrichtung von einem der Beispiele 1-3 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die Operation des Teilens von Blattknoten einer existierenden Top-Level-BVH auszuführen, gefolgt von einem Durchgang, um den Top-Level der BVH zu verbessern. Beispiel 5 enthält optional die Vorrichtung von einem der Beispiele 1-4 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die Operation auf eine Liste von Baugrundformen während eines Top-down-BVH-Aufbauverfahrens anzuwenden. Beispiel 6 enthält optional die Vorrichtung von einem der Beispiele 1-5 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die Operation auf Baugrundformen anzuwenden, wenn das Generieren der Grundformen die Kosten einer Teilungsheuristik verbessert, die während des Generierens von Grundformen verwendet wird. Beispiel 7 enthält optional die Vorrichtung von einem der Beispiele 1-6 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die BVH-Struktur zu modifizieren, so dass ein oder mehrere Blattknoten in dem Top-Level der BVH-Struktur auf einen oder mehrere BVH-Unterbäume verweisen können, wobei jeder Blattknoten der Top-Level-BVH einem Paar aus einem Instanz-Identifikator und einem Unterbaum-Identifikator entsprechen soll. Beispiel 8 enthält optional die Vorrichtung von einem der Beispiele 1-7 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Instanz-Identifikator einer Transformationsoperation entsprechen soll. Beispiel 9 enthält optional die Vorrichtung von einem der Beispiele 1-8 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei Informationen, die der Transformationsoperation entsprechen, zwischengespeichert werden sollen. Beispiel 10 enthält optional die Vorrichtung von einem der Beispiele 1-9 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, einen oder mehrere Knoten zu der BVH-Struktur hinzuzufügen, wobei der eine oder die mehreren Knoten in der Lage sind, direkt auf eine oder mehrere Stellen eines instanziierten Objekts zu zeigen, um ein effizienteres Durchqueren der BVH-Struktur zu erlauben. Beispiel 11 enthält optional die Vorrichtung von einem der Beispiele 1-10 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, einen oder mehrere Knoten zu einem Top-Level der BVH-Struktur hinzuzufügen, wobei der eine oder die mehreren Knoten in der Lage sind, direkt auf eine oder mehrere Stellen eines instanziierten Objekts zu zeigen. Beispiel 12 enthält optional die Vorrichtung von einem der Beispiele 1-11 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor eines oder mehrere von Folgendem umfassen soll: eine Grafikverarbeitungseinheit (GPU) und einen Prozessorkern. Beispiel 13 enthält optional die Vorrichtung von einem der Beispiele 1-12 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei die GPU einen oder mehrere Grafikverarbeitungskerne umfassen soll. Beispiel 14 enthält optional die Vorrichtung von einem der Beispiele 1-13 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor einen oder mehrere Prozessorenkerne umfassen soll. Beispiel 15 enthält optional die Vorrichtung von einem der Beispiele 1-14 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor mindestens einen Abschnitt des Speichers umfassen soll. Beispiel 16 enthält optional die Vorrichtung von einem der Beispiele 1-16 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei sich der Prozessor und der Speicher auf einem einzelnen integrierten Schaltkreis-Die befinden.
  • Beispiel 17 enthält optional ein Verfahren, das Folgendes umfasst: Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen, in einem Speicher; und Aufbauen und Durchqueren, in einem Prozessor, der Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur eine Transformation und einen Verweis auf einen Knoten einer Geometrie-BVH speichert. Beispiel 18 enthält optional das Verfahren von Beispiel 17 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren umfasst, dass der Prozessor eine Operation ausführt, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist. Beispiel 19 enthält optional das Verfahren von einem der Beispiele 17-18 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren umfasst, dass der Prozessor die Operation als einen Vorverarbeitungsdurchgang ausführt, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren. Beispiel 20 enthält optional das Verfahren von einem der Beispiele 17-19 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren umfasst, dass der Prozessor die Operation des Teilens von Blattknoten einer existierenden Top-Level-BVH ausführt, gefolgt von einem Durchgang, um den Top-Level der BVH zu verbessern. Beispiel 21 enthält optional das Verfahren von einem der Beispiele 17-20 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren umfasst, dass der Prozessor die Operation während eines Top-down-BVH-Aufbauverfahrens an einer Liste von Baugrundformen ausführt, die rekursiv gehandhabt wird. Beispiel 22 enthält optional das Verfahren von einem der Beispiele 17-21 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren umfasst, dass der Prozessor die Operation für den Bau von Grundformen ausführt, wenn das Generieren der Grundformen die Kosten einer Teilungsheuristik verbessert, die während des Generierens der Grundformen verwendet wird.
  • Beispiel 23 enthält optional ein oder mehrere computerlesbare Medien, die eine oder mehrere Instruktionen umfassen, die, wenn sie auf mindestens einem Prozessor ausgeführt werden, den mindestens einen Prozessor dafür konfigurieren, eine oder mehrere Operationen für Folgendes auszuführen: Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen, in einem Speicher; und Aufbauen und Durchqueren der Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur eine Transformation und einen Verweis auf einen Knoten einer Geometrie-BVH speichert. Beispiel 24 enthält optional das computerlesbare Medium von Beispiel 23 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren eine oder mehrere Instruktionen umfasst, die, wenn sie auf dem mindestens einen Prozessor ausgeführt werden, den mindestens einen Prozessor dafür konfigurieren, eine oder mehrere Operationen auszuführen, um den Prozessor zu veranlassen, eine Operation auszuführen, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist. Beispiel 25 enthält optional das computerlesbare Medium von einem der Beispiele 23-24 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, das des Weiteren eine oder mehrere Instruktionen umfasst, die, wenn sie auf dem mindestens einen Prozessor ausgeführt werden, den mindestens einen Prozessor dafür konfigurieren, eine oder mehrere Operationen auszuführen, um den Prozessor zu veranlassen, die Operation auszuführen, welche die Operation als einen Vorverarbeitungsdurchgang ausführt, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren.
  • Beispiel 26 enthält optional ein System Folgendes umfasst: Speicher zum Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen; einen Prozessor, der mit dem Speicher gekoppelt ist, um die Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien aufzubauen und zu durchqueren; und eine Anzeigevorrichtung zum Anzeigen eines oder mehrerer Bilder, die der Zwei-Ebenen-BVH-Struktur entsprechen, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur dazu dient, eine Transformation und einen Verweis auf einen Knoten einer Geometrie-BVH zu speichern. Beispiel 27 enthält optional das System von Beispiel 26 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, eine Operation auszuführen, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist. Beispiel 28 enthält optional das System von einem der Beispiele 26-27 oder irgend einem anderen im vorliegenden Text besprochenen Beispiel, wobei der Prozessor dazu dient, die Operation als einen Vorverarbeitungsdurchgang auszuführen, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren.
  • Beispiel 29 enthält optional eine Vorrichtung, die ein Mittel zum Ausführen eines Verfahrens nach einem der vorherigen Beispiele umfasst. Beispiel 30 umfasst maschinenlesbaren Speicher, der maschinenlesbare Instruktionen enthält, die dazu dienen, wenn sie ausgeführt werden, ein Verfahren nach einem der vorherigen Beispiele zu implementieren oder eine Vorrichtung nach einem der vorherigen Beispiele zu realisieren.
  • In verschiedenen Ausführungsformen können Operationen, die im vorliegenden Text zum Beispiel mit Bezug auf die 1-15 besprochen wurden, als Hardware (zum Beispiel Logikschaltungen), Software, Firmware oder Kombinationen davon implementiert werden, die als ein Computerprogrammprodukt bereitgestellt werden können, einschließlich beispielsweise greifbare (zum Beispiel nicht-transitorische) maschinenlesbare oder computerlesbare Medien, auf denen Instruktionen (oder Softwareabläufe) gespeichert sind, die dafür verwendet werden, einen Computer zu programmieren, um einen im vorliegenden Text besprochenen Prozess auszuführen. Das maschinenlesbare Medium kann eine Speichervorrichtung enthalten, wie zu Beispiel jene, die mit Bezug auf die 1-15 besprochen wurden.
  • Zusätzlich können solche computerlesbaren Medien als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem räumlich abgesetzten Computer (zum Beispiel einem Server) mittels Datensignalen, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium bereitgestellt werden, über einen Kommunikationslink (zum Beispiel einen Bus, ein Modem oder eine Netzwerkverbindung) zu einem anfordernden Computer (zum Beispiel einem Client) übertragen werden kann.
  • Wenn in der Spezifikation von „einer bestimmten Ausführungsform“ oder „einer Ausführungsformen“ die Rede ist, so bedeutet das, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum, das in Verbindung mit der Ausführungsform beschrieben wurde, in mindestens einer Implementierung enthalten sein kann. Das Vorkommen der Wendung „in einer Ausführungsform“ an verschiedenen Stellen in der Spezifikation kann sich - muss sich aber nicht - immer auf dieselbe Ausführungsform beziehen.
  • Des Weiteren können in der Beschreibung und in den Ansprüchen die Begriffe „gekoppelt“ und „verbunden“, zusammen mit ihren Ableitungen, verwendet werden. In einigen Ausführungsformen der Erfindung kann „verbunden“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente sich in direktem physischem oder elektrischem Kontakt miteinander befinden. „Gekoppelt“ kann bedeuten, dass zwei oder mehr Elemente sich in direktem physischem oder elektrischem Kontakt befinden. Jedoch kann „gekoppelt“ auch bedeuten, dass zwei oder mehr Elemente sich nicht in direktem Kontakt miteinander befinden, aber dennoch zusammenwirken oder miteinander interagieren.
  • Obgleich also Ausführungsformen der Erfindung in Worten beschrieben wurden, die für strukturelle Merkmale und/oder methodologische Handlungsweisen spezifisch sind, versteht es sich, dass der beanspruchte Gegenstand der Erfindung nicht auf die beschriebenen konkreten Merkmale oder Handlungsweisen beschränkt zu sein braucht. Vielmehr sind die konkreten Merkmale und Handlungsweisen als beispielhafte Formen des Implementierens des beanspruchten Gegenstands der Erfindung offenbart.

Claims (24)

  1. Vorrichtung, die Folgendes umfasst: Speicher zum Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen; und einen Prozessor, der mit dem Speicher gekoppelt ist, um die Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien aufzubauen und zu durchqueren, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur dazu dient, eine Transformation und einen Verweis auf einen Knoten einer Geometrie-BVH zu speichern.
  2. Vorrichtung nach Anspruch 1, wobei der Prozessor dazu dient, eine Operation auszuführen, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist.
  3. Vorrichtung nach einem der Ansprüche 1-2, wobei der Prozessor dazu dient, die Operation als einen Vorverarbeitungsdurchgang auszuführen, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren.
  4. Vorrichtung nach einem der Ansprüche 1-3, wobei der Prozessor dazu dient, die Operation des Teilens von Blattknoten einer existierenden Top-Level-BVH auszuführen, gefolgt von einem Durchgang, um den Top-Level der BVH zu verbessern.
  5. Vorrichtung nach einem der Ansprüche 1-4, wobei der Prozessor dazu dient, die Operation auf eine Liste von Baugrundformen während eines Top-down-BVH-Aufbauverfahrens anzuwenden.
  6. Vorrichtung nach einem der Ansprüche 1-5, wobei der Prozessor dazu dient, die Operation auf Baugrundformen anzuwenden, wenn das Generieren der Grundformen die Kosten einer Teilungsheuristik verbessert, die während des Generierens von Grundformen verwendet wird.
  7. Vorrichtung nach einem der Ansprüche 1-6, wobei der Prozessor dazu dient, die BVH-Struktur zu modifizieren, so dass ein oder mehrere Blattknoten in dem Top-Level der BVH-Struktur auf einen oder mehrere BVH-Unterbäume verweisen können, wobei jeder Blattknoten der Top-Level-BVH einem Paar aus einem Instanz-Identifikator und einem Unterbaum-Identifikator entsprechen soll.
  8. Vorrichtung nach einem der Ansprüche 1-7, wobei der Instanz-Identifikator einer Transformationsoperation entsprechen soll.
  9. Vorrichtung nach einem der Ansprüche 1-8, wobei Informationen, die der Transformationsoperation entsprechen, zwischengespeichert werden sollen.
  10. Vorrichtung nach einem der Ansprüche 1-9, wobei der Prozessor dazu dient, einen oder mehrere Knoten zu der BVH-Struktur hinzuzufügen, wobei der eine oder die mehreren Knoten in der Lage sind, direkt auf eine oder mehrere Stellen eines instanziierten Objekts zu zeigen, um ein effizienteres Durchqueren der BVH-Struktur zu erlauben.
  11. Vorrichtung nach einem der Ansprüche 1-10, wobei der Prozessor dazu dient, einen oder mehrere Knoten zu einem Top-Level der BVH-Struktur hinzuzufügen, wobei der eine oder die mehreren Knoten in der Lage sind, direkt auf eine oder mehrere Stellen eines instanziierten Objekts zu zeigen.
  12. Vorrichtung nach einem der Ansprüche 1-11, wobei der Prozessor eines oder mehrere von Folgendem umfassen soll: eine Grafikverarbeitungseinheit (GPU), und einen Prozessorkern.
  13. Vorrichtung nach einem der Ansprüche 1-12, wobei die GPU einen oder mehrere Grafikverarbeitungskerne umfassen soll.
  14. Vorrichtung nach einem der Ansprüche 1-13, wobei der Prozessor einen oder mehrere Prozessorenkerne umfassen soll.
  15. Vorrichtung nach einem der Ansprüche 1-14, wobei der Prozessor mindestens einen Abschnitt des Speichers umfassen soll.
  16. Vorrichtung nach einem der Ansprüche 1-15, wobei sich der Prozessor und der Speicher auf einem einzelnen integrierten Schaltkreis-Die befinden.
  17. Verfahren, das Folgendes umfasst: Speichern von Informationen, die einer Zwei-Ebenen-Bounding Volume Hierarchy (BVH)-Struktur entsprechen, in einem Speicher; und Aufbauen und Durchqueren, in einem Prozessor, der Zwei-Ebenen-BVH-Struktur über instanziierte Geometrien, wobei jeder Blattknoten eines Top-Level der Zwei-Ebenen-BVH-Struktur eine Transformation und einen Verweis auf einen Knoten einer Geometrie-B VH speichert.
  18. Verfahren nach Anspruch 17, das des Weiteren umfasst, dass der Prozessor eine Operation ausführt, um eine räumliche Überlappung in einer Liste von instanziierten BVH-Knoten zu verringern, indem wiederholt ein oder mehrere instanziierte Knoten durch eine Instanziierung ihrer Kind-Knoten ersetzt werden, bis ein Beendigungskriterium erfüllt ist.
  19. Verfahren nach einem der Ansprüche 17-18, das des Weiteren umfasst, dass der Prozessor die Operation als einen Vorverarbeitungsdurchgang ausführt, um die Liste von instanziierten BVH-Knoten als Eingabe in ein BVH-Aufbauverfahren zu generieren.
  20. Verfahren nach einem der Ansprüche 17-19, das des Weiteren umfasst, dass der Prozessor die Operation des Teilens von Blattknoten einer existierenden Top-Level-BVH ausführt, gefolgt von einem Durchgang, um den Top-Level der BVH zu verbessern.
  21. Verfahren nach einem der Ansprüche 17-20, das des Weiteren umfasst, dass der Prozessor die Operation während eines Top-down-BVH-Aufbauverfahrens an einer Liste von Baugrundformen ausführt, die rekursiv gehandhabt wird.
  22. Verfahren nach einem der Ansprüche 17-21, das des Weiteren umfasst, dass der Prozessor die Operation für den Bau von Grundformen ausführt, wenn das Generieren der Grundformen die Kosten einer Teilungsheuristik verbessert, die während des Generierens der Grundformen verwendet wird.
  23. Computerlesbares Medium, das eine oder mehrere Instruktionen umfasst, die, wenn sie auf einem Prozessor ausgeführt werden den Prozessor dafür konfigurieren, eine oder mehrere Operationen nach einem der Ansprüche 1 bis 22 auszuführen.
  24. Vorrichtung, die Mittel zum Ausführen eines Verfahrens nach einem der Ansprüche 1 bis 22 umfasst.
DE112017001703.3T 2016-03-30 2017-01-04 Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie Pending DE112017001703T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/086,033 US10043303B2 (en) 2016-03-30 2016-03-30 Methods and apparatus for more efficient ray tracing of instanced geometry
US15/086,033 2016-03-30
PCT/US2017/012219 WO2017171959A1 (en) 2016-03-30 2017-01-04 Methods and apparatus for more efficient ray tracing of instanced geometry

Publications (1)

Publication Number Publication Date
DE112017001703T5 true DE112017001703T5 (de) 2018-12-13

Family

ID=59961773

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017001703.3T Pending DE112017001703T5 (de) 2016-03-30 2017-01-04 Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie

Country Status (4)

Country Link
US (2) US10043303B2 (de)
CN (2) CN108701368B (de)
DE (1) DE112017001703T5 (de)
WO (1) WO2017171959A1 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10043303B2 (en) 2016-03-30 2018-08-07 Intel IP Corporation Methods and apparatus for more efficient ray tracing of instanced geometry
US10679403B2 (en) * 2017-04-14 2020-06-09 Intel Corporation Apparatus and method for efficiently merging bounding volume hierarchy data
US20190325763A1 (en) * 2018-04-22 2019-10-24 Intel Corporation Real and virtual collision-free movement of autonomous vehicles in mixed-reality environments
US20200211259A1 (en) * 2018-12-28 2020-07-02 Intel Corporation Apparatus and method for acceleration data structure refit
US10762668B2 (en) * 2018-12-28 2020-09-01 Intel Corporation Context-aware compression with quantization of hierarchical transform matrices
GB2586279B (en) * 2019-08-16 2022-11-23 Siemens Ind Software Inc Routing messages in a integrated circuit chip device
US11393156B2 (en) * 2020-03-13 2022-07-19 Advanced Micro Devices, Inc. Partially resident bounding volume hierarchy
US11670035B2 (en) * 2020-03-15 2023-06-06 Intel Corporation Apparatus and method for performing non-local means filtering using motion estimation circuitry of a graphics processor
GB2593946B (en) * 2020-07-14 2022-04-27 Imagination Tech Ltd Methods and systems for constructing ray tracing acceleration structures
EP3940649A1 (de) * 2020-07-14 2022-01-19 Imagination Technologies Limited Verfahren und systeme zur konstruktion von strahlverfolgungsbeschleunigungsstrukturen
EP3940650A1 (de) * 2020-07-14 2022-01-19 Imagination Technologies Limited Verfahren und systeme zur konstruktion von strahlverfolgungsbeschleunigungsstrukturen
GB2608386B (en) * 2021-06-29 2024-05-15 Imagination Tech Ltd Transformation of data in a ray tracing system
US11861785B2 (en) * 2022-02-04 2024-01-02 Qualcomm Incorporated Generation of tight world space bounding regions

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6597359B1 (en) * 2000-05-17 2003-07-22 Raychip, Inc. Hierarchical space subdivision hardware for ray tracing
US7659894B2 (en) * 2000-06-19 2010-02-09 Mental Images Gmbh Terminating spatial partition hierarchies by a priori bounding memory
US7952583B2 (en) * 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US7499053B2 (en) * 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US6734853B2 (en) * 2001-08-28 2004-05-11 Intel Corporation Method of using view frustrum culling for scaleable collision detection
US7940266B2 (en) * 2006-10-13 2011-05-10 International Business Machines Corporation Dynamic reallocation of processing cores for balanced ray tracing graphics workload
US7852336B2 (en) * 2006-11-28 2010-12-14 International Business Machines Corporation Dynamic determination of optimal spatial index mapping to processor thread resources
KR100980449B1 (ko) * 2007-12-17 2010-09-07 한국전자통신연구원 병렬 전역조명 렌더링 방법 및 시스템
US8212816B1 (en) * 2007-12-17 2012-07-03 Nvidia Corporation System, method, and computer program product for parallel ray tracing traversal and intersection utilizing a single instruction multiple data (SIMD) processing architecture
KR101475779B1 (ko) * 2008-06-02 2014-12-23 삼성전자주식회사 3d 영상 처리 방법
US8253730B1 (en) * 2008-08-29 2012-08-28 Adobe Systems Incorporated System and method for construction of data structures for ray tracing using bounding hierarchies
US8570322B2 (en) * 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US8471845B1 (en) * 2009-07-31 2013-06-25 Nvidia Corporation System and method for constructing a bounding volume hierarchical structure
US8669977B2 (en) * 2009-10-01 2014-03-11 Intel Corporation Hierarchical mesh quantization that facilitates efficient ray tracing
US10163187B2 (en) * 2009-10-30 2018-12-25 Intel Corproation Graphics rendering using a hierarchical acceleration structure
KR101697238B1 (ko) * 2010-08-26 2017-01-17 삼성전자주식회사 영상 처리 장치 및 방법
US20140347355A1 (en) * 2011-02-14 2014-11-27 Siliconarts Inc. Ray tracing core and method for processing ray tracing
US9183667B2 (en) 2011-07-15 2015-11-10 Kirill Garanzha Out-of-core ray tracing with memory-efficient page generation
US9317961B2 (en) * 2011-09-14 2016-04-19 Google Inc. Prioritizing node requests based on tile distance to reduce perceptual scene time
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US9396512B2 (en) * 2012-03-09 2016-07-19 Nvidia Corporation Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit
US20130321420A1 (en) 2012-05-29 2013-12-05 Nvidia Corporation Ray-node test using integer comparisons
KR102042539B1 (ko) * 2012-07-24 2019-11-08 삼성전자주식회사 레이 트레이싱 방법 및 장치
KR102080851B1 (ko) * 2012-09-17 2020-02-24 삼성전자주식회사 레이 추적의 스케쥴링을 위한 장치 및 방법
US9224235B2 (en) * 2013-03-20 2015-12-29 Nvidia Corporation System, method, and computer program product for compression of a bounding volume hierarchy
US9547932B2 (en) 2013-06-10 2017-01-17 Nvidia Corporation Splitting bounding volumes of primitives
US10331632B2 (en) * 2013-06-10 2019-06-25 Nvidia Corporation Bounding volume hierarchies through treelet restructuring
KR20150057868A (ko) * 2013-11-20 2015-05-28 삼성전자주식회사 레이 트레이싱 시스템에서의 이진트리 탐색 방법 및 장치
US9990758B2 (en) 2014-03-31 2018-06-05 Intel Corporation Bounding volume hierarchy generation using a heterogeneous architecture
US9697640B2 (en) * 2014-04-21 2017-07-04 Qualcomm Incorporated Start node determination for tree traversal in ray tracing applications
KR102244619B1 (ko) * 2014-09-30 2021-04-26 삼성전자 주식회사 가속 구조를 생성 및 탐색하는 방법
US10043303B2 (en) 2016-03-30 2018-08-07 Intel IP Corporation Methods and apparatus for more efficient ray tracing of instanced geometry

Also Published As

Publication number Publication date
US20170287202A1 (en) 2017-10-05
WO2017171959A1 (en) 2017-10-05
CN117078832A (zh) 2023-11-17
US10504275B2 (en) 2019-12-10
US20180308273A1 (en) 2018-10-25
CN108701368A (zh) 2018-10-23
CN108701368B (zh) 2023-11-14
US10043303B2 (en) 2018-08-07

Similar Documents

Publication Publication Date Title
DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE102019117585A1 (de) Selektives Packen von Patches für immersives Video
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE112017003234T5 (de) Reduzieren von Speicherzugrifflatenzen während der Strahltraversierung
DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE112017004671T5 (de) Vorrichtung und Verfahren für optimiertes Raytracing
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE112017003841T5 (de) Verfahren und vorrichtung für die korrekte reihung und nummerierung mehrerer aufeinanderfolgender strahl-oberflächen-schnittpunkte innerhalb einer raytracing-architektur
DE102020129003A1 (de) Vorrichtung und verfahren zum verwenden von alpha-werten zum verbessern einer strahlverfolgungseffizienz
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE112014002477T5 (de) Vorrichtung und Verfahren für eine effiziente Grafikverarbeitung in einer virtuellen Ausführungsumgebung
DE112017003932T5 (de) Mechanismus zum Beschleunigen von Grafikarbeitslasten in einer Mehrkern-Datenverarbeitungsarchitektur
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE112017004918T5 (de) Hybrides Stereo-Rendering für Tiefenverlängerung in dynamischen Lichtfeldanzeigen
DE112017004077T5 (de) Einrichtung und verfahren für optimiertes kachelbasiertes rendering
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE112017001845T5 (de) Strahltraversierung mit reduzierter Genauigkeit mit Wiederverwendung von Ebenen
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz

Legal Events

Date Code Title Description
R081 Change of applicant/patentee

Owner name: INTEL CORPORATION, SANTA CLARA, US

Free format text: FORMER OWNER: INTEL IP CORPORATION, SANTA CLARA, CA, US

R130 Divisional application to

Ref document number: 112017008434

Country of ref document: DE

R082 Change of representative

Representative=s name: SAMSON & PARTNER PATENTANWAELTE MBB, DE

R012 Request for examination validly filed