DE102022111609A1 - Beschleunigte verarbeitung über eine körperbasierte rendering-maschine - Google Patents

Beschleunigte verarbeitung über eine körperbasierte rendering-maschine Download PDF

Info

Publication number
DE102022111609A1
DE102022111609A1 DE102022111609.3A DE102022111609A DE102022111609A1 DE 102022111609 A1 DE102022111609 A1 DE 102022111609A1 DE 102022111609 A DE102022111609 A DE 102022111609A DE 102022111609 A1 DE102022111609 A1 DE 102022111609A1
Authority
DE
Germany
Prior art keywords
ray
processing
instructions
request
core
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
DE102022111609.3A
Other languages
English (en)
Inventor
Robert A. Alfieri
Peter S. Shirley
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of DE102022111609A1 publication Critical patent/DE102022111609A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • 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/50Lighting effects
    • G06T15/80Shading

Landscapes

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

Abstract

Eine Ausführungsform eines computerimplementierten Verfahrens zum parallelen Verarbeiten von Strahlverfolgungsoperationen umfasst ein Empfangen einer Vielzahl von Strahlen und eines entsprechenden Satzes von Materialschattierungsanweisungen für jeden in der Vielzahl von zu verarbeitenden Strahlen enthaltenen Strahl, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert und jeder entsprechende Satz von Materialschattierungsanweisungen zumindest teilweise auf einer oder mehreren Materialeigenschaften basiert, die mindestens einer Oberfläche von mindestens einem in der 3D-Umgebung enthaltenen Objekt zugeordnet sind; ein Zuweisen jedes Strahls, der in der Vielzahl von Strahlen enthalten ist, an einen anderen Verarbeitungskern, der in einer Vielzahl von Verarbeitungskernen enthalten ist; und für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, ein Veranlassen des Verarbeitungskerns, der dem Strahl zugewiesen ist, den entsprechenden Satz von Materialschattierungsanweisungen an dem Strahl auszuführen, um eine Farbe zu erzeugen.

Description

  • HINTERGRUND
  • Gebiet der verschiedenen Ausführungsformen
  • Ausführungsformen der vorliegenden Offenbarung beziehen sich allgemein auf Computerwissenschaft und -architektur, und im Besonderen auf beschleunigte Verarbeitung durch eine körperbasierte Rendering-Maschine.
  • Beschreibung des verwandten Standes der Technik
  • In der Computergrafik werden häufig Techniken der Strahlenverfolgung bzw. RayTracing-Techniken eingesetzt, um ein zweidimensionales Bild einer dreidimensionalen Szene zu rendern. Bei der Strahlenverfolgung werden Strahlen von einem bestimmten Standpunkt aus in eine dreidimensionale Szene übertragen und die verschiedenen Punkte bestimmt, an denen die Strahlen die Oberflächen verschiedener Objekte in der dreidimensionalen Szene schneiden. Für jede Stelle, an der ein Strahl die Oberfläche eines bestimmten Objekts schneidet, werden Materialschattierungsoperationen durchgeführt, um die Farbe eines entsprechenden Pixels in dem zweidimensionalen Bild zu bestimmen.
  • Um fotorealistischer aussehende Ergebnisse zu erzeugen, werden Objektoberflächen innerhalb einer dreidimensionalen Szene oft unter Verwendung verschiedener Schichten von Materialeigenschaften, wie z.B. Glanz, Reflexionsvermögen, diffuses Verhalten, Lichtdurchlässigkeit und Transparenz, um nur einige zu nennen, modelliert. Es können dann Graphenstrukturen erzeugt werden, die die Materialeigenschaften der Objektoberflächen innerhalb der dreidimensionalen Szene auf der Grundlage der verschiedenen Schichten von Materialeigenschaften definieren, die zur Modellierung der Objektoberflächen verwendet wurden. Eine Graphenstruktur gibt unter anderem an, wie Licht mit Objektoberflächen innerhalb der dreidimensionalen Szene auf der Grundlage der Materialeigenschaften der Objektoberflächen sowie der Beziehungen zwischen den Materialeigenschaften der Objektoberflächen interagiert. Beim Rendern des zweidimensionalen Bilds der dreidimensionalen Szene werden die Materialgraphen in mehrere Materialschattierungsprogramme kompiliert, die von einem Prozessor ausgeführt werden, um die entsprechenden Materialschattierungsoperationen durchzuführen.
  • Um das Rendern von Grafiken zu beschleunigen, werden Grafikverarbeitungsberechnungen oft auf eine Grafikverarbeitungseinheit (GPU) ausgelagert. Eine typische GPU ist in einer hochgradig parallelisierten Weise konfiguriert, wobei mehrere Verarbeitungskerne Grafikdaten oder andere ausgelagerte Daten über mehrere verschiedene Thread-Gruppen hinweg gleichzeitig verarbeiten und dabei entweder SIMD (Same Instruction, Multiple Data)- oder SIMT (Same Instruction, Multiple Threads)-Ausführungsmodelle nutzen. Bei der SIMD- oder SIMT-Verarbeitung verarbeiten die verschiedenen Threads in einer Thread-Gruppe unterschiedliche Daten auf der Grundlage derselben Anweisung, wodurch die Verarbeitungskerne innerhalb einer GPU hochparallele Verarbeitungsoperationen schnell und effizient durchführen können, um den Gesamtverarbeitungsdurchsatz erheblich zu steigern.
  • Ein häufiges Problem bei der Strahlenverfolgung besteht jedoch darin, dass Strahlenverfolgungsoperationen normalerweise nicht in einer hochgradig parallelen Weise unter Verwendung einer GPU ausgeführt werden können, da jeder einzelne Strahl in der Regel unterschiedliche Eingaben und unterschiedliche Berechnungen involviert. Falls zum Beispiel zwei verschiedene Strahlen zwei verschiedene Oberflächen innerhalb einer dreidimensionalen Szene schneiden müssten, dann müsste für jeden Strahl ein anderes Materialschattierungsprogramm ausgeführt werden. Aus diesem Grund eignen sich Strahlen nicht ohne weiteres für eine effiziente parallele Verarbeitung unter Verwendung entweder SIMD- oder SIMT-Ausführungsmodellen. Stattdessen müssen Strahlen in der Regel weiter nach Materialtyp sortiert werden, so dass Gruppen von ansonsten nicht zusammenhängenden Strahlen unter Verwendung von SIMD oder SIMT verarbeitet werden können. Dementsprechend kann die hochparallele Architektur herkömmlicher GPUs nicht ohne weiteres zur Beschleunigung von Strahlenverfolgungs- bzw. Raytracing-Operationen genutzt werden.
  • Eine Möglichkeit, GPUs und andere Arten von Parallelprozessoren in die Lage zu versetzen, Strahlenverfolgungsoperationen und andere serielle Verarbeitungsaufgaben effizienter auszuführen, bestünde darin, mehr Transistoren zu diesen Prozessoren hinzuzufügen. Um die Anzahl von Transistoren innerhalb eines Prozessors zu erhöhen, müsste jedoch entweder die Chipgröße erhöht werden, müssten die Transistoren dichter gepackt werden, oder müssten die Transistoren kleiner sein. Eine Erhöhung der Chipgröße ist allgemein nicht wünschenswert. Weil sich die Raten, mit welchen die Transistorgröße abnimmt und die Transistordichte zunimmt, verlangsamen, würde ein Hinzufügen einer größeren Anzahl von Transistoren zu einem Prozessor wahrscheinlich in einem größeren Prozessor resultieren, was, wie bereits erwähnt, unerwünscht wäre. Dementsprechend ist das Hinzufügen von Transistoren zu GPUs und anderen Arten von Parallelprozessoren zur Verbesserung der Verarbeitungsleistung bei der Durchführung von Strahlenverfolgungsoperationen und anderen seriellen Verarbeitungsaufgaben keine praktikable Lösung.
  • Wie die vorangegangenen Ausführungen zeigen, besteht ein Bedarf an effektiveren Wegen zur Durchführung von Strahlenverfolgungsoperationen und anderen seriellen Verarbeitungsaufgaben auf Parallelprozessoren.
  • KURZBESCHREIBUNG
  • Eine Ausführungsform der vorliegenden Offenbarung stellt ein computerimplementiertes Verfahren dar zum parallelen Verarbeiten von Strahlenverfolgungsoperationen. Das Verfahren umfasst ein Empfangen einer Vielzahl von Strahlen und eines entsprechenden Satzes von Materialschattierungsanweisungen für jeden in der Vielzahl von Strahlen enthaltenen Strahl zur Verarbeitung, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert und jeder entsprechende Satz von Materialschattierungsanweisungen zumindest teilweise auf einer oder mehreren Materialeigenschaften basiert, die mindestens einer Oberfläche von mindestens einem in der 3D-Umgebung enthaltenen Objekt zugeordnet sind. Das Verfahren umfasst ferner ein Zuweisen jedes Strahls, der in der Vielzahl von Strahlen enthalten ist, an einen anderen Verarbeitungskern, der in einer Vielzahl von Verarbeitungskernen enthalten ist. Darüber hinaus umfasst das Verfahren für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, ein Veranlassen des dem Strahl zugewiesenen Verarbeitungskerns, den entsprechenden Satz von Materialschattierungsanweisungen an dem Strahl auszuführen, um eine Farbe zu erzeugen.
  • Mindestens ein technischer Vorteil der offenbarten Techniken besteht darin, dass eine Rendering-Engine bzw. Rendering-Maschine bereitgestellt wird, die speziell dazu ausgelegt ist, Strahlenverfolgungsoperationen und anderen serielle Verarbeitungsaufgaben mit verbesserter Effizienz im Vergleich zu aus dem Stand der Technik bekannten Lösungen durchzuführen. Dementsprechend kann die Rendering-Maschine in eine GPU oder eine andere parallele Verarbeitungseinheit integriert sein, und können Verarbeitungsaufgaben, die nicht effektiv über die herkömmlichen Verarbeitungselemente innerhalb der GPU oder einer anderen parallelen Verarbeitungseinheit parallelisiert werden können, auf die Rendering-Maschine ausgelagert werden, welches die Gesamtverarbeitungsleistung und den Durchsatz erhöht. In diesem Zusammenhang sind innerhalb der Rendering-Maschine mehrere MIMD (Multiple Input, Multiple Data)-Verarbeitungskerne implementiert, wobei jeder Verarbeitungskern dazu konfiguriert ist, asynchron einen anderen Strahl oder eine andere Einheit serieller Verarbeitungsarbeite zu verarbeiten, wodurch Strahlenverfolgungsoperationen und andere serielle Verarbeitungsaufgaben weitgehend parallel über die verschiedenen Verarbeitungskerne hinweg ausgeführt werden können. Um den Gesamtverarbeitungsdurchsatz weiter zu verbessern, umfasst die Rendering-Maschine darüber hinaus mehrere Pipelines, die dazu ausgelegt sind, bestimmte spezialisierte Verarbeitungsaufgaben auszuführen. Während des Betriebs können die Verarbeitungskerne die spezialisierten Verarbeitungsaufgaben auf die verschiedenen Pipelines auslagern, und ist ein Planer, der sich innerhalb der Rendering-Maschine befindet, dazu konfiguriert, die ausgelagerten Aufgaben über die verschiedenen Pipelines hinweg in optimierter Weise zu verteilen. Diese technischen Vorteile stellen einen oder mehrere technologische Fortschritte gegenüber bekannten Ansätzen bereit.
  • Figurenliste
  • Zum Verständnis der Art und Weise der vorstehend genannten Merkmale der verschiedenen Ausführungsformen im Einzelnen werden nachstehend die erfinderischen Konzepte, die vorstehend kurz zusammengefasst wurden, durch Bezugnahme auf verschiedene Ausführungsformen, von welchen einige in den beigefügten Zeichnungen dargestellt sind, genauer beschrieben. Es wird jedoch angemerkt, dass die beigefügten Zeichnungen nur typische Ausführungsformen der erfindungsgemäßen Konzepte veranschaulichen und daher in keiner Weise als den Schutzumfang beschränkend anzusehen sind, und dass es andere ebenso wirkungsvolle Ausführungsformen gibt.
    • 1 ist ein Blockdiagramm, das ein Computersystem zeigt, das dazu konfiguriert ist, einen oder mehrere Aspekte verschiedener Ausführungsformen zu implementieren;
    • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit, die in dem Parallelverarbeitungs-Subsystem von 1 enthalten ist, gemäß einer Ausführungsform;
    • 3 ist ein Blockdiagramm eines Universalverarbeitungsclusters der Parallelverarbeitungseinheit von 2, gemäß einer Ausführungsform;
    • 4 ist ein Blockdiagramm einer Rendering-Maschine, die in der Texturverarbeitungseinheit von 3 enthalten ist, gemäß einer Ausführungsform;
    • Die 5A-B sind Blockdiagramme, die Datenflüsse zum Durchführen einer Materialschattierung eines Strahls unter Verwendung der Rendering-Maschine von 4 veranschaulichen, gemäß einer Ausführungsform;
    • 6 ist ein Ablaufdiagramm von Verfahrensschritten zum Durchführen einer Materialschattierung für einen Strahl unter Verwendung der Rendering-Maschine von 4, gemäß einer Ausführungsform;
    • 7 ist ein Ablaufdiagramm von Verfahrensschritten zum Ausführen eines Satzes von Materialschattierungsanweisungen unter Verwendung einer Rendering-Maschine von 4, gemäß einer Ausführungsform;
    • 8 ist ein Blockdiagramm, das Datenflüsse zur Verwendung einer Festfunktions-Pipeline der Rendering-Maschine von 4 zum Durchführen von Operationen für einen Streaming-Multiprozessor veranschaulicht, gemäß einer Ausführungsform;
    • 9 ist ein Ablaufdiagramm von Verfahrensschritten zur Verwendung einer Festfunktions-Pipeline der Rendering-Maschine von 4 zum Durchführen von Operationen für einen Streaming-Multiprozessor, gemäß einer Ausführungsform;
    • 10A-C sind Blockdiagramme, die Datenflüsse zum Extrahieren eines einzelnen Texels aus einem komprimierten Texturblock unter Verwendung der Rendering-Maschine von 4 veranschaulichen, gemäß einer Ausführungsform;
    • 11A ist ein Ablaufdiagramm von Verfahrensschritten zum Bestimmen einer Adresse eines Zieltexturblocks, gemäß einer Ausführungsform;
    • 11B ist ein Ablaufdiagramm von Verfahrensschritten zum Extrahieren eines Zieltexels aus einem Texturblock, ohne andere Texel in dem Texturblock zu dekomprimieren oder zu extrahieren, gemäß einer Ausführungsform;
    • 12 ist ein Blockdiagramm, das Datenflüsse zum Durchführen von Wichtigkeitssampling für einen Strahl unter Verwendung der Rendering-Maschine von 4 veranschaulicht, gemäß einer Ausführungsform;
    • 13A ist ein Ablaufdiagramm von Verfahrensschritten zum Durchführen von Wichtigkeitssampling für einen Strahl unter Verwendung der Rendering-Maschine von 4, gemäß einer Ausführungsform;
    • 13B ist ein Ablaufdiagramm von Verfahrensschritten zum Ausführen eines Satzes von Wichtigkeitssampling-Anweisungen unter Verwendung der Rendering-Maschine von 4, gemäß einer Ausführungsform;
    • 14 ist ein Blockdiagramm, das eine Computervorrichtung veranschaulicht, die dazu konfiguriert ist, einen oder mehrere Aspekte verschiedener Ausführungsformen zu implementieren;
    • 15 ist ein konzeptionelles Diagramm, das einen beispielhaften Materialgraphen veranschaulicht, gemäß einer Ausführungsform; und
    • 16 ist ein Ablaufdiagramm von Verfahrensschritten zum Kompilieren eines Materialgraphen in Bytecode-Anweisungen, gemäß einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein besseres Verständnis der verschiedenen Ausführungsformen zu ermöglichen. Einem Fachmann wird jedoch klar sein, dass die erfindungsgemäßen Konzepte auch ohne eines oder mehrere dieser spezifischen Details in die Praxis umgesetzt werden können.
  • Systemübersicht
  • 1 ist ein Blockdiagramm, das ein Computersystem 100 zeigt, das dazu konfiguriert ist, einen oder mehrere Aspekte der verschiedenen Ausführungsformen zu implementieren. Wie dargestellt, umfasst das Computersystem 100, ohne Beschränkung darauf, eine Zentralverarbeitungseinheit (CPU) 102 und einen Systemspeicher 104, der über eine Speicherbrücke 105 und einen Kommunikationspfad 113 an einen Parallelverarbeitungssubsystem 112 gekoppelt ist. Die Speicherbrücke 105 ist ferner über einen Kommunikationspfad 106 mit einer E/A (Eingabe/Ausgabe)-Brücke 107 gekoppelt, und die E/A-Brücke 107 ist wiederum mit einem Schalter 116 gekoppelt.
  • Im Betrieb ist die E/A-Brücke 107 dazu konfiguriert, Benutzereingabedaten von Eingabevorrichtungen 108, wie z.B. einer Tastatur oder einer Maus, zu empfangen und die Eingabedaten zur Verarbeitung über den Kommunikationspfad 106 und die Speicherbrücke 105 an die CPU 102 weiterzuleiten. Der Schalter 116 ist dazu konfiguriert, Verbindungen zwischen der E/A-Brücke 107 und anderen Komponenten des Computersystems 100, wie z.B. einem Netzwerkadapter 118 und verschiedenen Zusatzkarten 120 und 121, herzustellen.
  • Wie ebenfalls gezeigt, ist die E/A-Brücke 107 mit einer Systemplatte 114 gekoppelt, die dazu konfiguriert sein kann, Inhalte, Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungs-Subsystem 112 zu speichern. Im Allgemeinen stellt die Systemplatte 114 nichtflüchtigen Speicher für Anwendungen und Daten bereit und kann feste oder austauschbare Festplattenlaufwerke, Flash-Speichervorrichtungen und CD-ROM (Compact Disc Read-Only-Memory), DVD-ROM (Digital Versatile Disc-ROM), Blu-ray, HD-DVD (High-Definition DVD) oder andere magnetische, optische oder Festkörperspeichervorrichtungen umfassen. Schließlich können, obwohl nicht explizit dargestellt, auch andere Komponenten, wie z.B. Universal Serial Bus- oder andere Port-Verbindungen, Compact-Disc-Laufwerke, Digital Versatile Disc-Laufwerke, Filmaufzeichnungsvorrichtungen usw., mit der E/A-Brücke 107 verbunden sein.
  • In verschiedenen Ausführungsformen kann die Speicherbrücke 105 ein Northbridge-Chip sein, und kann die E/A-Brücke 107 ein Southbridge-Chip sein. Darüber hinaus können die Kommunikationspfade 106 und 113 sowie andere Kommunikationspfade innerhalb des Computersystems 100 unter Verwendung beliebiger technisch geeigneter Protokolle implementiert sein, einschließlich, aber nicht beschränkt auf AGP (Accelerated Graphics Port), HyperTransport oder beliebige andere Bus- oder Punkt-zu-Punkt-Kommunikationsprotokolle, die im Stand der Technik bekannt sind.
  • In einigen Ausführungsformen umfasst das Parallelverarbeitungs-Subsystem 112 ein Grafik-Subsystem, das Pixel an eine Anzeigevorrichtung 110 liefert, bei der es sich um eine herkömmliche Kathodenstrahlröhre, Flüssigkristallanzeige, Leuchtdiodenanzeige oder dergleichen handeln kann. In solchen Ausführungsformen enthält das Parallelverarbeitungs-Subsystem 112 Schaltkreise, die für die Grafik- und Videoverarbeitung optimiert sind, einschließlich z.B. Videoausgangsschaltkreise. Wie nachstehend in 2 näher beschrieben, können solche Schaltkreise über eine oder mehrere Parallelverarbeitungseinheiten (PPUs) innerhalb des Parallelverarbeitungs-Subsystems 112 integriert sein. In anderen Ausführungsformen enthält das Parallelverarbeitungs-Subsystem 112 Schaltkreise, die für allgemeine und/oder rechnerische Verarbeitung optimiert sind. Auch hier können solche Schaltkreise über eine oder mehrere PPUs innerhalb des Parallelverarbeitungs-Subsystems 112 hinweg integriert sein, die dazu konfiguriert sind, solche Universal- und/oder Rechenoperationen durchzuführen. In noch anderen Ausführungsformen können die eine oder die mehreren PPUs, die innerhalb des Parallelverarbeitungs-Subsystems 112 enthalten sind, dazu konfiguriert sein, Grafikverarbeitungs-, Universalverarbeitungs- und Rechenverarbeitungsoperationen durchzuführen. Der Systemspeicher 104 enthält mindestens einen Gerätetreiber 103, der dazu konfiguriert ist, die Verarbeitungsvorgänge der einen oder der mehreren PPUs innerhalb des Parallelverarbeitungs-Subsystems 112 zu verwalten. Der Systemspeicher 104 enthält auch eine Softwareanwendung 125, die auf der CPU 102 ausgeführt wird und Befehle ausgeben kann, die den Betriebsablauf der PPUs steuern.
  • In verschiedenen Ausführungsformen kann das Parallelverarbeitungs-Subsystem 112 mit einem oder mehreren anderen der anderen Elemente von 1 integriert sein, um ein einziges System zu bilden. Beispielsweise kann das Parallelverarbeitungs-Subsystem 112 mit der CPU 102 und anderen Verbindungsschaltkreisen auf einem einzigen Chip integriert sein, um ein System on Chip (SoC) zu bilden.
  • Es versteht sich, dass das hierin gezeigte System nur beispielhaft ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von CPUs 102 und der Anzahl von Parallelverarbeitungs-Teilsystemen 112, kann nach Wunsch geändert werden. In einigen Ausführungsformen könnte beispielsweise der Systemspeicher 104 direkt und nicht über die Speicherbrücke 105 mit der CPU 102 verbunden sein, und würden andere Vorrichtungen über die Speicherbrücke 105 und die CPU 102 mit dem Systemspeicher 104 kommunizieren. In anderen alternativen Topologien kann das Parallelverarbeitungs-Subsystem 112 mit der E/A-Brücke 107 oder direkt mit der CPU 102 verbunden sein, anstatt mit der Speicherbrücke 105. In noch anderen Ausführungsformen können die E/A-Brücke 107 und die Speicherbrücke 105 in einen einzigen Chip integriert sein, anstatt als ein oder mehrere diskrete Vorrichtungen zu existieren. Schließlich können in bestimmten Ausführungsformen eine oder mehrere der in 1 dargestellten Komponenten nicht vorhanden sein. Beispielsweise könnte der Schalter 116 entfallen, und würden der Netzwerkadapter 118 und die Zusatzkarten 120, 121 direkt zu der E/A-Brücke 107 verbinden.
  • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit (PPU) 202, die in dem Parallelverarbeitungs-Subsystem 112 von 1 enthalten ist, gemäß einer Ausführungsform. Obwohl 2 eine PPU 202 zeigt, kann das Parallelverarbeitungs-Subsystem 112, wie oben erwähnt, eine beliebige Anzahl von PPUs 202 enthalten. Wie dargestellt, ist die PPU 202 mit einem lokalen Parallelverarbeitungs (PP)-Speicher 204 gekoppelt. Die PPU 202 und der PP-Speicher 204 können unter Verwendung eines oder mehrerer integrierter Schaltkreise, wie z.B. programmierbaren Prozessoren, anwendungsspezifischen integrierten Schaltkreisen (ASICs) oder Speichervorrichtungen, oder auf jede andere technisch machbare Weise implementiert sein.
  • In einigen Ausführungsformen umfasst die PPU 202 eine Grafikverarbeitungseinheit (GPU), die dazu konfiguriert sein kann, eine Grafik-Rendering-Pipeline zu implementieren, um verschiedene Operationen im Zusammenhang mit der Erzeugung von Pixeldaten auf der Grundlage von von der CPU 102 und/oder dem Systemspeicher 104 gelieferten Grafikdaten durchzuführen. Bei der Verarbeitung von Grafikdaten kann der PP-Speicher 204 als Grafikspeicher verwendet werden, der einen oder mehrere herkömmliche Bild- bzw. Framepuffer und bei Bedarf auch ein oder mehrere andere Renderziele speichert. Der PP-Speicher 204 kann unter anderem dazu verwendet werden, Pixeldaten zu speichern und zu aktualisieren und endgültige Pixeldaten oder Anzeigeframes an eine Anzeigevorrichtung 110 zur Anzeige zu liefern. In einigen Ausführungsformen kann die PPU 202 auch für allgemeine Verarbeitungs- und Rechenoperationen konfiguriert sein.
  • Im Betrieb ist die CPU 102 der Hauptprozessor des Computersystems 100 und steuert und koordiniert den Betrieb anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPU 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom von Anweisungen für die PPU 202 in eine Datenstruktur (weder in 1 noch in 2 explizit dargestellt), die sich im Systemspeicher 104, im PP-Speicher 204 oder an einem anderen Speicherort, auf den sowohl die CPU 102 als auch die PPU 202 zugreifen können, befinden kann. Ein Zeiger auf die Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Befehlsstroms in der Datenstruktur einzuleiten. Die PPU 202 liest die Befehlsströme aus dem Schiebepuffer und führt dann Befehle asynchron relativ zum Betrieb der CPU 102 aus. In Ausführungsformen, in denen mehrere Schiebepuffer erzeugt sind, können Ausführungsprioritäten für jeden Schiebepuffer von einem Anwendungsprogramm über den Gerätetreiber 103 spezifiziert werden, um die Planung der verschiedenen Schiebepuffer zu steuern.
  • Wie ebenfalls gezeigt ist, umfasst die PPU 202 eine E/A (Eingabe/Ausgabe)-Einheit 205, die über den Kommunikationspfad 113 und die Speicherbrücke 105 mit dem Rest des Computersystems 100 kommuniziert. Die E/A-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt auch alle eingehenden Pakete (oder andere Signale) von dem Kommunikationspfad 113 und leitet die eingehenden Pakete an die entsprechenden Komponenten der PPU 202 weiter. Beispielsweise können Befehle, die sich auf Verarbeitungsaufgaben beziehen, an eine Host-Schnittstelle 206 gerichtet werden, während Befehle, die sich auf Speicheroperationen beziehen (z.B. Lesen aus dem oder Schreiben in den PP-Speicher 204), an eine Crossbar- bzw. Kreuzschieneneinheit 210 geleitet werden können. Die Host-Schnittstelle 206 liest jeden Schiebepuffer und überträgt den in dem Schiebepuffer gespeicherten Befehlsstrom an ein Frontend 212.
  • Wie vorstehend in Verbindung mit 1 erwähnt, kann die Verbindung der PPU 202 zum Rest des Computersystems 100 variiert werden. In einigen Ausführungsformen ist das Parallelverarbeitungs-Subsystem 112, das mindestens eine PPU 202 beinhaltet, als eine Steck- bzw. Zusatzkarte implementiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingesetzt werden kann. In anderen Ausführungsformen kann die PPU 202 auf einem einzigen Chip mit einer Busbrücke, wie beispielsweise der Speicherbrücke 105 oder der E/A-Brücke 107, integriert sein. In anderen Ausführungsformen wiederum können einige oder alle der Elemente der PPU 202 zusammen mit der CPU 102 in einem einzigen integrierten Schaltkreis oder System on Chip (SoC) enthalten sein.
  • Im Betrieb überträgt das Frontend 212 die von der Host-Schnittstelle 206 empfangenen Verarbeitungsaufgaben an eine Arbeitsverteilungseinheit (nicht dargestellt) innerhalb der Aufgaben-/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgabenmetadaten (TMD; Task Metadata) codiert und im Speicher abgelegt sind. Die Zeiger auf TMDs sind in einem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und durch die Frontendeinheit 212 von der Host-Schnittstelle 206 empfangen wird. Die Verarbeitungsaufgaben, die als TMDs codiert sein können, beinhalten Indizes, die den zu verarbeitenden Daten zugeordnet sind, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind. Die Zustandsparameter und Befehle könnten beispielsweise das auf den Daten auszuführende Programm definieren. Die Aufgaben-/Arbeitseinheit 207 empfängt Aufgaben vom Frontend 212 und stellt sicher, dass die GPCs 208 auf einen gültigen Zustand konfiguriert sind, bevor die von den einzelnen TMDs angegebene Verarbeitungsaufgabe eingeleitet wird. Für jede TMD kann eine Priorität festgelegt werden, die zur Planung der Ausführung der Verarbeitungsaufgabe verwendet wird. Verarbeitungsaufgaben können auch von dem Verarbeitungscluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Kopf oder dem Ende einer Liste von Verarbeitungsaufgaben (oder einer Liste von Zeigern auf die Verarbeitungsaufgaben) hinzugefügt werden, wodurch eine weitere Ebene der Kontrolle über Ausführungspriorität bereitgestellt wird.
  • Die PPU 202 implementiert vorteilhaft eine hochparallele Verarbeitungsarchitektur, die auf einem Verarbeitungscluster-Array 230 basiert, das einen Satz von C Universalverarbeitungsclustern (GPCs) 208 beinhaltet, wobei C ≥ 1. Jeder GPC 208 ist in der Lage, eine große Anzahl (z.B. Hunderte oder Tausende) von Threads gleichzeitig auszuführen, wobei jeder Thread eine Instanz eines Programms ist. In verschiedenen Anwendungen können verschiedene GPCs 208 zur Verarbeitung verschiedener Programmtypen oder zur Durchführung verschiedener Arten von Berechnungen zugewiesen werden. Die Zuweisung von GPCs 208 kann in Abhängigkeit von der aus jedem Programm- oder Berechnungstyp entstehenden Arbeitslast variieren.
  • Die Speicherschnittstelle 214 umfasst einen Satz von D Partitionseinheiten 215, wobei D ≥ 1. Jede Partitionseinheit 215 ist mit einem oder mehreren dynamischen Direktzugriffsspeichern (DRAMs) 220 gekoppelt, die sich innerhalb des PPM-Speichers 204 befinden. In einer Ausführungsform ist die Anzahl von Partitionseinheiten 215 gleich der Anzahl von DRAMs 220, und ist jede Partitionseinheit 215 mit einem anderen DRAM 220 gekoppelt. In anderen Ausführungsformen kann die Anzahl von Partitionseinheiten 215 von der Anzahl von DRAMs 220 abweichen. Der Fachmann weiß, dass ein DRAM 220 durch jedes andere technisch geeignete Speichergerät ersetzt werden kann. Im Betrieb können verschiedene Renderziele, wie z.B. Texturkarten und Framepuffer, in den DRAMs 220 gespeichert werden, welches es den Partitionseinheiten 215 ermöglicht, Renderziel parallel zu schreiben, um die verfügbare Bandbreite des PP-Speichers 204 effizient zu nutzen.
  • Ein bestimmter GPC 208 kann Daten verarbeiten, die in einen beliebigen der DRAMs 220 innerhalb des PP-Speichers 204 zu schreiben sind. Die Kreuzschieneneinheit 210 ist dazu konfiguriert, die Ausgabe jedes GPC 208 an den Eingang einer beliebigen Partitionseinheit 215 oder an einen beliebigen anderen GPC 208 zur weiteren Verarbeitung zu routen. Die GPCs 208 kommunizieren über die Kreuzschieneneinheit 210 mit der Speicherschnittstelle 214, um aus verschiedenen DRAMs 220 zu lesen oder in sie zu schreiben. In einer Ausführungsform hat die Kreuzschieneneinheit 210 eine Verbindung zur E/A-Einheit 205, zusätzlich zu einer Verbindung zum PP-Speicher 204 über die Speicherschnittstelle 214, wodurch die Verarbeitungskerne innerhalb der verschiedenen GPCs 208 in die Lage versetzt werden, mit dem Systemspeicher 104 oder einem anderen, nicht zur PPU 202 lokalen Speicher zu kommunizieren. In der Ausführungsform von 2 ist die Kreuzschieneneinheit 210 direkt mit der E/A-Einheit 205 verbunden. In verschiedenen Ausführungsformen kann die Kreuzschieneneinheit 210 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Auch hier können die GPCs 208 dazu programmiert werden, Verarbeitungsaufgaben im Zusammenhang mit einer Vielzahl von Anwendungen auszuführen, einschließlich, aber nicht beschränkt auf, lineare und nichtlineare Datentransformationen, Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (z.B. Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderen Attributen von Objekten), Bildwiedergabeoperationen (z.B. Tessellationsshader-, Vertex-Shader-, Geometrie-Shader- und/oder Pixel-/Fragment-Shader-Programme), allgemeine Berechnungsoperationen, usw. Im Betrieb ist die PPU 202 dazu konfiguriert, Daten aus dem Systemspeicher 104 und/oder dem PP-Speicher 204 an eine oder mehrere On-Chip-Speichereinheiten zu übertragen, die Daten verarbeitet, und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder den PP-Speicher 204 zu schreiben. Auf die Ergebnisdaten kann dann von anderen Systemkomponenten, einschließlich der CPU 102, einer anderen PPU 202 innerhalb des Parallelverarbeitungs-Subsystems 112 oder eines anderen Parallelverarbeitungs-Subsystems 112 innerhalb des Computersystems 100 zugegriffen werden.
  • Wie vorstehend erwähnt, kann eine beliebige Anzahl von PPUs 202 in einem Parallelverarbeitungs-Subsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 auf einer einzigen Zusatzkarte bereitgestellt sein, oder können mehrere Zusatzkarten mit dem Kommunikationspfad 113 verbunden sein, oder können eine oder mehrere PPUs 202 in einen Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch sein oder sich voneinander unterscheiden. Beispielsweise können verschiedene PPUs 202 eine unterschiedliche Anzahl von Verarbeitungskernen und/oder unterschiedliche Mengen an PP-Speicher 204 haben. In Implementierungen, in denen mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, um Daten mit einem höheren Durchsatz zu verarbeiten, als dies mit einer einzelnen PPU 202 möglich ist. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert sein, einschließlich, ohne Beschränkung darauf, Desktops, Laptops, Handheld-Personal-Computer oder andere Handheld-Geräte, Server, Workstations, Spielkonsolen, eingebettete Systeme und dergleichen.
  • 3 ist ein Blockdiagramm eines GPC 208, der in der PPU 202 von 2 enthalten ist, gemäß einer Ausführungsform. Wie in 3 dargestellt, umfasst jeder GPC 208 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 208 einen Pipeline-Verwalter 305, einen oder mehrere Texturverarbeitungscluster (TPCs) 310, eine Speicherverwaltungseinheit (MMU) 345, eine Pre-Raster-Operationseinheit (PreROP) 355 und eine Arbeitsverteilungskreuzschiene 360. Es versteht sich, dass der GPC 208 von 3 anstelle der in 3 gezeigten Einheiten oder zusätzlich zu diesen auch andere Hardwareeinheiten enthalten kann.
  • Im Betrieb kann der GPC 208 dazu konfiguriert sein, eine große Anzahl von Threads parallel auszuführen, um Grafik-, allgemeine Verarbeitungs- und/oder Rechenoperationen durchzuführen. Wie hierin verwendet, bezieht sich ein „Thread“ auf eine Instanz eines bestimmten Programms, das auf einem bestimmten Satz von Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Single-Instruction, Multiple-Data (SIMD)-Anweisungsausgabetechniken verwendet, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Ausführungseinheiten bereitzustellen. In anderen Ausführungsformen werden Single-Instruction, Multiple-Thread (SIMT)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, unter Verwendung einer gemeinsamen Befehlseinheit, die dazu konfiguriert ist, Anweisungen an eine Reihe von Verarbeitungsmaschinen innerhalb des GPC 208 auszugeben. Im Gegensatz zu einer SIMD-Ausführung, bei der alle Verarbeitungsmaschinen in der Regel identische Anweisungen ausführen, ermöglicht die SIMT-Ausführung, dass verschiedene Threads leichter divergenten Ausführungspfaden durch ein gegebenes Programm folgen können. Der Fachmann versteht, dass ein SIMD-Verarbeitungsregime eine funktionale Untermenge eines SIMT-Verarbeitungsregimes repräsentiert.
  • Der Betrieb des GPC 208 wird durch den Pipeline-Verwalter 305 gesteuert. Der Pipeline-Verwalter 305 verwaltet die Konfiguration des einen oder der mehreren TPCs 310 zur Verarbeitung der dem GPC 208 zugewiesenen Aufgaben. Der Pipeline-Verwalter 305 kann auch dazu konfiguriert sein, Daten, die von einer Arbeitsverteilungseinheit (nicht dargestellt) innerhalb der Aufgaben-/Arbeitseinheit 207 empfangen werden, an geeignete logische Einheiten innerhalb des GPC 208 weiterzuleiten, wie beispielsweise an einen oder mehrere TPCs 310 zur Verarbeitung durch eine Primitive-Maschine 320 oder einen SM 325. Der Pipeline-Verwalter 305 kann auch dazu konfiguriert sein, eine Arbeitsverteilungskreuzschiene 360 zu steuern, indem er Ziele für von den TPCs 310 ausgegebene verarbeitete Daten spezifiziert.
  • Jeder TPC 310 umfasst einen M-Pipe-Controller (MPC) 315, eine Primitiv-Maschine 320, einen oder mehrere Streaming-Multiprozessoren (SMs) 325, eine Baumtraversierungseinheit bzw. Tree Traversal Unit (TTU) 330, eine Rendering-Maschine (PBRU) 335 und eine oder mehrere Textureinheiten 340.
  • Der MPC 315 steuert den Betrieb des TPC 310 und leitet die vom Pipeline-Verwalter 305 empfangenen Daten an die entsprechenden Einheiten in dem TPC 310 weiter. Beispielsweise können Daten, die einem Vertex bzw. Eck- oder Scheitelpunkt zugeordnet sind, an die Primitive-Maschine 320 weitergeleitet werden, die dazu konfiguriert ist, Vertexattribute, die dem Vertex zugeordnet sind, aus dem Speicher 204 abzurufen. Demgegenüber können Daten, die einem Shader-Programm zugeordnet sind, an einen SM 325 übertragen werden.
  • Die SMs 325 umfassen einen oder mehrere programmierbare Streaming-Prozessoren, die dazu konfiguriert sind, Aufgaben zu verarbeiten, die durch eine Anzahl von Threads repräsentiert werden. Jeder SM 325 verfügt über mehrere Threads und ist dazu konfiguriert, eine Vielzahl von Threads (z.B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig auszuführen. In einer Ausführungsform implementiert der SM 325 eine SIMD (Single-Instruction, Multiple-Data)-Architektur, bei der jeder Thread in einer Gruppe von Threads (d. h. ein Warp) dazu konfiguriert ist, einen anderen Datensatz auf der Grundlage desselben Satzes von Anweisungen zu verarbeiten. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 325 eine SIMT (Single-Instruction, Multiple Thread)-Architektur, bei der jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen anderen Datensatz auf der Grundlage desselben Satz von Anweisungen zu verarbeiten, wobei aber einzelne Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. Mit anderen Worten können dann, wenn eine Anweisung für die Gruppe von Threads zur Ausführung weitergeleitet wird, einige Threads in der Gruppe von Threads aktiv sein und die Anweisung ausführen, während andere Threads in der Gruppe von Threads inaktiv sein können und anstelle der Ausführung der Anweisung eine Nicht-Operation (NOP) durchführen.
  • Darüber hinaus umfasst jeder SM 325 eine Reihe von funktionalen Ausführungseinheiten (in 3 nicht dargestellt), wie z.B. Ausführungseinheiten und Ladespeichereinheiten. Verarbeitungsoperationen, die für eine beliebige der funktionalen Ausführungseinheiten spezifisch sind, können in einer Pipeline zusammengefasst werden, so dass eine neue Anweisung zur Ausführung ausgegeben werden kann, bevor eine vorherige Anweisung seine Ausführung abgeschlossen hat. Innerhalb eines bestimmten SMs 325 kann jede beliebige Kombination von Funktionseinheiten vorgesehen sein. In verschiedenen Ausführungsformen können die funktionalen Ausführungseinheiten dazu konfiguriert sein, eine Vielzahl verschiedener Operationen zu unterstützen, einschließlich Ganzzahl- und Gleitkommaarithmetik (z.B. Addition und Multiplikation), Vergleichsoperationen, boolesche Operationen (UND, ODER, XOR), Bitverschiebung und Berechnung verschiedener algebraischer Funktionen (z.B. planare Interpolation und trigonometrische, exponentielle und logarithmische Funktionen). Vorteilhafterweise kann ein und dieselbe funktionale Ausführungseinheit dazu konfiguriert sein, verschiedene Operationen auszuführen.
  • Obwohl in 3 nicht gezeigt, enthält jeder SM 325 einen Cache der Ebene eins bzw. Level-1 (L1)-Cache oder nutzt Platz in einem entsprechenden L1-Cache außerhalb des SMs 325, um u.a. Lade- und Speicheroperationen zu unterstützen, die von den Ausführungseinheiten durchgeführt werden. Jeder SM 325 hat darüber hinaus Zugriff auf Level-2 (L2)-Caches (nicht dargestellt), die von allen GPCs 208 in der PPU 202 gemeinsam genutzt werden. Die L2-Caches können zur Übertragung von Daten zwischen Threads verwendet werden. Schließlich haben die SMs 325 auch Zugriff auf „globalen“ Speicher außerhalb des Chips, welcher den PP-Speicher 204 und/oder den Systemspeicher 104 umfassen kann. Es versteht sich, dass jeder beliebige Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Zusätzlich kann ein L1.5-Cache (nicht dargestellt) in dem GPC 208 enthalten sein und dazu konfiguriert sein, Daten zu empfangen und zu speichern, die von dem SM 325 über die Speicherschnittstelle 214 von dem Speicher angefordert wurden. Solche Daten können, ohne Beschränkung darauf, Anweisungen, einheitliche Daten und konstante Daten beinhalten. In Ausführungsformen mit mehreren SMs 325 innerhalb des GPC 208 können die SMs 325 vorteilhaft gemeinsame Anweisungen und Daten nutzen, die in dem L1.5-Cache gespeichert sind.
  • Wie in 3 dargestellt, sind die SMs 325 mit einer Baumtraversierungseinheit (TTU) 330, einer Rendering-Maschine (PBRU) 335 und einer oder mehreren Textureinheiten 340 gekoppelt. In einigen Ausführungsformen können eine oder mehrere TTUs 330, PBRUs 335 oder Textureinheiten 340 in einem SM 325 enthalten oder in der PPU 202 implementiert sein und von einem oder mehreren GPCs 208 oder von einem oder mehreren SMs 325 gemeinsam genutzt werden.
  • In einigen Ausführungsformen ist die TTU 330 dazu konfiguriert, Baumtraversierungsoperationen durchzuführen. Baumtraversierungsoperationen können z.B. in Strahlenverfolgungsalgorithmen in der Computergrafik verwendet werden. Die TTU 330 kann jedoch für allgemeine Baumtraversierungsoperationen optimiert sein und ist nicht speziell auf Strahlenverfolgungstechniken beschränkt.
  • Eine Baumtraversierungsoperation kann jede beliebige Operation umfassen, die durch Traversieren der Knoten einer Baumdatenstruktur durchgeführt wird. Eine Baumdatenstruktur kann, ohne darauf beschränkt zu sein, einen Binärbaum, einen Octree, einen Four-Ary-Baum, einen K-D-Baum, einen Binary Space Partitioning (BSP)-Baum und einen Bounding Volume Hierarchy (BVH)-Baum umfassen. In einer Ausführungsform umfasst die Baumtraversierungsoperation eine Reihe von Anweisungen zum Schneiden einer Abfrageform mit dem Baum. Die Abfrageformen können z.B. Strahlen, Bounding Boxes bzw. Begrenzungsrahmen, Kegelstümpfe, Kegel, Kugeln und dergleichen sein. In verschiedenen Ausführungsformen kann eine Abfrageform durch eine Abfragedatenstruktur spezifiziert werden. Die Abfragedatenstruktur kann jede technisch machbare Technik zum Spezifizieren der Abfrageform enthalten, die den Baum schneiden soll. Beispielsweise kann die Abfragedatenstruktur den Anfangs- und Endpunkt eines Strahls unter Verwendung von zwei Drei-Koordinaten-Vektoren angeben. In einem anderen Beispiel kann die Abfragedatenstruktur die sechs Ebenen eines achsenausgerichteten Begrenzungsrahmens unter Verwendung von sechs 32-Bit-Fließkommakoordinaten angeben. Die verschiedenen Abfragedatenstrukturen können eine beliebige Anzahl von Feldern zum Spezifizieren der Attribute der Abfrageform enthalten.
  • Eine Art von Baumtraversierungsoperation, für die die TTU 330 optimiert werden kann, ist das Schneiden eines Strahls mit einer BVH-Datenstruktur, die jedes der geometrischen Primitive repräsentiert, die Objekte in einer 3D-Szene oder einem 3D-Modell repräsentieren. Die TTU 330 kann insbesondere bei Strahlenverfolgungsanwendungen nützlich sein, bei welchen Millionen oder sogar Milliarden von Strahlen mit den geometrischen Primitiven bzw. Grundelementen eines durch eine BVH-Datenstruktur repräsentierten 3D-Modells geschnitten werden.
  • In einigen Ausführungsformen ist die PBRU 335 eine Rendering-Maschine, die dazu konfiguriert ist, Strahlenverfolgungsoperationen und andere serielle Verarbeitungsaufgaben parallel durchzuführen. Serielle Verarbeitungsaufgaben sind Aufgaben, die typischerweise verschiedene Eingaben und verschiedene Berechnungen umfassen und daher nicht parallel von den SMs 325 verarbeitet werden können. Wie nachstehend näher beschrieben wird, beinhaltet die PBRU 335 eine Vielzahl von MIMD (Multiple Input, Multiple Data)-Verarbeitungskernen, wobei jeder Verarbeitungskern dazu konfiguriert ist, asynchron einen anderen Strahl oder eine andere Einheit serieller Verarbeitungsarbeit zu verarbeiten. Folglich kann die Vielzahl von Verarbeitungskernen eine Vielzahl von Strahlen oder andere serielle Verarbeitungsaufgaben weitgehend parallel verarbeiten. Wie in 3 dargestellt, ist die PBRU 335 sowohl mit den SMs 325 als auch mit der TTU 330 gekoppelt. Die SMs 325 und/oder die TTU 330 lagern die Strahlenverarbeitung oder andere serielle Verarbeitungsaufgaben zur effizienteren Ausführung durch die PBRU 335 an die PBRU 335 aus.
  • Ein Beispiel für eine Art von Strahlverfolgung, für die die PBRU 335 optimiert sein kann, ist die Materialschattierung. Nachdem die Position eines Schnittpunkts zwischen einem Strahl und einem Objekt in einer 3D-Szene identifiziert ist, wird eine Materialschattierung durchgeführt, um eine Farbe zu bestimmen, die der Oberfläche des Objekts an der Schnittpunktposition entspricht. Materialschattierungsberechnungen basieren auf einer Vielzahl von verschiedenen Materialeigenschaften, die für die Oberfläche des Objekts definiert sind. So können für unterschiedliche Oberflächen mit unterschiedlichen Materialeigenschaften unterschiedliche Materialschattierungsberechnungen durchgeführt werden. Als ein weiteres Beispiel ist eine zweite Art von Strahlenverfolgungsoperation, für deren Durchführung die PBRU 335 optimiert sein kann, das Wichtigkeits-Sampling. Wichtigkeits-Sampling wird durchgeführt, um eine Richtung eines sekundären Strahls zu bestimmen, der erzeugt wird, wenn ein Strahl die Oberfläche eines Objekts in einer 3D-Szene schneidet. Ähnlich wie bei der Materialschattierung basieren Wichtigkeits-Sampling-Berechnungen auf einer Vielzahl verschiedener Materialeigenschaften, die für die Oberfläche des Objekts definiert sind, und können für verschiedene Oberflächen mit unterschiedlichen Materialeigenschaften unterschiedliche Wichtigkeits-Sampling-Berechnungen durchgeführt werden. Dementsprechend kann die PBRU 335 besonders nützlich für Materialschattierungs- und Wichtigkeits-Sampling-Anwendungen sein, bei denen der Schnittpunkt von Millionen oder Milliarden von Strahlen mit Objekten in einer 3D-Szene ausgewertet wird, um entsprechende Farben bzw. Richtungen zu erzeugen.
  • In einigen Ausführungsformen sind die Textureinheiten 340 dazu konfiguriert, Texturkarten (z.B. ein 2D-Array von Texeln) aus dem Speicher 204 zu laden und die Texturkarten abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die von den SMs 325 ausgeführt werden. Die Textureinheiten 340 implementieren Texturoperationen wie z.B. Filteroperationen unter Verwendung von Mip-Maps (d.h. Texturkarten mit variierenden Detailstufen). In einer Ausführungsform beinhaltet jede TPC 310 zwei (2) Textureinheiten 340.
  • Jeder TPC 310 überträgt eine verarbeitete Aufgabe an die Arbeitsverteilungskreuzschiene 330, um die verarbeitete Aufgabe einem anderen GPC 208 zur weiteren Verarbeitung zur Verfügung zu stellen oder die verarbeitete Aufgabe in einem L2-Cache (nicht dargestellt), in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 über die Kreuzschieneneinheit 210 zu speichern. Darüber hinaus ist eine Pre-Raster-Operations (preROP)-Einheit 325 dazu konfiguriert, von den TPCs erzeugte Daten zu empfangen, Daten an eine oder mehrere Raster-Operations (ROP)-Einheiten innerhalb der Partitionseinheiten 215 weiterzuleiten, Optimierungen für die Farbmischung durchzuführen, Pixelfarbdaten zu organisieren und Adressübersetzungen durchzuführen.
  • Es versteht sich, dass die hierin beschriebene Kernarchitektur illustrativ ist und dass Variationen und Modifikationen möglich sind. Unter anderem kann eine beliebige Anzahl von Verarbeitungseinheiten, wie z.B. TPCs 310, SMs 325, TTU 330, PBRU 335, Textureinheiten 340 oder preROP-Einheiten 355, in dem GPC 208 enthalten sein. Ferner kann, wie vorstehend in Verbindung mit 2 beschrieben wurde, die PPU 202 eine beliebige Anzahl von GPCs 208 enthalten, die dazu konfiguriert sind, einander funktional ähnlich zu sein, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 eine bestimmte Verarbeitungsaufgabe erhält. Ferner arbeitet jeder GPC 208 unabhängig von den anderen GPCs 208 in der PPU 202, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen. In Anbetracht der vorstehenden Ausführungen versteht sich für den Fachmann, dass die in den 1 bis 3 beschriebene Architektur den Anwendungsbereich der vorliegenden Erfindung in keiner Weise beschränkt.
  • 4 ist ein Blockdiagramm einer PBRU 335, die in dem TPC 310 von 3 enthalten ist, gemäß einer Ausführungsform. Die PBRU 335 ist eine MIMD-Rendering-Maschine, die dazu ausgelegt ist, Strahlenverfolgungsoperationen und andere serielle Verarbeitungsaufgaben parallel auszuführen. Wie in 4 dargestellt, umfasst die PBRU 335 einen L0-Cache 410, einen Kernscheduler 420, eine Vielzahl von Verarbeitungskernen 430 und eine Vielzahl von Pipelines 440.
  • Der Kernscheduler 420 ist unter anderem dazu konfiguriert, Daten von den SMs 325 und der TTU 330 zu empfangen, den Verarbeitungskernen 430 Aufgaben zuzuweisen, den zugewiesenen Aufgaben zugeordnete Daten an die Verarbeitungskerne 430 zu senden, Anforderungen von den Verarbeitungskernen 430 zu empfangen, Anforderungen von den Verarbeitungskernen 430 zu planen und an geeignete Einheiten zu verteilen, z.B. an die Pipelines 440 und an den/die L1-Cache(s) der SMs 325, verarbeitete Daten von den Verarbeitungskernen 430 zu empfangen und verarbeitete Daten an die SMs 325 und die TTU 330 zu übertragen.
  • In einigen Ausführungsformen empfängt der Kernscheduler 420 eine Vielzahl von Strahlen von den SMs 325 und/oder der TTU 330. Jeder Strahl repräsentiert einen Pfad, der sich von einer Lichtquelle in Richtung einer Richtung innerhalb einer 3D-Szene oder 3D-Umgebung erstreckt. Darüber hinaus empfängt der Kernscheduler 420 für jeden Strahl einen Satz von Anweisungen oder eine Adresse, die dem Satz von Anweisungen entspricht, die Strahlverfolgungsoperationen entsprechen, die an dem Strahl durchzuführen sind. Beispielsweise kann der Kernscheduler 420 einen Strahl und einen Satz von Materialschattierungsanweisungen empfangen, die einer Oberfläche eines Objekts innerhalb der 3D-Szene oder -Umgebung entsprechen, die der Strahl durchschneidet. Die Materialschattierungsanweisungen basieren auf einer oder mehreren Materialeigenschaften, die der Oberfläche des Objekts zugeordnet sind, und erzeugen bei ihrer Ausführung eine Farbe, die dem Schnittpunkt des Strahls mit der Oberfläche des Objekts zugeordnet ist. Als ein weiteres Beispiel kann der Kernscheduler 420 einen Strahl und einen Satz von Wichtigkeits-Sampling-Anweisungen empfangen, die einer Oberfläche eines Objekts innerhalb der 3D-Szene oder -Umgebung entsprechen, die der Strahl schneidet. Die Wichtigkeits-Sampling-Anweisungen basieren ebenfalls auf einer oder mehreren Materialeigenschaften, die der Oberfläche des Objekts zugeordnet sind, und erzeugen bei ihrer Ausführung eine Richtung für einen sekundären Strahl, der durch den Schnitt des Strahls mit der Oberfläche des Objekts erzeugt wird.
  • Der Kernscheduler 420 weist jeden Strahl einem anderen Verarbeitungskern 430 aus der Vielzahl von Verarbeitungskernen 430 zu. Die Verarbeitungskerne 430 umfassen eine Vielzahl von MIMD-Verarbeitungskernen. Jeder Verarbeitungskern 430 arbeitet unabhängig von den anderen Verarbeitungskernen 430. Die Verarbeitungskerne 430 führen jeweils den Satz von Anweisungen für ihre zugewiesenen Strahlen aus, um einen entsprechenden Satz eines oder mehrerer Ergebnisse zu erzeugen.
  • Jeder Verarbeitungskern 430 überträgt seinen Satz von Ergebnissen an den Kernscheduler 420. Der Kernscheduler 420 empfängt die verschiedenen Sätze von Ergebnissen von den Verarbeitungskernen 430 und sendet die verschiedenen Sätze von Ergebnissen zur weiteren Verarbeitung an die SMs 325 und/oder die TTU 330 zurück. Als ein Beispiel kann ein Verarbeitungskern 430 einen Satz von Materialschattierungsanweisungen ausführen, um eine einem Strahl entsprechende Farbe zu erzeugen. Der Verarbeitungskern 430 überträgt den Strahl und die Farbe an den Kernscheduler 420, und der Kernscheduler 420 überträgt den Strahl und die Farbe an die SMs 325 und/oder die TTU 330.
  • Die Verarbeitungskerne 430 greifen auf einen L0-Cache 410 zu. Wie in 4 dargestellt, umfasst der L0-Cache 410 den Anweisungs-Cache 412 und den Textur-Cache 414. Der Anweisungs-Cache 412 speichert Anweisungen, die von den Verarbeitungskernen 430 ausgeführt werden. Jeder Verarbeitungskern 430 empfängt einen jeweiligen Satz von Anweisungen zur Ausführung und speichert den jeweiligen Satz von Anweisungen in dem Anweisungs-Cache 412 zwischen. In einigen Ausführungsformen hat jeder Anweisungssatz eine feste Größe, z.B. 32 Byte. Darüber hinaus kann ein Satz von Anweisungen eine Teilmenge eines größeren Satzes von Anweisungen sein, die von einem Verarbeitungskern 430 auszuführen sind.
  • Nachdem ein Verarbeitungskern 430 die Ausführung eines Satzes von Anweisungen beendet, fordert der Verarbeitungskern 430 den nächsten Satz von Anweisungen an, der in dem größeren Satz von Anweisungen enthalten ist. In einigen Ausführungsformen sendet der Verarbeitungskern 430 eine Anforderung an den Kernscheduler 420. Der Kernscheduler 420 fordert den nächsten Satz von Anweisungen aus einem L1-Cache eines SMs 325 an. Der SM 325 überträgt den angeforderten Satz von Anweisungen an den Kernscheduler 420. In einigen Ausführungsformen sendet der Kernscheduler 420, wenn der Kernscheduler 420 den angeforderten Satz von Anweisungen empfängt, den angeforderten Satz von Anweisungen an den Verarbeitungskern 430. In einigen Ausführungsformen speichert der Kernscheduler 420 den angeforderten Satz von Anweisungen in dem Anweisungs-Cache 412 und teilt dem Verarbeitungskern 430 mit, dass der angeforderte Satz von Anweisungen in dem Anweisungs-Cache 412 verfügbar ist.
  • Der Textur-Cache 414 speichert Texturblöcke, die von den Verarbeitungskernen 430 während der Ausführung von Anweisungen verwendet werden. Ein Texturblock umfasst eine Anordnung von Texturpixeln (Texeln), die Farbdaten enthalten, die auf Oberflächen von 3D-Objekten angewendet werden können. In einigen Ausführungsformen umfassen die Texturblöcke komprimierte Texturblöcke, die unter Verwendung eines oder mehrerer Texturkomprimierungsverfahren erzeugt wurden. Während der Ausführung eines Satzes von Anweisungen kann der Verarbeitungskern 430 einen komprimierten Texturblock laden, den komprimierten Texturblock in dem Textur-Cache 414 zwischenspeichern und ein oder mehrere Texel aus dem komprimierten Texturblock extrahieren oder decodieren. Auf den zwischengespeicherten Texturblock können andere Verarbeitungskerne 430 zugreifen, die denselben Texturblock benötigen.
  • In einigen Ausführungsformen sendet ein Verarbeitungskern 430 dann, wenn ein Verarbeitungskern 430 einen Texturblock benötigt, der sich nicht im L0-Cache 410 befindet, eine Anforderung an den Kernscheduler 420. Der Kernscheduler 420 fordert den Texturblock aus einem L1-Cache eines SM 325 an. Der SM 325 überträgt den angeforderten Texturblock an den Kernscheduler 420. In einigen Ausführungsformen sendet der Kernscheduler 420 dann, wenn er den angeforderten Texturblock empfängt, den angeforderten Texturblock an den Verarbeitungskern 430. In einigen Ausführungsformen speichert der Kernscheduler 420 den angeforderten Texturblock in dem Textur-Cache 414 und teilt dem Verarbeitungskern 430 mit, dass der angeforderte Texturblock in dem Textur-Cache 414 verfügbar ist.
  • Wenn ein Verarbeitungskern 430 eine Anforderung für einen Texturblock oder einen Satz von Anweisungen sendet, kann es sein, dass sich der Texturblock oder der Satz von Anweisungen nicht in dem L1-Cache des SM 325 befindet, d.h. ein Cache-Miss bzw. -Fehlgriff vorliegt. Falls sich der angeforderte Texturblock oder Satz von Anweisungen nicht in dem L1-Cache befindet, kann der Verarbeitungskern 430 lange darauf warten, z.B. Hunderte von Taktzyklen, dass der angeforderte Texturblock oder Satz von Anweisungen zurückgesendet wird. In einigen Ausführungsformen gibt der Verarbeitungskern 430 nach dem Abwarten einer Schwellenzahl von Taktzyklen selbst eine Strahlstopp-Anweisung aus. In einigen Ausführungsformen stellt der Kernscheduler 420 fest, dass ein Cache-Miss aufgetreten ist, oder wird von dem SM 325 darüber benachrichtigt, dass ein Cache-Miss aufgetreten ist, und gibt eine Strahlstopp-Anweisung an den Verarbeitungskern 430 aus. Im Ansprechen auf das Empfangen einer Strahlstopp-Anweisung stoppt der Verarbeitungskern 430 die Verarbeitung des Strahls und sendet den Strahl an den Kernscheduler 420.
  • In einigen Ausführungsformen beinhaltet das Senden des Strahls das Senden der Adresse des letzten Satzes von Anweisungen, die von dem Verarbeitungskern 430 ausgeführt wurden, eines Indexes innerhalb des letzten Satzes von Anweisungen der letzten Anweisung, die von dem Verarbeitungskern 430 ausgeführt wurde, und des mit dem Strahl verbundenen Stapels. Der Kernscheduler 420 sendet den Strahl an die TTU 330. In einigen Ausführungsformen speichert die TTU 330 ein temporäres Array von Strahlen. Die TTU 330 empfängt den Strahl und speichert den Strahl in dem temporären Array. Wenn die angeforderten Daten in dem L1-Cache des SM 325 verfügbar sind, sendet die TTU 330 den Strahl zurück an PBRU 335. Da der Strahl die Adresse des letzten Satzes von Anweisungen, die für den Strahl ausgeführt wurden, den Index der zuletzt ausgeführten Anweisung und den Stapel enthält, kann der Verarbeitungskern 430, wenn der Strahl an die PBRU 335 zurückgesendet und einem Verarbeitungskern 430 zugewiesen wird, die Ausführung des letzten Satzes von Anweisungen an der durch den Index angegebenen Stelle wieder aufnehmen. Auf diese Weise kann dem Verarbeitungskern 430 ein anderer Strahl zur Bearbeitung zugewiesen werden, während er auf die angeforderten Daten wartet, und kann er die Anforderung für den nächsten Satz von Anweisungen oder des Texturblocks wiederholen, nachdem der nächste Satz von Anweisungen oder der Texturblock verfügbar geworden ist.
  • Die Rechenkerne 430 haben gemeinsamen Zugriff auf eine Vielzahl von Pipelines 440. Jede Pipeline 440 ist eine CISC (Complex Instruction Set Computer)-Pipeline, die einer bestimmten festen Funktion bzw. Festfunktion entspricht. Jede Pipeline 440 ist dazu konfiguriert, Eingaben zu empfangen, die der entsprechenden Festfunktion zugeordnet sind, und die entsprechende Festfunktion an den Eingaben auszuführen, um entsprechende Ausgaben zu erzeugen. In einigen Ausführungsformen ist jede Festfunktion eine Funktion, die sich auf die Auswertung eines Materialgraphen bezieht, wie z.B. die Bestimmung der Adresse eines Texturblocks, die Extraktion eines Texels aus einem Texturblock oder die Durchführung einer Berechnung wie beispielsweise Reflexionsvermögen, spiegelnde Reflexion, Glanz und dergleichen.
  • Wie in 4 dargestellt, umfasst die Pipeline 440 eine oder mehrere ASTC_A (Adress)-Pipelines 442, eine oder mehrere ASTC_DP (Datenpfad)-Pipelines 444, eine oder mehrere GGX-Pipelines 446, eine oder mehrere Oren-Nayar-Pipelines 448, eine oder mehrere Schlick-Fresnel-Pipelines 450, eine oder mehrere Glanz-Pipelines 452, eine oder mehrere Unter-der-Oberfläche-Pipelines 454 und eine oder mehrere zellenbasierte Beleuchtungs-Pipelines 456. Obwohl in 4 bestimmte Typen von Festfunktions-Pipelines dargestellt sind, können die Pipelines 440 eine beliebige Anzahl und/oder beliebige Typen von Pipelines umfassen, die einer beliebigen Art von Festfunktionen entsprechen.
  • In einigen Ausführungsformen entspricht eine Festfunktion einer Vielzahl von Pipelines 440, einschließlich einer oder mehrerer erster Pipelines 440, die die Festfunktion ausführen, um eine oder mehrere Ausgaben zur Materialschattierung, z.B. eine Farbe, zu erzeugen, und einer oder mehrerer zweiter Pipelines 440, die die Festfunktion ausführen, um eine oder mehrere Ausgaben für das Wichtigkeits-Sampling, z.B. eine Richtung eines Sekundärstrahls, zu erzeugen.
  • Während der Ausführung eines Satzes von Anweisungen bestimmt ein Verarbeitungskern 430, dass eine Anweisung einer Festfunktion entspricht, die einer Pipeline 440 zugeordnet ist, und sendet eine Anforderung an die entsprechende Pipeline 440, die Anweisung auszuführen. In einigen Ausführungsformen umfasst das Senden der Anforderung an die entsprechende Pipeline 440 das Senden eines oder mehrerer Eingaben für die Festfunktion an die entsprechende Pipeline 440. Der Verarbeitungskern 430 entnimmt eine oder mehrere Eingaben für die Festfunktion von seinem Stapel und sendet die eine oder die mehreren Eingaben und die Anforderung für die entsprechende Pipeline 440 an den Kernscheduler 420. Der Kernscheduler 420 sendet die Anforderung und die eine oder mehreren Eingaben an die Pipeline 440. Die Pipeline 440 erzeugt eine oder mehrere Ausgaben auf der Grundlage der einen oder mehreren Eingaben und sendet die eine oder mehreren Ausgaben an den Kernscheduler 420. Der Kernscheduler 420 bestimmt fest, dass die eine oder die mehreren Ausgaben dem Verarbeitungskern 430 zugeordnet sind, der die Anforderung gesendet hat, und sendet die eine oder die mehreren Ausgaben zurück an den Verarbeitungskern 430. Der Verarbeitungskern 430 schiebt die eine oder die mehreren Ausgaben an den Anfang seines Stapels und fährt mit der nächsten Anweisung in seinem Satz von Anweisungen fort.
  • Als ein Beispiel kann ein Verarbeitungskern 430 einen Satz von Anweisungen ausführen, der eine Anweisung zur Bestimmung der Adresse eines Texturblocks enthält. Der Verarbeitungskern 430 bestimmt, dass die Anweisung zum Bestimmen der Adresse eines Texturblocks einer ASTC_A-Pipeline 442 entspricht. Im Ansprechen auf die Bestimmung, dass der Befehl der ASTC_A-Pipeline 442 entspricht, sendet der Verarbeitungskern 430 eine oder mehrere Eingaben, die mit der Bestimmung der Adresse eines Texturblocks verbunden sind, an den Kernscheduler 420, der die eine oder mehreren Eingaben an die ASTC_A-Pipeline 442 sendet. Die ASTC_A-Pipeline 442 erzeugt auf der Grundlage der einen oder mehreren Eingaben die Adresse des Texturblocks und sendet die Adresse des Texturblocks an den Kernscheduler 420. Der Kernscheduler 420 empfängt die Adresse von der ASTC_A-Pipeline 442, bestimmt, dass die Adresse dem Verarbeitungskern 430 zugeordnet ist, der die Anforderung an die ASTC_A-Pipeline 442 gesendet hat, und sendet die Adresse an den Verarbeitungskern 430. Der Verarbeitungskern 430 schiebt die Adresse des Texturblocks auf seinen Stapel.
  • In einigen Ausführungsformen sind die Pipelines 440 auch dazu konfiguriert, Anforderungen direkt von den SMs 325 zu empfangen. Während der Ausführung seines eigenen Satzes von Anweisungen kann ein SM 325 bestimmen, dass eine Anweisung eine der Pipelines 440 nutzen kann. Der SM 325 sendet einen oder mehrere Eingaben für die Festfunktion, die der Pipeline 440 entspricht, zur synchronen Ausführung an die Pipeline 440. Die Pipeline 440 erzeugt eine oder mehrere Ausgaben auf der Grundlage der einen oder der mehreren Eingaben und sendet die eine oder die mehreren Ausgaben an den SM 325. In einigen Ausführungsformen sendet die Pipeline 440 die eine oder die mehreren Ausgaben direkt an den SM 325, der die Anforderung gesendet hat. In einigen Ausführungsformen sendet die Pipeline 440 die eine oder die mehreren Ausgaben an den Kernscheduler 420. Der Kernscheduler 420 bestimmt, dass die eine oder die mehreren Ausgaben dem SM 325 zugeordnet sind, und überträgt die eine oder die mehreren Ausgaben an den SM 325.
  • In einigen Ausführungsformen empfängt der Kernscheduler 420 eine Vielzahl von Anforderungen für die Pipelines 440 von der Vielzahl der Verarbeitungskerne 430. Der Kernscheduler 420 bestimmt, wann die Anforderung von jedem Verarbeitungskern 430 an die korrekte Pipeline 440 gesendet werden kann. In einigen Ausführungsformen sendet der Kernscheduler 420 eine Anforderung pro Taktzyklus an jede Pipeline 440, z.B. jede der einen oder der mehreren ASTC_A-Pipelines 442, der einen oder der mehreren ASTC_DP-Pipelines 444, der einen oder der mehreren GGX-Pipelines 446, der einen oder der mehreren Oren-Nayar-Pipelines 448, der einen oder der mehreren Schlick-Fresnel-Pipelines 450, der einen oder der mehreren Glanz-Pipelines 452, der einen oder der mehreren Unter-der-Oberfläche-Pipelines 454 und der einen oder der mehreren zellbasierten Beleuchtungs-Pipelines 456. Der Kernscheduler 420 kann jedes technisch machbare Mittel zur Auswahl einer bestimmten Anforderung zur Weiterleitung an eine Pipeline 440 implementieren, z.B. einen Round-Robin-Planungsalgorithmus.
  • In einigen Ausführungsformen haben Anforderungen von den SMs 325 für die Pipeline 440 Vorrang vor Anforderungen von den Verarbeitungskernen 430. Wenn ein SM 325 eine Anforderung an eine Pipeline 440 sendet, wird der Kernscheduler 420 benachrichtigt, dass die Pipeline 440 eine Anforderung von dem SM 325 empfangen hat. Im Ansprechen auf den Erhalt der Benachrichtigung sendet der Kernscheduler 420 in diesem Taktzyklus keine Anforderung von einem Verarbeitungskern 430 an die Pipeline 440.
  • Obwohl Ausführungsformen hierin unter Bezugnahme auf Materialschattierungs- und Wichtigkeits-Sampling-Operationen beschrieben werden, kann die PBRU 335 auch dazu verwendet werden, andere Strahlenverfolgungsoperationen und/oder andere Arten von seriellen Verarbeitungsaufgaben durchzuführen. Darüber hinaus können zwischen der PBRU 335, den SMs 325 und der TTU 330 sowie zwischen den Elementen der PBRU 335 jede Art von technisch machbaren Daten übertragen werden, auch wenn Ausführungsformen hierin mit Bezug auf das Senden und Empfangen von Strahlen beschrieben werden.
  • Materialschattierung unter Verwendung einer Rendering-Maschine
  • Wenn ein zweidimensionales Bild einer 3D-Szene gerendert wird, wird eine Vielzahl von Strahlen erzeugt, die von einer bestimmten Lichtquelle ausgehen und sich in verschiedene Richtungen in der 3D-Szene erstrecken. Für jeden Strahl wird ein Schnittpunkt zwischen dem Strahl und einer Oberfläche eines Objekts in der 3D-Szene identifiziert. Am Schnittpunkt wird eine Materialschattierung durchgeführt, um eine Farbe zu bestimmen, die der Oberfläche des Objekts am Schnittpunkt entspricht. Die durch Materialschattierung erzeugte Farbe repräsentiert eine Farbe der Objektoberfläche, wenn sie von Licht aus der Lichtquelle, z.B. einem durch den Strahl repräsentierten Lichtstrahl, getroffen wird.
  • Eine Objektoberfläche wird unter Verwendung verschiedener Schichten von Materialeigenschaften, wie z.B. Glanz, Reflexionsvermögen, diffuses Verhalten, Lichtdurchlässigkeit, Transparenz und dergleichen, die angeben, wie Licht mit der Oberfläche des Objekts interagiert, modelliert. Jede Materialeigenschaft wird durch eine oder mehrere Berechnungen und/oder Funktionen definiert, die auf der Grundlage einer oder mehrerer Variablen und/oder eines oder mehrerer Werte, die durch eine oder mehrere andere Materialeigenschaften erzeugt werden, ausgewertet werden.
  • Ein Materialgraph kann verwendet werden, um die verschiedenen Materialeigenschaften, die der Objektoberfläche zugeordnet sind, und Beziehungen zwischen den verschiedenen Materialeigenschaften zu repräsentieren. Wenn ein Materialschattieren durchgeführt wird, werden die Berechnungen und/oder Funktionen der verschiedenen Materialeigenschaften auf der Grundlage der Eigenschaften des Strahls, wie z.B. der Ankunftsrichtung des Strahls und der Breite des Strahls am Schnittpunkt, sowie der Eigenschaften der Oberfläche des Objekts, wie z.B. der Oberflächennormale, der Schattierungsnormale, der normalisierten Tangente und/oder der UV-Koordinaten entsprechend dem Schnittpunkt, ausgewertet. Wie nachstehend in den 14-16 näher beschrieben wird, wird zur Auswertung des Materialgraphen unter Verwendung der PBRU 335 der Materialgraph in einen Satz von Materialschattierungsanweisungen kompiliert, die von der PBRU 335 ausgeführt werden können.
  • 5A ist ein Blockdiagramm, das Datenflüsse zum Durchführen einer Materialschattierung eines Strahls unter Verwendung der PBRU 335 veranschaulicht, gemäß einer Ausführungsform.
  • Wie in 5A dargestellt, sendet der SM 325 einen Strahl 510 zur Verarbeitung an die TTU 330. Die TTU 330 führt eine oder mehrere Baumtraversierungsoperationen durch, um einen Schnittpunkt zwischen dem Strahl 510 und einer Oberfläche eines Objekts innerhalb einer 3D-Szene zu bestimmen.
  • Die TTU 330 sendet den Strahl 510 an die PBRU 335, um ein Materialschattieren für den Strahl 510 durchzuführen. In einigen Ausführungsformen enthält der Strahl 510 einen Strahlenidentifizierer zur Identifizierung des Strahls 510. Typischerweise beinhaltet die Strahlenverfolgung ein Identifizieren des Schnittpunkts von Hunderten, Tausenden oder sogar Millionen von Strahlen mit Objekten in der 3D-Szene. Der Strahlenidentifizierer stellt einen Weg bereit, den Strahl zu verfolgen und zu identifizieren, während er von der TTU 330 und der PBRU 335 verarbeitet wird. In einigen Ausführungsformen berechnet die TTU 330 Werte für eine oder mehrere Variablen, die dem Strahl 510 zugeordnet sind, wie z.B. eine oder mehrere der UV-Koordinaten, die dem Schnittpunkt entsprechen, den Anteil der UV-Abdeckung an dem Schnittpunkt, den Normalenvektor der Objektoberfläche, den Normalenvektor zum Schattieren der Objektoberfläche, die Richtung des Strahls 510, die Richtung des einfallenden Lichts, und so weiter. Die TTU 330 enthält die ein oder die mehreren variablen Werte, wenn der Strahl 510 an die PBRU 335 gesendet wird. In einigen Ausführungsformen werden Werte für eine oder mehrere Variablen von dem SM 325 berechnet und in den Strahl 510 aufgenommen, wenn der Strahl 510 von dem SM 325 an die TTU 330 gesendet wird. Die TTU 330 kann einen oder mehrere der von dem SM 325 berechneten Variablenwerte enthalten, wenn der Strahl 510 an die PBRU 335 gesendet wird.
  • In einigen Ausführungsformen bestimmt die TTU 330 auf der Grundlage des Schnittpunkts einen Satz von Materialschattierungsanweisungen 520, die der Oberfläche des Objekts am Schnittpunkt entsprechen. Der Satz von Materialschattierungsanweisungen 520 umfasst Bytecode-Anweisungen, die, wenn sie von der PBRU 335 ausgeführt werden, die verschiedenen Materialeigenschaften auswerten, die in einem Materialgraphen der Objektoberfläche definiert sind, um eine Farbe zu erzeugen, die dem Strahl 510 und dem Schnittpunkt entspricht. In einigen Ausführungsformen ist der Schnittpunkt mit Daten verknüpft, die das Material angeben, das der Oberfläche des Objekts am Schnittpunkt entspricht, und/oder mit Daten, die eine Adresse des Satzes von Materialschattierungsanweisungen 520 angeben. Die TTU 330 bestimmt den Satz von Materialschattierungsanweisungen 520 auf der Grundlage der dem Schnittpunkt zugeordneten Daten.
  • In einigen Ausführungsformen sendet die TTU 330 den Satz von Materialschattierungsanweisungen 520 oder einen Teil davon zusammen mit dem Strahl 510 an die PBRU 335. In einigen Ausführungsformen sendet die TTU 330 eine Adresse, die dem Satz von Materialschattierungsanweisungen 520 entspricht. Darüber hinaus kann die TTU 330 einen Indexwert senden, der eine Position der nächsten auszuführenden Anweisung innerhalb des Satzes der Materialschattierungsanweisungen 520 angibt. Die TTU 330 kann beispielsweise einen Indexwert von 0 senden, der angibt, dass die PBRU 335 bei der ersten Anweisung in dem Satz der Materialschattierungsanweisungen 520 mit der Ausführung beginnen soll.
  • In einigen Ausführungsformen umfasst das Senden des Strahls 510 das Senden einer dem Strahl 510 entsprechenden Strahlendatenstruktur. Die Strahlendatenstruktur speichert den Strahlenidentifizierer, die Adresse des Satzes von Materialschattierungsanweisungen 520, den Index der Startanweisung innerhalb des Satzes von Materialschattierungsanweisungen 520 und einen Stapel, der die eine oder die mehreren Variablen enthält, die dem Strahl zugeordnet sind.
  • Die PBRU 335 empfängt den Strahl 510 und den Satz von Materialschattierungsanweisungen 520 und führt den Satz von Materialschattierungsanweisungen 520 aus, um eine dem Strahl 510 zugeordnete Farbe 530 zu erzeugen. Wie in 5A gezeigt ist, sendet die PBRU 335 den Strahl 510 und die Farbe 530 zur weiteren Verarbeitung an die TTU 330. In einigen Ausführungsformen speichert die PBRU 335 die Farbe 530 in dem dem Strahl 510 zugeordneten Stapel. Das Senden des Strahls 510 und der Farbe 530 an die TTU 330 umfasst das Senden des dem Strahl 510 zugeordneten Stapels. Die TTU 330 kann den Wert der Farbe 530 aus dem Stapel lesen. In einigen Ausführungsformen sendet die TTU 330 nach dem Empfangen des Strahls 510 und der Farbe 530 den Strahl 510 und die Farbe 530 zur weiteren Verarbeitung zurück an den SM 325.
  • 5B ist ein Blockdiagramm, das Datenflüsse zum Durchführen einer Materialschattierung eines Strahls unter Verwendung der PBRU 335 veranschaulicht, gemäß einer Ausführungsform.
  • Wie in 5B gezeigt ist, sendet der SM 325 einen Strahl 510 zur Verarbeitung an die TTU 330. Die TTU 330 führt eine oder mehrere Baumtraversierungsoperationen durch, um einen Schnittpunkt 540 zwischen dem Strahl 510 und einer Oberfläche eines Objekts innerhalb einer 3D-Szene zu bestimmen. Anstatt den Strahl 510 an die PBRU 335 zu senden, sendet die TTU 330 den Strahl 510 und den Schnittpunkt 540 zurück an den SM 325. Der SM 325 sendet dann den Strahl 510 an die PBRU 335, um Materialschattierungen für den Strahl 510 durchzuführen. In einigen Ausführungsformen führt der SM 325, anstatt den Strahl 510 zur Verarbeitung an die TTU 330 zu senden, eine oder mehrere Operationen zur Bestimmung des Schnittpunkts 540 durch.
  • In einigen Ausführungsformen enthält der Strahl 510 einen Strahlenidentifizierer zum Identifizieren des Strahls 510. In einigen Ausführungsformen berechnet die TTU 330 Werte für eine oder mehrere Variablen, die dem Strahl 510 zugeordnet sind, wie beispielsweise eine oder mehrere der UV-Koordinaten, die dem Schnittpunkt 540 entsprechen, den Anteil der UV-Abdeckung am Schnittpunkt 540, den Normalenvektor der Objektoberfläche, den Normalenvektor für die Schattierung der Objektoberfläche, die Richtung des Strahls 510, die Richtung des einfallenden Lichts und so weiter. Die TTU 330 enthält den einen oder die mehreren variablen Werte, wenn der Strahl 510 an den SM 325 gesendet wird, und der SM 325 enthält den einen oder die mehreren variablen Werte, wenn der Strahl 510 an die PBRU 335 gesendet wird. In einigen Ausführungsformen berechnet der SM 325 Werte für eine oder mehrere Variablen, die dem Strahl 510 zugeordnet sind, entweder nach der Bestimmung des Schnittpunkts 540 oder nach dem Empfang des Strahls 510 und des Schnittpunkts 540 von der TTU 330. Der SM 325 enthält den einen oder die mehreren Variablenwerte, wenn der Strahl 510 an die PBRU 335 gesendet wird.
  • In einigen Ausführungsformen bestimmt der SM 325, basierend auf dem Schnittpunkt 540, einen Satz von Materialschattierungsanweisungen 520, die der Oberfläche des Objekts am Schnittpunkt 540 entsprechen. In einigen Ausführungsformen sendet der SM 325 den Satz von Materialschattierungsanweisungen 520 oder einen Teil davon mit dem Strahl 510 an die PBRU 335. In einigen Ausführungsformen sendet der SM 325 eine Adresse, die dem Satz von Materialschattierungsanweisungen 520 entspricht. Zusätzlich kann der SM 325 einen Indexwert senden, der eine Position der nächsten auszuführenden Anweisung innerhalb des Satzes von Materialschattierungsanweisungen 520 angibt. Der SM 325 kann beispielsweise einen Indexwert von 0 senden, der anzeigt, dass die PBRU 335 bei der ersten Anweisung in dem Satz der Materialschattierungsanweisungen 520 mit der Ausführung beginnen soll.
  • In einigen Ausführungsformen umfasst das Senden des Strahls 510 das Senden einer dem Strahl 510 entsprechenden Strahlendatenstruktur. Die Strahlendatenstruktur speichert den Strahlenidentifizierer, die Adresse des Satzes von Materialschattierungsanweisungen 520, den Index der Startanweisung innerhalb des Satzes von Materialschattierungsanweisungen 520 und einen Stapel, der die eine oder die mehreren Variablen enthält, die dem Strahl 510 zugeordnet sind.
  • Die PBRU 335 empfängt den Strahl 510 und den Satz von Materialschattierungsanweisungen 520 und führt den Satz von Materialschattierungsanweisungen 520 aus, um eine dem Strahl 510 zugeordnete Farbe 530 zu erzeugen. Wie in 5B gezeigt ist, sendet die PBRU 335 den Strahl 510 und die Farbe 530 zur weiteren Verarbeitung an den SM 325. In einigen Ausführungsformen speichert die PBRU 335 die Farbe 530 in dem dem Strahl 510 zugeordneten Stapel. Das Senden des Strahls 510 und der Farbe 530 an den SM 325 umfasst das Senden des dem Strahl 510 zugeordneten Stapels. Der SM 325 kann den Wert der Farbe 530 aus dem Stapel lesen.
  • Es versteht sich, dass die hierin beschriebenen Operationen und Datenflüsse illustrativ sind und dass Variationen und Modifikationen möglich sind. Beispielsweise können entweder die SMs 325 oder die TTU 330 einen Schnittpunkt zwischen einem Strahl und einem Objekt in einer 3D-Szene bestimmen, dem Strahl zugeordnete variable Werte berechnen, einen Satz von Materialschattierungsanweisungen entsprechend dem Schnittpunkt bestimmen, den Strahl an die PBRU 335 übertragen und/oder den Satz von Materialschattierungsanweisungen an die PBRU 335 übertragen. In ähnlicher Weise kann die PBRU 335 ein oder mehrere Materialschattierungsergebnisse entweder an die SMs 325 oder die TTU 330 übermitteln, unabhängig davon, welche der beiden Einheiten den Strahl an die PBRU 335 gesendet hat.
  • 6 ist ein Ablaufdiagramm von Verfahrensschritten zum Durchführen eines Materialschattierens für einen Strahl unter Verwendung einer PBRU, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 602 empfängt ein Kernscheduler einer PBRU einen Strahl von einem SM oder einer TTU. Beispielsweise empfängt der Kernscheduler 420 einen Strahl 510 von dem SM 325 oder der TTU 330. In einigen Ausführungsformen empfängt der Kernscheduler 420 auch einen Satz von Materialschattierungsanweisungen von SM 325 oder TTU 330. Die Kernsteuerungseinheit 420 speichert den Satz von Materialschattierungsanweisungen in den Anweisungscache 412. In einigen Ausführungsformen empfängt der Kernscheduler 420 eine Adresse, die einem Satz von Materialschattierungsanweisungen entspricht, von dem SM 325 oder der TTU 330.
  • In einigen Ausführungsformen empfängt der Kernscheduler 420 eine Strahlendatenstruktur, die den Strahl 510 repräsentiert. Die Strahlendatenstruktur enthält beispielsweise einen Strahlenidentifizierer, der dem Strahl 510 entspricht, eine Adresse eines Satzes von Materialschattierungsanweisungen, einen Index der Startanweisung innerhalb des Satzes von Materialschattierungsanweisungen 520 und einen Stapel, der eine oder mehrere dem Strahl 510 zugeordnete Variablen enthält.
  • In Schritt 604 weist der Kernscheduler den Strahl einem Verarbeitungskern zu. Beispielsweise weist der Kernscheduler 420 den Strahl 510 einem bestimmten Verarbeitungskern 430 aus der Vielzahl von Verarbeitungskernen 430 zu. In einigen Ausführungsformen bestimmt der Kernscheduler 420, welchen Verarbeitungskernen 430 kein Strahl zugewiesen ist, und wählt einen Verarbeitungskern 430 aus, dem derzeit keine Strahlen zugewiesen sind. In einigen Ausführungsformen kann jeder Verarbeitungskern 430 eine Vielzahl von Strahlen verarbeiten. Der Kernscheduler 420 bestimmt für jeden Verarbeitungskern 430 eine Anzahl von Strahlen, die jedem Kern zugewiesen sind, und wählt einen Verarbeitungskern 430 aus, dem die geringste Anzahl von Strahlen zugewiesen ist.
  • In Schritt 606 führt der Verarbeitungskern den Satz von Materialschattierungsanweisungen auf der Grundlage des Strahls aus, um eine Farbe zu erzeugen. Zum Beispiel führt der Verarbeitungskern 430 den Satz von Materialschattierungsanweisungen 520 auf der Grundlage des Strahls 510 aus, um eine Farbe 530 zu erzeugen.
  • 7 ist ein Ablaufdiagramm von Verfahrensschritten zum Ausführen eines Satzes von Materialschattierungsanweisungen, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 702 empfängt ein Verarbeitungskern einer PBRU einen Strahl von einem Kernscheduler. Zum Beispiel empfängt der Verarbeitungskern 430 den Strahl 510 von dem Kernscheduler 420. In einigen Ausführungsformen umfasst das Empfangen des Strahls 510 das Empfangen eines Strahlenidentifizierers, der dem Strahl 510 entspricht, einer Adresse, die einem Satz von Materialschattierungsanweisungen 520 entspricht, eines Index einer Startanweisung innerhalb des Satzes von Materialschattierungsanweisungen und eines Stapels, der die eine oder die mehreren Variablen enthält, die dem Strahl 510 zugeordnet sind.
  • In Schritt 704 fordert der Verarbeitungskern 430 einen nächsten Satz von Materialschattierungsanweisungen an. In einigen Ausführungsformen sendet der Verarbeitungskern 430 eine Anforderung für einen Satz von Materialschattierungsanweisungen an der mit dem Strahl 510 empfangenen Befehlsadresse an die Kernscheduler 420. Der Kernscheduler 420 empfängt die Anforderung und liest oder holt den Satz von Anweisungen aus dem L1-Cache des SMs 325 an der Befehlsadresse.
  • Der Verarbeitungskern 430 wartet auf den Empfang des Satzes von Materialschattierungsanweisungen von dem Kernscheduler 420 oder auf den Empfang einer Anzeige von dem Kernscheduler 420, dass der Satz von Materialschattierungsanweisungen im Anweisungscache 412 verfügbar ist. In einigen Ausführungsformen wird dem Verarbeitungskern 430 eine Vielzahl von Strahlen zugewiesen. Der Verarbeitungskern 430 kann mit der Verarbeitung eines anderen Strahls beginnen, während er darauf wartet, den Satz von Materialschattierungsanweisungen zu empfangen oder einen Hinweis zu erhalten, dass der Satz von Materialschattierungsanweisungen verfügbar ist. Nach dem Empfang des nächsten Satzes von Materialschattierungsanweisungen, die auszuführen sind, oder nach dem Erhalt eines Hinweises, dass sich der nächste Satz von Materialschattierungsanweisungen im Anweisungscache 412 befindet, schreitet das Verfahren zu Schritt 706 fort.
  • In einigen Ausführungsformen speichert der Kernscheduler 420 dann, wenn der Kernscheduler einen Satz von Materialschattierungsanweisungen mit Strahl 510 empfangen hat, den Satz von Materialschattierungsanweisungen in dem Anweisungscache 412 oder sendet den Satz von Materialschattierungsanweisungen mit dem Strahl 510 an den Verarbeitungskern 430. Der Verarbeitungskern 430 kann bestimmen, dass ein nächster Satz von Materialschattierungsanweisungen verfügbar ist, und zu Schritt 706 fortschreiten, ohne zusätzliche Anweisungen anzufordern.
  • In Schritt 706 decodiert der Verarbeitungskern 430 die nächste Anweisung in dem Satz von Materialschattierungsanweisungen. Darüber hinaus decodiert der Verarbeitungskern 430 alle Unmittelbaren, die auf die nächste Anweisung folgen. In einigen Ausführungsformen bestimmt der Verarbeitungskern 430 die nächste Anweisung in dem Satz von Materialschattierungsanweisungen auf der Grundlage eines Indexwerts, der die nächste Anweisung innerhalb des Satzes von Materialschattierungsanweisungen angibt. Der Verarbeitungskern 430 decodiert die Anweisung an der durch den Indexwert angegebenen Stelle innerhalb des Satzes von Materialschattierungsanweisungen. Der Verarbeitungskern 430 führt eine oder mehrere verschiedene Aktionen in Abhängigkeit von der nächsten Anweisung aus.
  • Falls die nächste Anweisung eine Strahlstopp-Anweisung ist, dann stoppt der Verarbeitungskern in Schritt 708 die Ausführung von Materialschattierungsanweisungen für den Strahl und sendet den Strahl an den Kernscheduler. Beispielsweise sendet der Verarbeitungskern 430 den Strahl 510 an den Kernscheduler 420. Falls der Verarbeitungskern 430 eine Farbe 530 erzeugt hat, sendet der Verarbeitungskern 430 auch die Farbe 530 an den Kernscheduler 420.
  • In einigen Ausführungsformen beinhaltet das Senden des Strahls 510 an den Kernscheduler 420 das Senden des Stapels für den Strahl 510. Falls der Verarbeitungskern 430 eine Farbe 530 erzeugt hat, dann wird die Farbe 530 oben auf dem Stapel für Strahl 510 gespeichert. Falls der Verarbeitungskern 430 keine Farbe 530 erzeugt hat, dann spiegelt der Stapel die Berechnungen wider, die für Strahl 510 abgeschlossen wurden.
  • In einigen Ausführungsformen umfasst das Senden des Strahls 510 das Senden einer aktualisierten Strahlendatenstruktur, die den Strahl 510 repräsentiert. Die aktualisierte Strahlendatenstruktur umfasst beispielsweise den Strahlenidentifizierer, der dem Strahl 510 entspricht, die Adresse des letzten Satzes von Materialschattierungsanweisungen, die von dem Verarbeitungskern 430 ausgeführt wurden, den Index der letzten Anweisung, innerhalb des letzten Satzes von Materialschattierungsanweisungen, die von dem Verarbeitungskern 430 ausgeführt wurde, und den dem Strahl 510 zugeordneten Stapel.
  • Falls die nächste Anweisung eine Anweisung ist, die von dem Verarbeitungskern lokal ausgeführt werden kann, dann führt der Verarbeitungskern die Anweisung in Schritt 710 lokal aus, ohne den Kernscheduler einzubeziehen. Anweisungen, die lokal ausgeführt werden können, beinhalten beispielsweise Stapeloperationen wie beispielsweise Push, Load und Store sowie Festkomma-Arithmetik wie beispielsweise Addieren, Multiplizieren und Springen. Nach der lokalen Ausführung der Anweisung schreitet der Verarbeitungskern zu der nächsten Anweisung fort, sofern verfügbar.
  • Falls die nächste Anweisung keine Anweisung ist, die von dem Verarbeitungskern lokal ausgeführt werden kann, dann sendet der Verarbeitungskern in Schritt 712 eine Anforderung an den Kernscheduler.
  • Als ein Beispiel sendet dann, wenn die Anweisung einer Festfunktion wie beispielsweise Texturadresse, Texturdatenpfad, GGX, Oren-Nayar, Schlick-Fresnel, Glanz usw. entspricht, der Verarbeitungskern 430 eine Anforderung für die entsprechende Pipeline 440 an den Kernscheduler 420. Das Senden der Anforderung an den Kernscheduler 420 kann beinhalten, dass ein oder mehrere Argumente für die Festfunktion vom Stapel genommen werden und das eine oder die mehreren Argumente in die Anforderung aufgenommen werden. Der Kernscheduler 420 sendet die Anforderung und das eine oder die mehreren Argumente an die entsprechende Pipeline 440. Die Pipeline 440 empfängt das eine oder die mehreren Argumente als eine oder mehrere Eingaben und führt die entsprechende Festfunktion an den einen oder den mehreren Eingaben aus, um eine oder mehrere Ausgaben der Festfunktion zu erzeugen. Die Pipeline 440 überträgt die eine oder die mehreren Ausgaben zurück an den Kernscheduler 420, und der Kernscheduler 420 sendet die eine oder die mehreren Ausgaben an den Verarbeitungskern 430.
  • Als ein weiteres Beispiel sendet dann, wenn die Anweisung das Lesen eines Texturblocks vorsieht, der Verarbeitungskern 430 eine Anforderung zum Lesen des Texturblocks an den Kernscheduler 420. Das Senden der Anforderung an den Kernscheduler 420 kann beinhalten, dass eine Adresse des Texturblocks vom Stapel genommen und die Adresse des Texturblocks in die Anforderung aufgenommen wird. Der Kernscheduler 420 fordert den Texturblock aus dem L1-Cache von dem SM 325 an der angegebenen Adresse an. In einigen Ausführungsformen sendet der Kernscheduler 420 den Texturblock an den Verarbeitungskern 430. In einigen Ausführungsformen speichert der Kernscheduler 420 den Texturblock in dem Textur-Cache 414 und sendet einen Hinweis an den Verarbeitungskern 430, dass der Texturblock in dem L0-Cache 410 verfügbar ist.
  • In einigen Ausführungsformen beinhaltet das Senden der Anfrage das Senden eines Identifizierers, der dem Strahl 510 entspricht, mit der Anforderung. In einigen Ausführungsformen umfasst der dem Strahl 510 entsprechende Identifizierer den dem Strahl 510 entsprechenden Strahlenidentifizierer. In einigen Ausführungsformen umfasst der dem Strahl 510 entsprechende Identifizierer einen dem Verarbeitungskern 430 entsprechenden Identifizierer. Falls dem Verarbeitungskern 430 eine Vielzahl von Strahlen zugewiesen ist, umfasst der Identifizierer auch einen Indexwert, der einem Index des Strahls 510 innerhalb der dem Verarbeitungskern 430 zugewiesenen Vielzahl von Strahlen entspricht. Wenn die eine oder die mehreren Ausgaben an den Kernscheduler 420 übertragen werden, wird der Identifizierer in die eine oder mehreren Ausgaben aufgenommen. Der Kernscheduler 420 verwendet den Identifizierer zum Bestimmen, dass die eine oder die mehreren Ausgaben an den Verarbeitungskern 430 zu senden ist.
  • Nach dem Senden der Anforderung an den Kernscheduler 420 wartet der Verarbeitungskern 430, bis der Verarbeitungskern 430 in Schritt 714 ein oder mehrere Ergebnisse von dem Kernscheduler 420 empfängt. In einigen Ausführungsformen sind dem Verarbeitungskern 430 eine Vielzahl von Strahlen zugewiesen. Der Verarbeitungskern 430 kann mit der Verarbeitung eines anderen Strahls beginnen, während er auf den Empfang des einen oder der mehreren Ergebnisse wartet, und zu Schritt 714 zurückkehren, nachdem er das eine oder die mehreren Ergebnisse von dem Kernscheduler 420 empfangen hat. Falls das eine oder die mehreren Ergebnisse einen oder mehrere Werte enthalten, wie z.B. einen oder mehrere von einer Pipeline 440 erzeugte Werte, dann schiebt der Verarbeitungskern 430 den einen oder die mehreren Werte auf den Stapel. Falls das eine oder die mehreren Ergebnisse einen Texturblock enthalten, speichert der Verarbeitungskern 430 den Texturblock in den Textur-Cache 414. Nach dem Empfangen des einen oder der mehreren Ergebnisse von dem Kernscheduler 420 schreitet der Verarbeitungskern 430 zu der nächsten Anweisung fort, sofern verfügbar.
  • Falls keine Anweisungen mehr in dem Anweisungssatz verbleiben, der Verarbeitungskern 430 aber noch keine Strahlstopp-Anweisung erreicht und die Ausführung von Anweisungen für den Strahl gestoppt hat, dann kehrt das Verfahren zu Schritt 704 zurück, in dem der Verarbeitungskern 430 einen nächsten Satz von auszuführenden Anweisungen anfordert. Der Verarbeitungskern 430 fordert den nächsten Satz von Materialschattierungsanweisungen an der mit dem Strahl 510 empfangenen Anweisungsadresse an, die um den Index der zuletzt ausgeführten Anweisung erhöht wird.
  • Falls in dem Satz von Anweisungen Anweisungen verbleiben, dann kehrt das Verfahren zu Schritt 706 zurück, in dem der Verarbeitungskern 430 die nächste Anweisung in dem Satz von Anweisungen decodiert. In einigen Ausführungsformen enthält der Strahl 510 einen Indexwert, der die nächste Anweisung innerhalb des Satzes von Anweisungen angibt, und wird der Indexwert vor der Rückkehr zu Schritt 706 inkrementiert.
  • Zu 6 zurückkehrend empfängt, nachdem der Verarbeitungskern die Ausführung des Satzes von Materialschattierungsanweisungen beendet hat, der Kernscheduler in Schritt 608 einen Strahl und eine Farbe von dem Verarbeitungskern. Beispielsweise empfängt der Kernscheduler 420 den Strahl 510 und die Farbe 530 von dem Verarbeitungskern 430. In einigen Ausführungsformen empfängt der Kernscheduler 420 einen Stapel für den Strahl 510 von dem Verarbeitungskern 430, wobei die Farbe 530 am oberen Ende des Stapels gespeichert ist. In einigen Ausführungsformen empfängt der Kernscheduler 420 eine aktualisierte Strahlendatenstruktur, die den Strahl 510 repräsentiert, von dem Verarbeitungskern 430. Die aktualisierte Strahlendatenstruktur enthält beispielsweise den Strahlenidentifizierer, der dem Strahl 510 entspricht, die Adresse des letzten Satzes von Materialschattierungsanweisungen, die von dem Verarbeitungskern 430 ausgeführt wurden, den Index der letzten Anweisung, innerhalb des letzten Satzes von Materialschattierungsanweisungen, die von dem Verarbeitungskern 430 ausgeführt wurde, und den dem Strahl 510 zugeordneten Stapel.
  • In Schritt 610 sendet der Kernscheduler den Strahl und die Farbe zur weiteren Verarbeitung an einen SM und/oder eine TTU. Beispielsweise sendet der Kernscheduler 420 den Strahl 510 und die Farbe 530 an den SM 325 und/oder die TTU 330.
  • In einigen Ausführungsformen beendet der Verarbeitungskern 430 die Ausführung von Anweisungen für den Strahl 510, bevor eine Farbe 530 erzeugt ist. Falls beispielsweise ein Compiler bestimmt, dass eine Funktion nicht von der PBRU 335 ausgeführt werden kann, kann der Compiler, wie weiter unten im Detail erläutert, einen Satz von Anweisungen generieren, entsprechend der Funktion, die von einem SM 325 ausgeführt werden können, und eine Strahlstopp-Anweisung in dem Satz der Materialschattierungsanweisungen generieren. Wenn der SM 325 den Strahl 510 empfängt, führt der SM 325 den der Funktion entsprechenden Satz von Anweisungen aus. Beispielsweise kann der SM 325 eine benutzerdefinierte Funktion auf der Grundlage der in dem Stapel des Strahls 510 gespeicherten Werte ausführen. In einigen Ausführungsformen kann der SM 325 nach Beendigung der Ausführung des Satzes von Anweisungen entsprechend der Funktion die Ergebnisse auf den Stapel des Strahls 510 schieben, den Indexwert der nächsten auszuführenden Anweisung erhöhen und den Strahl 510 zurück an die PBRU 335 senden. Der Kernscheduler 420 empfängt den Strahl 510 und weist den Strahl 510 einem Verarbeitungskern 430 zu, um die Ausführung fortzusetzen.
  • Im Betrieb empfängt der Kernscheduler 420 eine Vielzahl von Strahlen von dem SM 325 und/oder der TTU 330. Der Kernscheduler 420 kann eine Anzahl von Strahlen gleichzeitig empfangen, und kann darüber hinaus im Laufe der Zeit weitere Strahlen empfangen. Die vorstehend in den 6 und 7 erörterten Schritte werden für jeden Strahl wiederholt, der von dem Kernscheduler 420 empfangen wird. Somit kann zu jedem beliebigen Zeitpunkt jeder Verarbeitungskern der Vielzahl von Verarbeitungskernen 430 einen jeweiligen Satz von Materialschattierungsanweisungen für einen zugewiesenen Strahl ausführen.
  • Nutzung von Festfunktions-Pipelines
  • In einigen Ausführungsformen kann ein SM 325 zusätzlich zum Senden von Aufgaben an die PBRU 335 zur asynchronen Verarbeitung durch die PBRU 335 auch synchrone Anforderungen direkt an die Pipelines 440 der PBRU 335 senden. Jede Pipeline 440 entspricht einer bestimmten Festfunktion. Jede Festfunktion entspricht einer anderen Bytecode-Anweisung, die von der PBRU 335 ausgeführt werden kann. Darüber hinaus kann jede Festfunktion einer anderen Anweisung entsprechen, die von dem SM 325 ausführbar ist. Wenn der SM 325 eine Anweisung ausführt, die einer Pipeline 440 entspricht, kann der SM 325 eine Anforderung an die Pipeline 440 senden. In einigen Ausführungsformen umfasst das Senden der Anforderung das Lesen eines oder mehrerer Argumente für die Festfunktion aus einem Register des SMs 325 und das Einfügen des einen oder der mehreren Argumente in die Anforderung. Zum Beispiel kann dann, wenn der SM 325 eine Operation durchführt, die eine Berechnung des Glanzes erfordert, der SM 325 eine Anforderung an eine Glanz-Pipeline 452 senden und die Glanz-Pipeline 452 die Berechnung durchführen lassen. Der SM 325 wartet auf ein Ergebnis, das von der Glanz-Pipeline 452 zurückgegeben wird. Die Glanz-Pipeline 452 verarbeitet die Anforderung des SMs 325 und sendet das Ergebnis an den SM 325 zurück. Der SM 325 empfängt das Ergebnis und nimmt die Operation unter Verwendung des von der Glanz-Pipeline 452 empfangenen Ergebnisses wieder auf. In einigen Ausführungsformen wird dem SM 325 eine Vielzahl von Thread-Gruppen zugewiesen, und kann der SM 325 zur Ausführung von Anweisungen für eine andere Thread-Gruppe wechseln, während er auf ein von einer Pipeline 440 zurückgegebenes Ergebnis wartet.
  • In einigen Ausführungsformen haben Anforderungen von einem SM 325 Vorrang vor Anforderungen von den Verarbeitungskernen 430 der PBRU 335. Eine Pipeline 440 empfängt und verarbeitet eine Anforderung von dem SM 325 vor dem Empfang und der Verarbeitung einer Anforderung von einem Verarbeitungskern 430. In einigen Ausführungsformen wartet dann, wenn der SM 325 eine Anforderung an eine Pipeline 440 sendet und der Kernscheduler 420 eine Anforderung für dieselbe Pipeline 440 von einem Verarbeitungskern 430 empfängt, der Kernscheduler 420, bevor er die Anforderung von dem Verarbeitungskern 430 an die Pipeline 440 sendet.
  • In einigen Ausführungsformen sind die SMs 325 mit einem Scheduler (nicht dargestellt) gekoppelt, der die Anforderungen von den SMs 325 an die Pipelines 440 plant. Falls mehrere SMs 325 eine Anforderung für dieselbe Pipeline 440 haben, bestimmt der Scheduler eine Reihenfolge für die mehreren SMs 325, um eine Anforderung an die Pipeline 440 zu senden.
  • 8 ist ein Blockdiagramm, das Datenflüsse zum Verwenden einer Pipeline 440 zum Durchführen von Operationen für einen SM 325 veranschaulicht, gemäß einer Ausführungsform.
  • Wie in 8 dargestellt, sendet ein SM 325 eine Pipeline-Anforderung 810(1) an eine Pipeline 440. Die Pipeline-Anforderung 810(1) enthält einen oder mehrere Eingaben, die einer von der Pipeline 440 implementierten festen Funktion entsprechen.
  • Der Kernscheduler 420 empfängt eine Pipeline-Anforderung 810(2) von einem Verarbeitungskern 430. Die Pipeline-Anforderung 810(2) ist ebenfalls für die Pipeline 440 bestimmt. Die Pipeline-Anforderung 810(1) von dem SM 325 hat Vorrang vor der Pipeline-Anforderung 810(2) von dem Verarbeitungskern 430.
  • In einigen Ausführungsformen wird, wenn der SM 325 die Pipeline-Anforderung 810(1) an die Pipeline 440 sendet, der Kernscheduler 420 benachrichtigt, dass die Pipeline 440 eine Anforderung von einem SM 325 empfangen hat. Beispielsweise können der SM 325 und/oder die Pipeline 440 ein Signal oder einen anderen Hinweis an den Kernscheduler 420 senden. Als ein weiteres Beispiel kann der Kernscheduler 420 die Pipeline 440 überwachen, um zu bestimmen, wann die Pipeline 440 eine Anforderung erhält. In einigen Ausführungsformen sendet dann, wenn der SM 325 eine Anforderung an die Pipeline 440 sendet, der SM 325 ebenfalls ein gültiges Signal bzw. Gültigkeitssignal an die Pipeline 440. Der Kernscheduler 420 überwacht die Pipeline, und falls das Gültigkeitssignal auf 1 gesetzt ist, bestimmt Kernscheduler 420, dass eine Anforderung an die Pipeline 440 gesendet wurde. Im Ansprechen auf die Benachrichtigung, dass die Pipeline 440 eine Anforderung von dem SM 325 empfangen hat, wartet der Kernscheduler 420 eine vorbestimmte Zeit, z.B. einen Taktzyklus, bevor er die Pipeline-Anforderung 810(2) an die Pipeline 440 sendet.
  • In einigen Ausführungsformen erhalten dann, wenn zusätzliche Anforderungen von SMs 325 von der Pipeline 440 empfangen werden, die zusätzlichen Anforderungen ebenfalls Priorität gegenüber der Anforderung von dem Verarbeitungskern 430. Der Kernscheduler 420 wartet weiterhin mit dem Senden der Pipeline-Anforderung 810(2) an die Pipeline 440 bis zu einem Taktzyklus, in dem keine Anforderungen von einem SM 325 an die Pipeline 440 gesendet wurden. In einigen Ausführungsformen können die SMs 325 Pipelineanforderungen so planen, dass Anforderungen von den Verarbeitungskernen 430 periodisch an die Pipeline 440 gesendet werden können. Beispielsweise können die SMs 325 zwischen jeder Anforderung an eine Pipeline 440 eine gewisse Zeit warten.
  • Die Pipeline 440 führt die Festfunktion an der einen oder den mehreren Eingaben aus, die in der Pipeline-Anforderung 810(1) enthalten sind, um die Pipeline-Ausgabe 820(1) zu erzeugen. Wie in 8 dargestellt, sendet die Pipeline 440 die Pipeline-Ausgabe 820(1) an den Kernscheduler 420. Der Kernscheduler 420 bestimmt, dass die Pipeline-Ausgabe 820(1) dem SM 325 zugeordnet ist und sendet die Pipeline-Ausgabe 820(1) an den SM 325. In einigen Ausführungsformen enthält jede Pipeline-Ausgabe eine Kennung bzw. einen Identifizierer oder ist einem Identifizierer zugeordnet, wie z.B. einem Strahlenidentifizierer, einem einem Verarbeitungskern 430 zugeordneten Identifizierer, oder einem dem SM 325 zugeordneten Identifizierer. Der Kernscheduler 420 bestimmt, dass die Pipeline-Ausgabe 820(1) dem SM 325 zugeordnet ist, auf der Grundlage des Identifizierers, der in der Pipeline-Ausgabe 820(1) enthalten oder ihr zugeordnet ist. Beispielsweise kann eine Pipeline-Ausgabe, die einem Prozesskern 430 zugeordnet ist, einen Strahlenidentifizierer enthalten oder einem solchen zugeordnet sein, der dem Verarbeitungskern 430 entspricht, während eine Pipeline-Ausgabe, die einem SM 325 zugeordnet ist, einen Identifizierer enthalten oder einem solchen zugeordnet sein kann, die der nicht vom gleichen Typ oder Format wie ein Strahlenidentifizierer oder ein Verarbeitungskernidentifizierer ist, oder überhaupt keinen Identifizierer enthalten oder keinem solchen zugeordnet sein kann.
  • In einigen Ausführungsformen sendet die Pipeline 440 die Pipeline-Ausgabe 820(1) nicht an den Kernscheduler 420, sondern direkt an den SM 325 zurück. In einigen Ausführungsformen schreibt die Pipeline 440 die Pipeline-Ausgabe 820(1) in eine Registerdatei des SMs 325.
  • Die Pipeline 440 führt die Festfunktion an der einen oder den mehreren Eingaben aus, die in der Pipeline-Anforderung 810(2) enthalten sind, um die Pipeline-Ausgabe 820(2) zu erzeugen. Die Pipeline 440 sendet die Pipeline-Ausgabe 820(2) an den Kernscheduler 420. Der Kernscheduler 420 bestimmt, dass die Pipeline-Ausgabe 820(2) dem Verarbeitungskern 430 zugeordnet ist, und sendet die Pipeline-Ausgabe 820(2) an den Verarbeitungskern 430. In einigen Ausführungsformen enthält jede Pipeline-Ausgabe einen Identifizierer oder ist einem Identifizierer zugeordnet, wie z.B. einem Strahlenidentifizierer, einem einem Verarbeitungskern 430 zugeordneten Identifizierer oder einem Identifizierer, der dem SM 325 zugeordnet ist. Der Kernscheduler 420 bestimmt, dass die Pipeline-Ausgabe 820(2) dem Verarbeitungskern 430 zugeordnet ist, auf der Grundlage des Identifizierers, der in der Pipeline-Ausgabe 820(2) enthalten oder ihm zugeordnet ist. Beispielsweise kann die Pipeline-Ausgabe 820(2) einen spezifischen Strahlenidentifizierer enthalten oder ihm zugeordnet sein, und kann der Kernscheduler 420 bestimmen, dass der Strahl, der dem spezifischen Strahlenidentifzierer entspricht, dem Verarbeitungskern 430 zugeordnet ist. Als ein weiteres Beispiel kann die Pipeline-Ausgabe 820(2) einen Verarbeitungskernidentifizierer enthalten oder diesem zugeordnet sein, und bestimmt der Kernscheduler 420, dass der Verarbeitungskernidentifizierer dem Verarbeitungskern 430 entspricht.
  • 9 ist ein Ablaufdiagramm von Verfahrensschritten zur Verwendung einer Pipeline der PBRU zum Durchführen von Operationen für einen SM, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 902 empfängt eine Pipeline 440 eine Anforderung von einem SM 325. Die Pipeline 440 entspricht einer bestimmten Festfunktion, und die Anforderung von dem SM 325 umfasst einen oder mehrere erste Eingaben, die der bestimmten Festfunktion entsprechen.
  • In Schritt 904 wird der Kernscheduler 420 benachrichtigt, dass die Pipeline 440 eine Anforderung von dem SM 325 empfangen hat. In einigen Ausführungsformen sendet der SM 325 und/oder die Pipeline 440 ein Signal oder eine andere Benachrichtigung an den Kernscheduler 420, um anzuzeigen, dass die Pipeline 440 eine Anforderung von dem SM 325 empfangen hat. In einigen Ausführungsformen überwacht der Kernscheduler 420 die Pipeline 440, um zu erkennen, wann die Pipeline 440 eine Anforderung empfängt. In einigen Ausführungsformen sendet dann, wenn der SM 325 eine Anforderung an die Pipeline 440 sendet, der SM 325 auch ein Gültigkeitssignal an die Pipeline 440. Der Kernscheduler 420 überwacht die Pipeline, und falls das Gültigkeitssignal auf 1 gesetzt ist, dann bestimmt der Kernscheduler 420, dass eine Anforderung an die Pipeline 440 gesendet wurde. Nach dem Bestimmen, dass die Pipeline 440 eine Anforderung von einem SM 325 empfangen hat, falls der Kernscheduler 420 eine Anforderung für dieselbe Pipeline 440 von einem Verarbeitungskern 430 empfängt, wird der Kernscheduler 420 dann warten, die Anforderung an die Pipeline 440 zu übertragen.
  • In Schritt 906 empfängt die Pipeline 440 eine Anforderung von einem Verarbeitungskern 430. Die Anforderung von dem Verarbeitungskern 430 enthält eine oder mehrere zweite Eingaben, die der Festfunktion entsprechen. In einigen Ausführungsformen wird die Anforderung von dem Verarbeitungskern 430 über den Kernscheduler 420 empfangen. Wie vorstehend beschrieben wurde, empfängt der Kernscheduler 420 die Anforderung von dem Verarbeitungskern 430 und bestimmt, wann die Anforderung von dem Verarbeitungskern 430 an die Pipeline 440 zu senden ist.
  • In Schritt 908 verarbeitet die Pipeline 440 die Anforderung von dem SM 325, um einen ersten Satz von einem oder mehreren Ergebnissen zu erzeugen. Die Verarbeitung der Anforderung von dem SM 325 umfasst die Ausführung der Festfunktion auf die eine oder die mehreren ersten Eingaben, die in der Anforderung von dem SM 325 enthalten sind.
  • In Schritt 910 sendet die Pipeline 440 den ersten Satz von einem oder mehreren Ergebnissen an den SM 325. In einigen Ausführungsformen sendet die Pipeline 440 den ersten Satz von Ergebnissen an den Kernscheduler 420. Der Kernscheduler 420 bestimmt, dass der erste Satz von Ergebnissen dem SM 325 zugeordnet ist, und überträgt den ersten Satz von Ergebnissen an den SM 325. In einigen Ausführungsformen überträgt die Pipeline 440 den ersten Satz von Ergebnissen direkt an den SM 325. In einigen Ausführungsformen schreibt die Pipeline 440 den ersten Satz von Ergebnissen in eine Registerdatei des SMs 325.
  • In Schritt 912 verarbeitet die Pipeline 440 die Anforderung von dem Verarbeitungskern 430, um einen zweiten Satz von einem oder mehreren Ergebnissen zu erzeugen. Die Verarbeitung der Anforderung von dem Verarbeitungskern 430 umfasst die Ausführung der Festfunktion auf die eine oder die mehreren zweiten Eingaben, die in der Anforderung von dem Verarbeitungskern 430 enthalten sind.
  • In Schritt 914 sendet die Pipeline 440 den zweiten Satz von einem oder mehreren Ergebnissen an den Verarbeitungskern 430. In einigen Ausführungsformen sendet die Pipeline 440 den zweiten Satz von Ergebnissen an den Kernscheduler 420. Der Kernscheduler 420 bestimmt, dass der zweite Satz von Ergebnissen dem Verarbeitungskern 430 zugeordnet ist, und überträgt den zweiten Satz von Ergebnissen an den Verarbeitungskern 430. In einigen Ausführungsformen überträgt die Pipeline 440 den zweiten Satz von Ergebnissen direkt an den Verarbeitungskern 430.
  • Extrahieren einzelner Texel aus Texturblöcken
  • Die Auswertung der verschiedenen Materialeigenschaften einer Objektoberfläche umfasst das Sampling bzw. Abtasten von Texturen, die für eine Materialeigenschaft definiert sind, und die Durchführung einer oder mehrerer Berechnungen auf der Grundlage der abgetasteten Textur. Die Textur(en) für eine Objektoberfläche sind als eine Vielzahl von Texturblöcken gespeichert. Jeder Texturblock besteht aus einer Anordnung bzw. einem Array von Texeln, die Farbdaten enthalten, die auf die Objektoberfläche angewendet werden können. In einigen Ausführungsformen entspricht jeder Texturblock einer bestimmten Mip-Ebene, wobei jede Mip-Ebene einer anderen Größe und Auflösung der Textur entspricht.
  • Um die Speichermenge und den Speicherplatz zu reduzieren, die für die Vielzahl von Texturblöcken erforderlich sind, wird jeder Texturblock unter Verwendung einer oder mehrerer Texturkomprimierungstechniken komprimiert. In einigen Ausführungsformen wird jeder Texturblock unter Verwendung von ASTC (Adaptive Scalable Texture Compression) komprimiert und gespeichert. Der Texturblock wird dekomprimiert, wenn die Werte der in dem Texturblock enthaltenen Texel benötigt werden. Normalerweise dekomprimieren Ausführungseinheiten, die zum Laden und Verarbeiten von Texturblöcken konfiguriert sind, wie z.B. eine Textureinheit 340, einen gesamten komprimierten Texturblock, um die Werte der in dem komprimierten Texturblock enthaltenen Texel zu erhalten. Da die von der PBRU 325 durchgeführten Operationen, z.B. die Materialschattierung, jedoch auf einem einzigen Schnittpunkt basieren, werden für die Operationen in der Regel nur Werte aus einem einzigen Texel benötigt.
  • 10A-C sind Blockdiagramme, die Datenflüsse zum Extrahieren eines einzelnen Texels aus einem komprimierten Texturblock unter Verwendung der PBRU 335 veranschaulichen, gemäß einer Ausführungsform. Obwohl hierin Beispiele in Bezug auf komprimierte Texturblöcke im ASTC-Format beschrieben werden, kann jedes komprimierte oder unkomprimierte Texturblockformat verwendet werden. Die spezifischen Schritte zum Extrahieren eines einzelnen Texels können je nach dem spezifischen Texturblockformat variieren. Außerdem können aufgrund der minimalen Granularität eines Lesevorgangs ein oder mehrere Texel, die das einzelne Texel umgeben, gelesen werden, aber das eine oder die mehreren Texel können unmittelbar nach dem Lesen verworfen werden.
  • Wie in 10A dargestellt, sendet ein Verarbeitungskern 430 eine Adressanforderung 1010 an den Kernscheduler 420. Der Verarbeitungskern 430 sendet die Adressanforderung 1010 Im Ansprechen auf die Ausführung eines Texturadressbefehls. In einigen Ausführungsformen entnimmt der Verarbeitungskern 430 einen oder mehrere Werte von seinem Stapel und nimmt den einen oder die mehreren Werte in die Adressanforderung 1010 auf. Der eine oder die mehreren Werte entsprechen Variablen, die bei der Bestimmung einer Texturblockadresse und/oder Texelposition verwendet werden, wie z.B. UV-Koordinaten, die dem Schnittpunkt des Strahls und der Objektoberfläche entsprechen, und der Anteil der UV-Abdeckung an dem Schnittpunkt.
  • Der Kernscheduler 420 sendet die Adressanforderung 1010 an eine Texturadress-Pipeline, wie beispielsweise die ASTC_A-Pipeline 442. Die ASTC_A-Pipeline 442 ist dazu konfiguriert, eine Festfunktion auszuführen, die eine Blockadresse 1020 eines Zieltexturblocks auf der Grundlage des einen oder der mehreren in der Adressanforderung 1010 enthaltenen Werte bestimmt. In einigen Ausführungsformen ist die ASTC_A-Pipeline 442 auch dazu konfiguriert, die Koordinaten eines Zieltexels innerhalb des Texturblocks auf der Grundlage des einen oder der mehreren in der Adressanforderung 1010 enthaltenen Werte zu bestimmen. In einigen Ausführungsformen sind eine oder mehrere andere Pipelines 440 dazu konfiguriert, die Koordinaten des Zieltexels zu bestimmen.
  • Die ASTC_A-Pipeline 442 sendet die Blockadresse 1020 an den Kernscheduler 420. In einigen Ausführungsformen sendet die ASTC_A-Pipeline 442 auch die Koordinaten des Texels an den Kernscheduler 420.
  • Der Kernscheduler 420 empfängt die Blockadresse 1020 von der ASTC_A-Pipeline 442. Darüber hinaus kann der Kernscheduler 420 auch die Texel-Koordinaten von der ASTC_A-Pipeline 442 empfangen. Der Kernscheduler 420 bestimmt, dass die Blockadresse 1020 und die Texel-Koordinaten dem Verarbeitungskern 430 zugeordnet sind, und sendet die Blockadresse 1020 und die Texel-Koordinaten an den Verarbeitungskern 430. In einigen Ausführungsformen schiebt der Verarbeitungskern 430 nach dem Empfang der Blockadresse 1020 und der Texel-Koordinaten die Blockadresse 1020 und die Texel-Koordinaten auf seinen Stapel.
  • Nachdem der Verarbeitungskern 430 die Blockadresse 1020 empfängt, fährt der Verarbeitungskern 430 mit der Ausführung der nächsten Anweisung in seinem zugewiesenen Satz von Anweisungen fort. Wenn der Verarbeitungskern 430 eine Texturleseanweisung ausführt, sendet der Verarbeitungskern eine Anforderung für einen Texturblock 1040, der sich an der Blockadresse 1020 befindet.
  • Falls der Texturblock 1040 im Textur-Cache 414 des L0-Cache 410 zwischengespeichert ist, dann überspringt der Verarbeitungskern 430 die Texturleseanweisung und fährt mit der Ausführung der nächsten Anweisung in seinem zugewiesenen Satz von Anweisungen fort.
  • Falls sich der Texturblock 1040 nicht im Textur-Cache 414 befindet, dann fordert der Verarbeitungskern 430 den Texturblock 1040 aus dem L1-Cache des SMs 325 an. Wie in 10B gezeigt, sendet der Verarbeitungskern 430 eine Blockanforderung 1030 an den Kernscheduler 420. In einigen Ausführungsformen schiebt der Verarbeitungskern 430, wenn er die Blockadresse 1020 empfängt, die Blockadresse 1020 auf seinen Stapel. Bei der Ausführung der Texturleseanweisung holt der Verarbeitungskern 430 die Blockadresse 1020 von seinem Stapel auf und fügt die Blockadresse 1020 der Block-anforderung 1030 hinzu.
  • Der Kernscheduler 420 sendet die Blockanforderung 1030 und die Blockadresse 1020 an den SM 325. Im Ansprechen auf den Empfang der Blockanforderung 1030 sendet der SM 325 den Texturblock 1040, der unter der Blockadresse 1020 gespeichert ist, an den Kernscheduler 420. Der Kernscheduler 420 empfängt den Texturblock 1040 und bestimmt, dass der Texturblock 1040 dem Verarbeitungskern 430 zugeordnet ist. Wie in 10B gezeigt, sendet der Kernscheduler 420 den Texturblock 1040 an den Verarbeitungskern 430. Der Verarbeitungskern 430 speichert den Texturblock 1040 im Textur-Cache 414 des L0-Cache 410 und fährt dann mit der Ausführung der nächsten Anweisung in seinem zugewiesenen Satz von Anweisungen fort. In einigen Ausführungsformen speichert der Kernscheduler 420 den Texturblock 1040 im Textur-Cache 414 und teilt dem Verarbeitungskern 430 mit, dass der Texturblock 1040 im Textur-Cache 414 verfügbar ist. Der Verarbeitungskern 430 empfängt die Benachrichtigung und fährt mit der Ausführung der nächsten Anweisung in seinem zugewiesenen Satz von Anweisungen fort.
  • Wenn der Verarbeitungskern 430 eine Texturdatenpfadanweisung ausführt, sendet der Verarbeitungskern 430 eine Anforderung für ein Texel 1060, das sich an den Texel-Koordinaten (d.h. Unterkoordinaten) innerhalb des Texturblocks 1040 befindet. Wie in 10C gezeigt, sendet der Verarbeitungskern 430 eine Texel-Anforderung 1050 an den Kernscheduler 420. Der Verarbeitungskern 430 liest den Texturblock 1040 aus dem Textur-Cache 414 und fügt den Texturblock 1040 in die Texel-Anforderung 1050 ein. Außerdem holt der Verarbeitungskern 430 die Koordinaten des Texels 1060 von seinem Stapel und fügt die Texel-Koordinaten in die Texel-Anforderung 1050 ein.
  • Der Kernscheduler 420 sendet die Texel-Anforderung 1050 an eine Texel-Extraktions-Pipeline, wie beispielsweise die ASTC_DP-Pipeline 444. Die ASTC_DP-Pipeline 444 ist dazu konfiguriert, eine feste Funktion auszuführen, die ein dekomprimiertes Texel 1060 aus dem in der Texel-Anforderung enthaltenen Texturblock 1040 extrahiert, und zwar auf der Grundlage der in der Texel-Anforderung 1050 enthaltenen Texel-Koordinaten.
  • Die ASTC_DP-Pipeline 444 sendet das Texel 1060 an den Kernscheduler 420. In einigen Ausführungsformen umfasst das Extrahieren des Texels 1060 das Extrahieren der dekomprimierten RGBA-Werte (Rot, Grün, Blau und Alpha), die dem Texel 1060 entsprechen. Die ASTC_DP 444 sendet die RGBA-Werte, die dem Texel 1060 entsprechen, an den Kernscheduler 420.
  • Der Kernscheduler 420 empfängt das Texel 1060 von der ASTC_DP-Pipeline 444.
  • In einigen Ausführungsformen umfasst der Empfang des Texels 1060 den Empfang der RGBA-Werte, die dem Texel 1060 entsprechen. Der Kernscheduler 420 bestimmt, dass das Texel 1060 dem Verarbeitungskern 430 zugeordnet ist und sendet das Texel 1060 an den Verarbeitungskern 430. In einigen Ausführungsformen schiebt der Verarbeitungskern 430 nach dem Empfang des Texels 1060 das Texel 1060 auf seinen Stapel.
  • 11A ist ein Ablaufdiagramm von Verfahrensschritten zum Bestimmen einer Adresse eines Zieltexturblocks, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 1102 empfängt die ASTC_A-Pipeline 442 einen Satz von UV-Koordinaten, die einem Schnittpunkt und dem Anteil der UV-Abdeckung am Schnittpunkt entsprechen. In einigen Ausführungsformen empfängt die ASTC_A-Pipeline 442 einen Wert, der der Quadratwurzel aus dem Anteil der UV-Abdeckung entspricht, anstelle eines Werts, der dem Anteil der UV-Abdeckung entspricht.
  • In einigen Ausführungsformen empfängt die ASTC_A-Pipeline 442 auch eine oder mehrere andere Variablen, die benötigt werden, um eine Texturblockadresse zu bestimmen, wie z.B. die Startadresse für einen Satz von Texturblöcken, die einer Textur entsprechen, wobei jeder Texturblock in dem Satz von Texturblöcken einer anderen Mip-Ebene der Textur entspricht, und die Abmessungen der Textur.
  • In Schritt 1104 bestimmt die ASTC_A-Pipeline 442 eine Detailstufe bzw. Detaillierungsgrad, die bzw. der dem Schnittpunkt entspricht. In einigen Ausführungsformen bestimmt die ASTC_A-Pipeline 442 den Detaillierungsgrad auf der Grundlage der Größe des Strahls am Kreuzungspunkt. Wenn der Strahl schmal ist, dann ist ein höherer Detaillierungsgrad erforderlich, um der Textur eine höhere Auflösung zu verleihen. Wenn der Strahl breit ist, deckt er einen größeren Teil der Textur ab, so dass ein geringerer Detaillierungsgrad erforderlich ist.
  • In Schritt 1106 identifiziert die ASTC_A-Pipeline 442 einen Zieltexturblock, der dem Detaillierungsgrad entspricht. In einigen Ausführungsformen umfasst das Bestimmen eines Detaillierungsgrads das Bestimmen einer Ziel-Mip-Ebene. Der Zieltexturblock ist der Texturblock innerhalb des Satzes von Texturblöcken, der der Ziel-Mip-Ebene entspricht.
  • In Schritt 1108 bestimmt die ASTC_A-Pipeline 442 eine Adresse des Zieltexturblocks. In einigen Ausführungsformen basiert die Bestimmung der Adresse des Zieltexturblocks auf einer Startadresse des Satzes von Texturblöcken, der den Zieltexturblock enthält. Die ASTC_A-Pipeline 442 berechnet einen Offset-Wert auf der Grundlage der Ziel-Mip-Ebene und bestimmt die Adresse des Ziel-Texturblocks durch Anwenden des Offset-Werts auf die Startadresse.
  • In Schritt 1110 bestimmt die ASTC_A-Pipeline 442 die Koordinaten eines Zieltexels innerhalb des Zieltexturblocks. In einigen Ausführungsformen bestimmt die ASTC_A-Pipeline 442 die Koordinaten des Zieltexels auf der Grundlage der UV-Koordinaten, die dem Schnittpunkt und der Ziel-Mip-Ebene entsprechen. Die ASTC_A-Pipeline 442 modifiziert die UV-Koordinaten, die auf der Größe der ursprünglichen Textur basieren, um modifizierte UV-Koordinaten zu erzeugen, die auf der Größe des Texturblocks auf der Ziel-Mip-Ebene basieren.
  • In einigen Ausführungsformen kann der Betrieb der ASTC_A-Pipeline 442 bei der Bestimmung des Zieltexturblocks und der Koordinaten des Zieltexels, wie vorstehend in Bezug auf die Schritte 1104-1110 beschrieben, durch den folgenden Pseudocode dargestellt werden:
    • width_of_footprint = int(sqrt_fraction_uv_coverage * sqrt_texture_area );
    • mip_level = min( log2(width_of_footprint), coarsest_mip_level );
    • mip_block offset = Offset des ersten Blocks für die gewählte Mip-Ebene;
    • modified_u = int ( u * mip_xsize );
    • modified_v = int ( v * mip_ysize );
    • bx = modified_u / block_dimension_x;
    • by = modified_v / block_dimension_y;
    • block_address = block_set_address + mip_block_offset + bx +
    • by*mip_block_count_x;
    • texel_coord_x = modified_u - bx*block_dimension_x;
    • texel_coord_y = modified_v - by*block_dimension_y;
  • In Übereinstimmung mit dem obigen Pseudocode berechnet die ASTC_A-Pipeline 442 eine Breite des Fußabdrucks des Strahls auf der Grundlage des Anteils der UV-Abdeckung und der Größe der Textur. Die Ziel-Mip-Ebene wird auf der Grundlage der Größe des Fußabdrucks bestimmt. Wie im obigen Pseudocode gezeigt, kann die ausgewählte Mip-Ebene nicht kleiner als die gröbste Mip-Ebene sein. Eine Blockadresse des Zieltexturblocks wird auf der Grundlage der Adresse des Satzes von Blöcken, des der Mip-Ebene entsprechenden Offsetwerts, der Abmessungen des Texturblocks auf der Ziel-Mip-Ebene und der Abmessungen der ursprünglichen Textur bestimmt. Darüber hinaus berechnet die ASTC_A-Pipeline 442 die x- und y-Koordinaten des Zieltexels auf der Grundlage modifizierter uv-Koordinaten, der Abmessungen des Texturblocks auf der Ziel-Mip-Ebene und der Abmessungen der ursprünglichen Textur.
  • In Schritt 1112 erzeugt die ASTC_A-Pipeline 442 eine Ausgabe, die die Adresse des Zieltexturblocks und die Koordinaten des Zieltexels innerhalb des Zieltexturblocks enthält.
  • 11B ist ein Ablaufdiagramm von Verfahrensschritten zum Extrahieren eines Zieltexels aus einem Texturblock, ohne andere Texel in dem Texturblock zu dekomprimieren oder zu extrahieren, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 1120 empfängt die ASTC_DP-Pipeline 444 einen Texturblock und einen Satz von Texel-Koordinaten, die einem Zieltexel entsprechen. Beispielsweise empfängt die ASTC_DP-Pipeline 444 den Texturblock 1050 und die Texel-Koordinaten von dem Kernscheduler 420.
  • In einigen Ausführungsformen empfängt die ASTC_DP-Pipeline 444 auch Header-Informationen für den Texturblock. In einigen Ausführungsformen liest die ASTC_DP-Pipeline 444 den Texturblock und extrahiert Header-Informationen aus dem Texturblock. Die Header-Informationen enthalten Metadaten, die zum Extrahieren des Zieltexels aus dem Texturblock verwendet werden, wie z.B. den Blockmodus, die Positionen von Gewichten, die Positionen von Partitionen, den Farbendpunktmodus usw. Die Header-Informationen, die zum Extrahieren des Zieltexels aus dem Texturblock benötigt werden, können abhängig von dem bestimmten Texturblock variieren.
  • In einigen Ausführungsformen speichert dann, wenn der Block als „void-extent“ markiert ist, der Texturblock eine konstante Farbe. Die ASTC_DP-Pipeline 444 gibt die in dem Block gespeicherte konstante Farbe aus.
  • In Schritt 1124 identifiziert die ASTC_DP-Pipeline 444 eine Texturblockpartition innerhalb des Texturblocks, die dem Zieltexel entspricht. In einigen Ausführungsformen bestimmt die ASTC_DP-Pipeline 444 die Texturblockpartition auf der Grundlage der Koordinaten des Zieltexels.
  • In Schritt 1126 bestimmt die ASTC_DP-Pipeline 444 die Farbendpunkte für die Texturblockpartition. In einigen Ausführungsformen bestimmt die ASTC_DP-Pipeline 444 einen der Partition entsprechenden Farbendpunktmodus auf der Grundlage der in den Header-Informationen für den Texturblock enthaltenen Metadaten. Die Metadaten zeigen den Farbendpunktmodus an, der für den Texturblock verwendet wird. Die ASTC_DP-Pipeline 444 decodiert die Farbendpunkte für die Texturblockpartition auf der Grundlage des Farbendpunktmodus.
  • In Schritt 1128 bestimmt die ASTC_DP-Pipeline 444 ein oder mehrere Farbkanalgewichte für das Zieltexel. In einigen Ausführungsformen basiert die Bestimmung der Farbkanalgewichte auf den Metadaten, die in den Header-Informationen für den Texturblock enthalten sind. Die Metadaten geben die Position(en) des einen oder der mehreren Farbkanalgewichte innerhalb des Texturblocks an. Außerdem können die Metadaten Metadaten zur Quantisierung der Gewichte enthalten, die angeben, wie die ein oder mehreren Farbkanalgewichte aus dem Texturblock zu extrahieren sind. Die ASTC_DP-Pipeline 444 extrahiert das eine oder die mehreren Farbkanalgewichte von der/den angegebenen Position(en) auf der Grundlage der Gewichtsquantisierungs-Metadaten.
  • In einigen Ausführungsformen bestimmt die ASTC_DP-Pipeline 444 zwei Farbkanalgewichte, und bestimmt die ASTC_DP-Pipeline 444 ferner, welcher Farbkanal (Rot, Grün, Blau oder Alpha) welcher der beiden Farbkanalgewichte entspricht.
  • In Schritt 1130 werden die RGBA-Werte des Zieltexels auf der Grundlage der Farbendpunkte und der Farbkanalgewichte berechnet. In einigen Ausführungsformen kann der Betriebsablauf der ASTC_DP-Pipeline 444 zur Berechnung der RGBA-Werte des Zieltexels durch den folgenden Pseudocode dargestellt werden:
 foreach color channel c (RGBA) :
      w = weights[c];

       C = 0endpoint_CO*(64-w) + endpoint_C1 *w;
       if srgb_conversion then
             C = (C >> 8) & 0xff;
             rgba[c] = srgb8_to_linear_gamma( C );
       else
             rgba[c] = (C == Oxffff) ? 1.0 : (float( C ) / float( 1 << 16 ));
       end if
 endfor
  • In Übereinstimmung mit dem obigen Pseudocode berechnet die ASTC_DP-Pipeline 444 einen Wert für jeden der RGBA-Farbkanäle. Die ASTC_DP-Pipeline 444 berechnet den Wert für jeden Farbkanal auf der Grundlage der Farbkanalgewichte und der in den obigen Schritten 1126 und 1128 bestimmten Farbendpunkte. Falls sRGB verwendet wird, konvertiert die ASTC_DP-Pipeline 444 die Werte in RGBA. Falls die ASTC_DP-Pipeline 444 keine sRGB-Konvertierung durchführt, konvertiert die ASTC_DP-Pipeline 444 eine Zahl zwischen 0 und 0xffff in einen Wert zwischen 0 und 1.
  • In Schritt 1132 erzeugt die ASTC_DP-Pipeline 444 eine Ausgabe, die die RGBA-Werte des Zieltexels enthält.
  • Mindestens ein technischer Vorteil der offenbarten Techniken gegenüber dem Stand der Technik besteht darin, dass die offenbarten Techniken ein einzelnes Texel aus einem Texturblock extrahieren können, ohne den gesamten Texturblock zu dekomprimieren. Da Berechnungen nur für ein Zieltexel durchgeführt werden müssen und andere Texel im Texturblock nicht dekomprimiert werden, kann die PBRU ein einzelnes Texel effizienter extrahieren als frühere Ansätze, die eine Ausführungseinheit zur Dekomprimierung eines gesamten Texturblocks erfordern.
  • Obwohl die obigen Schritte in Bezug auf komprimierte Texturblöcke im ASTC-Format beschrieben wurden, kann jedes beliebige komprimierte oder unkomprimierte Texturblockformat verwendet werden. Die spezifischen Schritte zum Extrahieren eines einzelnen Texels können abhängig von dem spezifischen Texturblockformat variieren. Falls beispielsweise der Texturblock ein unkomprimierter Texturblock ist, kann ein bestimmtes Texel direkt aus einem Speicherplatz gelesen werden, der dem spezifischen Texel entspricht, ohne die umliegenden Texel in dem Texturblock aus dem Speicher zu lesen.
  • Wichtigkeits-Sampling unter Verwendung einer Rendering-Maschine
  • Wenn ein zweidimensionales Bild einer 3D-Szene gerendert wird, wird eine Vielzahl von Strahlen erzeugt, die von einer bestimmten Lichtquelle ausgehen und sich in verschiedene Richtungen der 3D-Szene erstrecken. Für jeden Strahl wird ein Schnittpunkt zwischen dem Strahl und einer Oberfläche eines Objekts in der 3D-Szene identifiziert. An dem Schnittpunkt wird ein Wichtigkeits-Sampling bzw. eine Wichtigkeitsabtastung durchgeführt, um eine Richtung zu erzeugen, die einem Sekundärstrahl entspricht, der durch den Schnittpunkt des Strahls mit der Objektoberfläche entsteht. Der Sekundärstrahl geht von dem Schnittpunkt aus und erstreckt sich in die Richtung, die durch das Wichtigkeits-Sampling erzeugt wurde. Sekundärstrahlen können z.B. Schatten, Reflexionen, Brechungen usw. repräsentieren, die entstehen, wenn die Objektoberfläche von Licht aus der Lichtquelle, z.B. einem durch den Strahl dargestellten Lichtstrahl, oder von anderen Sekundärstrahlen getroffen wird.
  • Wie vorstehend erörtert wurde, wird eine Objektoberfläche unter Verwendung verschiedener Schichten von Materialeigenschaften, wie z.B. Glanz, Reflexionsvermögen, diffuses Verhalten, Lichtdurchlässigkeit, Transparenz usw., die angeben, wie Licht mit der Oberfläche des Objekts interagiert. modelliert. Jede Materialeigenschaft wird durch eine oder mehrere Berechnungen und/oder Funktionen definiert, die auf der Grundlage einer oder mehrerer Variablen und/oder eines oder mehrerer Werte ausgewertet werden, die durch eine oder mehrere andere Materialeigenschaften erzeugt werden.
  • Ein Materialgraph kann verwendet werden, um die verschiedenen Materialeigenschaften, die der Objektoberfläche zugeordnet sind, und die Beziehungen zwischen den verschiedenen Materialeigenschaften darzustellen. Wenn ein Wichtigkeits-Sampling durchgeführt wird, wird eine bestimmte Materialeigenschaft zufällig aus den verschiedenen Materialeigenschaften ausgewählt, und werden die Berechnungen und/oder Funktionen der bestimmten Materialeigenschaft ausgewertet, um eine Richtung für einen Sekundärstrahl zu erzeugen. Wie in den 14-16 näher beschrieben, wird zur Durchführung eines Wichtigkeits-Samplings auf der Grundlage des Materialgraphen unter Verwendung der PBRU 335 der Materialgraph in einen Satz von Wichtigkeits-Sampling-Anweisungen kompiliert, die von der PBRU 335 ausgeführt werden können.
  • 12 ist ein Blockdiagramm zur Veranschaulichung von Datenflüssen zum Durchführen von Wichtigkeits-Sampling für einen Strahl unter Verwendung der PBRU 335, gemäß einer Ausführungsform.
  • Wie in 12 dargestellt, sendet der SM 325 einen Strahl 1210 an die PBRU 335, um für den Strahl 1210 ein Wichtigkeits-Sampling durchzuführen. In einigen Ausführungsformen beinhaltet der Strahl 1210 einen Strahlenidentifizierer zum Identifizieren des Strahls 1210. In einigen Ausführungsformen berechnet oder empfängt der SM 325 Werte für eine oder mehrere Variablen, die dem Strahl 1210 zugeordnet sind. Der SM 325 schließt die ein oder mehreren Variablenwerte ein, wenn er den Strahl 1210 an die PBRU 335 sendet.
  • In einigen Ausführungsformen bestimmt der SM 325 auf der Grundlage eines Schnittpunkts zwischen dem Strahl 1210 und einer Oberfläche eines Objekts in einer 3D-Szene einen Satz von Wichtigkeits-Sampling-Anweisungen 1220, die der Oberfläche des Objekts an dem Schnittpunkt entsprechen. In einigen Ausführungsformen sendet der SM 325 den Satz von Wichtigkeits-Sampling-Anweisungen 1220 oder einen Teil davon mit dem Strahl 1210 an die PBRU 335. In einigen Ausführungsformen sendet der SM 325 eine Adresse, die dem Satz von Wichtigkeits-Sampling-Anweisungen 1220 entspricht. Zusätzlich kann der SM 325 einen Indexwert senden, der eine Position der nächsten auszuführenden Anweisung innerhalb des Satzes von Wichtigkeits-Sampling-Anweisungen 1220 angibt. Der SM 325 kann beispielsweise einen Indexwert von 0 senden, der angibt, dass die PBRU 335 mit der Ausführung bei der ersten Anweisung in dem Satz der Wichtigkeits-Sampling-Anweisungen 1220 beginnen soll.
  • In einigen Ausführungsformen umfasst das Senden des Strahls 1210 das Senden einer dem Strahl 1210 entsprechenden Strahlendatenstruktur. Die Strahlendatenstruktur speichert den Strahlenidentifizierer, die Adresse des Satzes von Wichtigkeits-Sampling-Anweisungen 1220, den Index der Startanweisung innerhalb des Satzes von Wichtigkeits-Sampling-Anweisungen 1220 und einen Stapel, der die eine oder die mehreren Variablen enthält, die dem Strahl 1210 zugeordnet sind.
  • Die PBRU 335 empfängt den Strahl 1210 und den Satz von Wichtigkeits-Sampling-Anweisungen 1220 und führt den Satz von Wichtigkeits-Sampling-Anweisungen 1220 aus, um eine dem Strahl zugeordnete sekundäre Richtung 1230 zu erzeugen. Wie in 12 dargestellt, kann die PBRU 335 die sekundäre Richtung 1230 entweder an den SM 325 oder die TTU 330 zur weiteren Verarbeitung senden.
  • In einigen Ausführungsformen erzeugen der SM 325 und/oder die TTU 330 basierend auf der sekundären Richtung 1230 einen sekundären Strahl, der von dem Schnittpunkt ausgeht und sich in Richtung der sekundären Richtung 1230 erstreckt. Der SM 325 und/oder die TTU 330 können einen zweiten Schnittpunkt zwischen dem sekundären Strahl und einer Oberfläche eines Objekts in der 3D-Szene bestimmen und den sekundären Strahl an die PBRU 335 zur Materialschattierung und/oder Wichtigkeitsabtastung zurücksenden.
  • Es versteht sich, dass die hierin beschriebenen Betriebsabläufe und Datenflüsse illustrativ sind und dass Variationen und Modifikationen möglich sind. Beispielsweise können entweder die SMs 325 oder die TTU 330 einen Schnittpunkt zwischen einem Strahl und einem Objekt in einer 3D-Szene bestimmen, dem Strahl zugeordnete variable Werte berechnen, einen dem Schnittpunkt entsprechenden Satz von Wichtigkeits-Sampling-Anweisungen bestimmen, den Strahl an die PBRU 335 übertragen und/oder den Satz von Wichtigkeits-Sampling-Anweisungen an die PBRU 335 übertragen. In ähnlicher Weise kann die PBRU 335 die sekundäre Richtung entweder an die SMs 325 oder an die TTU 330 übermitteln, unabhängig davon, welche der beiden den Strahl an die PBRU 335 gesendet hat.
  • 13A ist ein Ablaufdiagramm von Verfahrensschritten zur Durchführung von Wichtigkeits-Sampling für einen Strahl unter Verwendung einer PBRU, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge durchzuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 1302 empfängt ein Kernscheduler einer PBRU einen Strahl von einem SM. Beispielsweise empfängt der Kernscheduler 420 einen Strahl 1210 von dem SM 325. In einigen Ausführungsformen empfängt der Kernscheduler 420 auch einen Satz von Wichtigkeits-Sampling-Anweisungen von dem SM 325. Der Kernscheduler 420 speichert den Satz von Wichtigkeits-Sampling-Anweisungen in den Anweisungs-Cache 412. In einigen Ausführungsformen empfängt der Kernscheduler 420 von dem SM 325 eine Adresse, die einem Satz von Wichtigkeits-Sampling-Anweisungen entspricht.
  • In einigen Ausführungsformen empfängt der Kernscheduler 420 eine Strahlendatenstruktur, die den Strahl 1210 repräsentiert. Die Strahlendatenstruktur enthält beispielsweise einen Strahlenidentifizierer, der dem Strahl 1210 entspricht, eine Adresse eines Satzes von Wichtigkeits-Sampling-Anweisungen 1220, einen Index der Startanweisung innerhalb des Satzes von Wichtigkeits-Sampling-Anweisungen 1220 und einen Stapel, der eine oder mehrere dem Strahl 1210 zugeordnete Variablen enthält.
  • In Schritt 1304 weist der Kernscheduler den Strahl einem Verarbeitungskern zu. Beispielsweise weist der Kernscheduler 420 den Strahl 1210 einem bestimmten Verarbeitungskern 430 aus der Vielzahl von Verarbeitungskernen 430 zu. Der Kernscheduler 420 kann bestimmen, welchen Verarbeitungskernen 430 kein Strahl zugewiesen ist, und einen Verarbeitungskern 430 auswählen, dem derzeit keine Strahlen zugewiesen sind.
  • In Schritt 1306 führt der Verarbeitungskern den Satz von Wichtigkeits-Sampling-Anweisungen auf der Grundlage des Strahls aus, um eine Richtung für einen sekundären Strahl zu erzeugen. Beispielsweise führt der Verarbeitungskern 430 den Satz von Wichtigkeits-Sampling-Anweisungen 1220 auf der Grundlage des Strahls 1210 aus, um eine Richtung 1230 zu erzeugen.
  • 13B ist ein Ablaufdiagramm von Verfahrensschritten zum Ausführen eines Satzes von Wichtigkeits-Sampling-Anweisungen, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 1-4 beschrieben werden, versteht der Fachmann, dass jedes beliebige System, das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 1322 empfängt ein Verarbeitungskern einer PBRU einen Strahl von einem Kernscheduler. Beispielsweise empfängt der Verarbeitungskern 430 denn Strahl 1210 von dem Kernscheduler 420. In einigen Ausführungsformen umfasst das Empfangen des Strahls 1210 das Empfangen eines Strahlenidentifizierers, der dem Strahl 1210 entspricht, einer Adresse, die einem Satz von Wichtigkeits-Sampling-Anweisungen 1220 entspricht, eines Index einer Startanweisung innerhalb des Satzes von Wichtigkeits-Sampling-Anweisungen 1220 und eines Stapels, der die eine oder mehrere Variablen enthält, die dem Strahl 1210 zugeordnet sind.
  • In Schritt 1324 fordert der Verarbeitungskern 430 einen nächsten Satz von Wichtigkeits-Sampling-Anweisungen an. In einigen Ausführungsformen sendet der Verarbeitungskern 430 eine Anforderung an den Kernscheduler 420 für einen Satz von Wichtigkeits-Sampling-Anweisungen an der mit dem Strahl 1210 empfangenen Anweisungsadresse. Der Verarbeitungskern 430 wartet auf den Empfang des Satzes von Wichtigkeits-Sampling-Anweisungen von dem Kernscheduler 420 oder auf den Empfang eines Hinweises von dem Kernscheduler 420, dass der Satz von Wichtigkeits-Sampling-Anweisungen in dem Befehlscache 412 verfügbar ist. Nach dem Empfangen des nächsten auszuführenden Satzes von Wichtigkeits-Sampling-Anweisungen oder nach dem Empfangen eines Hinweises, dass sich der nächste Satz von Wichtigkeits-Sampling-Anweisungen in dem Befehlscache 412 befindet, schreitet das Verfahren zu Schritt 706 fort.
  • In einigen Ausführungsformen speichert dann, wenn der Kernscheduler 420 einen Satz von Wichtigkeits-Sampling-Anweisungen mit dem Strahl 1210 empfangen hat, der Kernscheduler 420 den Satz von Wichtigkeits-Sampling-Anweisungen in dem Anweisungs-Cache 412 oder sendet den Satz von Wichtigkeits-Sampling-Anweisungen mit dem Strahl 1210 an den Verarbeitungskern 430. Der Verarbeitungskern 430 kann bestimmen, dass ein nächster Satz von Wichtigkeits-Sampling-Anweisungen verfügbar ist, und zu Schritt 706 fortschreiten, ohne zusätzliche Anweisungen anzufordern.
  • In Schritt 1326 decodiert der Verarbeitungskern 430 die nächste Anweisung in dem Satz von Wichtigkeits-Sampling-Anweisungen. Darüber hinaus decodiert der Verarbeitungskern 430 alle unmittelbaren Anweisungen, die auf die nächste Anweisung folgen. Der Verarbeitungskern 430 führt abhängig von der nächsten Anweisung eine oder mehrere unterschiedliche Aktionen aus.
  • Falls die nächste Anweisung eine Strahlstopp-Anweisung ist, dann stoppt der Verarbeitungskern in Schritt 1328 die Ausführung von Wichtigkeits-Sampling-Anweisungen für den Strahl und sendet den Strahl an den Kernscheduler. Beispielsweise sendet der Verarbeitungskern 430 den Strahl 1210 an den Kernscheduler 420. Falls der Verarbeitungskern 430 eine sekundäre Richtung 1230 erzeugt hat, dann sendet der Verarbeitungskern 430 auch die sekundäre Richtung 1230 an den Kernscheduler 420.
  • In einigen Ausführungsformen beinhaltet das Senden des Strahls 1210 an den Kernscheduler 420 das Senden des Stapels für den Strahl 1210. Falls der Verarbeitungskern 430 eine sekundäre Richtung 1330 generiert hat, dann wird die sekundäre Richtung 1230 am oberen Ende des Stapels für den Strahl 1210 gespeichert. Falls der Verarbeitungskern 430 keine Sekundärrichtung 1230 erzeugt hat, dann spiegelt der Stapel die Berechnungen wider, die für den Strahl 1210 abgeschlossen wurden.
  • In einigen Ausführungsformen beinhaltet das Senden des Strahls 1210 das Senden einer aktualisierten Strahlendatenstruktur, die den Strahl 1210 repräsentiert. Die aktualisierte Strahlendatenstruktur umfasst beispielsweise den Strahlenidentifizierer, der dem Strahl 1210 entspricht, die Adresse des letzten Satzes von Wichtigkeits-Sampling-Anweisungen, die von dem Verarbeitungskern 430 ausgeführt wurden, den Index der letzten Anweisung innerhalb des letzten Satzes von Wichtigkeits-Sampling-Anweisungen, die von dem Verarbeitungskern 430 ausgeführt wurde, und den dem Strahl 1210 zugeordneten Stapel.
  • Falls die nächste Anweisung eine Anweisung ist, die lokal von dem Verarbeitungskern ausgeführt werden kann, dann führt der Verarbeitungskern die Anweisung in Schritt 1330 lokal aus. Anweisungen, die lokal ausgeführt werden können, beinhalten beispielsweise Stapeloperationen wie Push, Load und Store sowie Festkomma-Arithmetik wie Addieren, Multiplizieren und Springen. Nach der lokalen Ausführung der Anweisung schreitet der Verarbeitungskern zu dem nächsten Befehl fort, sofern verfügbar.
  • In einigen Ausführungsformen enthält der Satz von Wichtigkeits-Sampling-Anweisungen eine Vielzahl von Fällen und eine Zufallsauswahlanweisung, die einen bestimmten Fall aus der Vielzahl von Fällen zur Ausführung auswählt. Falls die nächste Anweisung die Zufallsauswahlanweisung ist, führt der Verarbeitungskern die Zufallsauswahlanweisung aus, um den auszuführenden Fall auszuwählen. In einigen Ausführungsformen beinhaltet die Ausführung der Zufallsauswahlanweisung, dass eine Vielzahl von Gewichten vom Stapel genommen wird, wobei jedes Gewicht einem anderen Fall in der Vielzahl von Fällen entspricht, und dass eine Fallnummer auf der Grundlage der Vielzahl von Gewichten zufällig ausgewählt wird. Beispielsweise sei angenommen, dass ein erster Fall einem Gewicht w0 entspricht, ein zweiter Fall einem Gewicht w1 entspricht und ein dritter Fall einem Gewicht w2 entspricht. Die Ausführung der Zufallsauswahlanweisung beinhaltet das Addieren der Gewichte w0, w1 und w2 und das Erzeugen einer Zufallszahl zwischen 0 und der Summe der Gewichte. Falls die Zufallszahl zwischen 0 und w0 liegt, wird der erste Fall ausgewählt. Liegt die Zufallszahl zwischen w0 und der Summe von w0 und w1, so wird der zweite Fall ausgewählt. Liegt die Zufallszahl zwischen der Summe von w0 und w1 und der Summe aller Gewichte, so wird der dritte Fall ausgewählt.
  • Der Verarbeitungskern springt zu dem bestimmten Fall in der Vielzahl von Fällen, der der ausgewählten Fallnummer entspricht, und fährt mit der Ausführung der nächsten Anweisung fort, der sich innerhalb des bestimmten Falls befindet. In einigen Ausführungsformen wird jeder Fall durch eine Fallanweisung und eine Endfallanweisung gekennzeichnet. Der Verarbeitungskern kann wiederholt zu der nächsten Anweisung übergehen und die Ausführung der nächsten Anweisung überspringen, bis die korrekte Anzahl von Fall- und Endfall-Anweisungspaaren übersprungen wurde (d. h. die ausgewählte Fallzahl minus 1).
  • Falls die nächste Anweisung keine Anweisung ist, die lokal von dem Verarbeitungskern ausgeführt werden kann, dann sendet der Verarbeitungskern in Schritt 1332 eine Anforderung an den Kernscheduler. Falls beispielsweise die Anweisung für eine Festfunktion ist, wie beispielsweise Texturadresse (TTEX_A), Texturdatenpfad (TTEX_DP), GGX, Oren-Nayar, Schlick-Fresnel, Glanz usw., dann sendet der Verarbeitungskern 430 eine Anforderung für die entsprechende Pipeline 440 an den Kernscheduler 420. Für das Wichtigkeits-Sampling kann die Anweisung für eine Richtungsversion einer Festfunktion sein, welche die gleichen Berechnungen wie die reguläre Festfunktion enthält, aber eine Richtung anstelle einer Farbe erzeugt. Das Senden der Anforderung an den Kernscheduler 420 kann beinhalten, dass ein oder mehrere Argumente für die Festfunktion von dem Stapel genommen werden und das eine oder die mehreren Argumente in die Anforderung aufgenommen werden. Der Kernscheduler 420 sendet die Anforderung und das eine oder die mehreren Argumente an die entsprechende Pipeline 440. Die Pipeline 440 empfängt das eine oder die mehreren Argumente als eine oder mehrere Eingaben und führt die entsprechende Festfunktion an den einen oder mehreren Eingaben aus, um eine oder mehrere Ausgaben der Festfunktion zu erzeugen. Die Pipeline 440 überträgt die eine oder die mehreren Ausgaben zurück an den Kernscheduler 420, und der Kernscheduler 420 sendet die eine oder die mehreren Ausgaben an den Verarbeitungskern 430.
  • In einigen Ausführungsformen beinhaltet das Senden der Anforderung das Senden eines Identifizierers, der dem Strahl 1210 entspricht, mit der Anforderung. In einigen Ausführungsformen umfasst der dem Strahl 1210 entsprechende Identifizierer den dem Strahl 1210 entsprechenden Strahlenidentifizierer. In einigen Ausführungsformen umfasst der dem Strahl 1210 entsprechende Identifizierer einen dem Verarbeitungskern 430 entsprechenden Identifizierer. Falls dem Verarbeitungskern 430 eine Vielzahl von Strahlen zugewiesen ist, umfasst der Identifizierer auch einen Indexwert, der einem Index des Strahls 1210 innerhalb der dem Verarbeitungskern 430 zugewiesenen Vielzahl von Strahlen entspricht. Wenn die eine oder die mehreren Ausgaben an den Kernscheduler 420 übertragen werden, wird der Identifizierer in die eine oder mehreren Ausgaben aufgenommen. Der Kernscheduler 420 verwendet den Identifizierer, um zu bestimmen, dass die eine oder die mehreren Ausgaben an den Verarbeitungskern 430 gesendet werden sollen.
  • Nach dem Senden der Anforderung an den Kernscheduler 420 wartet der Verarbeitungskern 430, bis, in Schritt 1334, der Verarbeitungskern 430 ein oder mehrere Ergebnisse von dem Kernscheduler 420 empfängt. Falls das eine oder die mehreren Ergebnisse einen oder mehrere Werte enthalten, z.B. einen oder mehrere Werte, die von einer Pipeline 440 erzeugt wurden, dann schiebt der Verarbeitungskern 430 den einen oder die mehreren Werte auf den Stapel. Nach dem Empfangen des einen oder der mehreren Ergebnisse von dem Kernscheduler 420 fährt der Verarbeitungskern 430 mit der nächsten Anweisung fort, sofern verfügbar.
  • Falls in dem Satz von Anweisungen keine Anweisungen verbleiben, aber der Verarbeitungskern 430 keine Strahlstopp-Anweisung erreicht und die Ausführung von Anweisungen für den Strahl gestoppt hat, dann kehrt das Verfahren zu Schritt 1324 zurück, in dem der Verarbeitungskern 430 einen nächsten Satz von auszuführenden Anweisungen anfordert. Der Verarbeitungskern 430 fordert den nächsten Satz von Wichtigkeits-Sampling-Anweisungen an der mit dem Strahl 510 empfangenen Befehlsadresse an, die um den Index des zuletzt ausgeführten Befehls erhöht ist.
  • Falls in dem Satz von Anweisungen noch Anweisungen vorhanden sind, dann kehrt das Verfahren zu Schritt 706 zurück, in dem der Verarbeitungskern 430 die nächste Anweisung des Satzes von Anweisungen decodiert.
  • Zu 13A zurückkehrend, empfängt, nachdem der Verarbeitungskern die Ausführung des Satzes von Wichtigkeits-Sampling-Anweisungen beendet hat, der Kernscheduler in Schritt 1308 einen Strahl und eine sekundäre Richtung von dem Verarbeitungskern. Zum Beispiel empfängt der Kernscheduler 420 den Strahl 1210 und die sekundäre Richtung 1230 von dem Verarbeitungskern 430. In einigen Ausführungsformen empfängt der Kernscheduler 420 einen Stapel für den Strahl 1210 von dem Verarbeitungskern 430, wobei die sekundäre Richtung 1230 am oberen Ende des Stapels gespeichert wird. In einigen Ausführungsformen empfängt der Kernscheduler 420 eine aktualisierte Strahlendatenstruktur, die den Strahl 1210 repräsentiert, von dem Verarbeitungskern 430. Die aktualisierte Strahlendatenstruktur enthält beispielsweise den Strahlenidentifizierer, der dem Strahl 1210 entspricht, die Adresse des letzten Satzes von Wichtigkeits-Sampling-Anweisungen, die von dem Verarbeitungskern 430 ausgeführt wurden, den Index der letzten Anweisung innerhalb des letzten Satzes von Wichtigkeits-Sampling-Anweisungen, die von dem Verarbeitungskern 430 ausgeführt wurde, und den dem Strahl 1210 zugeordneten Stapel.
  • In Schritt 1310 sendet der Kernscheduler den Strahl und die sekundäre Richtung zur weiteren Verarbeitung an einen SM und/oder eine TTU. Zum Beispiel sendet der Kernscheduler 420 den Strahl 1210 und die sekundäre Richtung 1230 an den SM 325 und/oder die TTU 330.
  • Kompilieren von Materialgraphen
  • 14 ist ein Blockdiagramm, das eine Rechenvorrichtung 1410 zeigt, die dazu konfiguriert ist, einen oder mehrere Aspekte verschiedener Ausführungsformen zu implementieren. Wie gezeigt, umfasst die Rechenvorrichtung 1410 einen oder mehrere Prozessoren 1412, einen Speicher 1414 und einen Speicher 1416. In einigen Ausführungsformen ist die Rechenvorrichtung 1410 eine von einer Rechenvorrichtung getrennte Rechenvorrichtung, auf der sich eine PPU 202, einschließlich der PBRU 335, befindet. In anderen Ausführungsformen kann die Rechenvorrichtung 1410 dieselbe Rechenvorrichtung sein, auf der sich eine PPU 202 und eine PBRU 335 befinden, wie z.B. die in 1 dargestellte Rechenvorrichtung 100.
  • Die Rechenvorrichtung 1410 umfasst einen Server-Computer, einen Desktop-Computer, einen Laptop-Computer, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Tablet-Computer oder jede andere Art von Rechenvorrichtung, die dazu konfiguriert ist, Eingaben zu empfangen, Daten zu verarbeiten und optional Bilder anzuzeigen, und die sich zum Ausführen einer oder mehrerer Ausführungsformen eignet. Die hierin beschriebene Rechenvorrichtung 1410 ist illustrativ, und beliebige andere technisch machbare Konfigurationen fallen in den Anwendungsbereich der vorliegenden Offenbarung.
  • Der eine oder die mehreren Prozessoren 1412 umfassen beliebige geeignete Prozessoren, die als eine Zentralverarbeitungseinheit (CPU), eine Grafikverarbeitungseinheit (GPU), ein anwendungsspezifischer integrierter Schaltkreis (ASIC), ein feldprogrammierbares Gate-Array (FPGA), ein Beschleuniger für künstliche Intelligenz (KI) wie z.B. eine Tensorverarbeitungseinheit bzw. Tensor Processing Unit (TPU), eine beliebige andere Art von Verarbeitungseinheit oder eine Kombination verschiedener Verarbeitungseinheiten, wie z.B. eine CPU, die dazu konfiguriert ist, in Verbindung mit einer GPU zu arbeiten, implementiert sind. Im Allgemeinen kann es sich bei dem einen oder den mehreren Prozessoren 1412 um jede beliebige technisch machbare Hardware-Einheit handeln, die in der Lage ist, Daten zu verarbeiten und/oder Software-Anwendungen auszuführen. Ferner können im Kontext Rahmen dieser Offenbarung die in der Rechenvorrichtung 1410 dargestellten Rechenelemente einem physischen Rechensystem entsprechen (z.B. einem System in einem Rechenzentrum) oder können eine virtuelle Recheneinheit sein, die in einer Rechenwolke bzw. Computing Cloud ausgeführt wird.
  • Der Speicher 1414 umfasst nichtflüchtigen Speicher für Anwendungen und Daten und kann Festplattenlaufwerke oder Wechseldatenträger, Flash-Speichergeräte und CD-ROM, DVD-ROM, Blu-Ray, HD-DVD oder andere magnetische, optische oder Festkörperspeichergeräte umfassen. Der Materialgraph 1418 und der Compiler 1420 können in dem Speicher 114 abgelegt und während der Ausführung in den Speicher 1416 geladen werden.
  • Der Speicher 1416 umfasst ein RAM-Modul (Random Access Memory), eine Flash-Speichereinheit oder einen anderen Typ von Speichereinheit oder eine Kombination davon. Der eine oder die mehreren Prozessoren 1412 sind dazu konfiguriert, Daten aus dem Speicher 1416 zu lesen und in diesen zu schreiben. Der Speicher 1416 enthält verschiedene Softwareprogramme, die von dem einen oder den mehreren Prozessoren 1412 ausgeführt werden können, sowie Anwendungsdaten, die mit den Softwareprogrammen verbunden sind, einschließlich des Compilers 1420.
  • Wie vorstehend erörtert wurde, ist ein Materialgraph eine Diagramm- bzw. Graphenstruktur, die zur Darstellung der verschiedenen Materialeigenschaften einer Objektoberfläche und der Beziehungen zwischen den verschiedenen Materialeigenschaften verwendet wird.
  • 15 veranschaulicht einen beispielhaften Materialgraphen 1418. Wie gezeigt, umfasst der Materialgraph 1418 eine Vielzahl von Knoten. Die Vielzahl von Knoten umfasst eine Vielzahl von Materialeigenschaftsknoten 1510, die Materialeigenschaften definieren, wie z.B. Alpha-Ausschnitte, Politur, Glühen, Metall, Glas und dergleichen. Obwohl in 15 nicht dargestellt, kann jeder Materialeigenschaftsknoten 1510 eine Vielzahl von zusätzlichen Knoten umfassen, die weiter eine oder mehrere Variablen definieren, die dem Materialeigenschaftsknoten 1510 zugeordnet sind, sowie eine oder mehrere Berechnungen, die mit den Variablen durchgeführt werden, um einen oder mehrere Werte zu berechnen, die dem Materialeigenschaftsknoten 1510 entsprechen.
  • Darüber hinaus enthält die Vielzahl von Knoten eine Vielzahl von Beziehungsknoten 1520, die Beziehungen zwischen den Materialeigenschaften definieren. Zum Beispiel zeigt ein Beziehungsknoten 1522 an, dass die Materialeigenschaft diffus mit der Materialeigenschaft Haut kombiniert werden sollte. Obwohl in 15 nicht dargestellt, definiert jeder Beziehungsknoten 1522 eine oder mehrere Berechnungen, die auf der Grundlage von Werten durchgeführt werden, die den untergeordneten Knoten des Beziehungsknotens 1522 entsprechen, um einen oder mehrere Werte zu erzeugen, die dem Beziehungsknoten 1522 entsprechen.
  • Wenn ein Materialschattieren und/oder Wichtigkeits-Sampling für einen Strahl durchgeführt wird, der die Oberfläche des Objekts schneidet, werden die verschiedenen Materialeigenschaften und die Beziehungen zwischen den verschiedenen Materialeigenschaften auf der Grundlage des Strahls bewertet. Beispielsweise wird jeder Materialeigenschaftsknoten 1510 auf der Grundlage des Strahls ausgewertet, um einen oder mehrere Werte zu erzeugen, die dem Materialeigenschaftsknoten 1510 entsprechen, und wird jeder Beziehungsknoten 1522 auf der Grundlage des einen oder der mehreren für die Materialeigenschaftsknoten 1510 erzeugten Werte ausgewertet, um einen oder mehrere Werte zu erzeugen, die dem Beziehungsknoten 1522 entsprechen.
  • Typischerweise kann ein Materialgraph in eine Vielzahl verschiedener Shader-Programme kompiliert werden, wobei jedes Shader-Programm verschiedenen Abschnitten des Materialgraphen und/oder verschiedenen Parametersätzen für die verschiedenen Materialeigenschaften entspricht. Die Shader-Programme können von einem Prozessor wie beispielsweise der CPU 102 oder einem SM 325 ausgeführt werden. Da die Shader-Programme jedoch in eine Universalzweck-Maschinensprache zur Ausführung auf einer Vielzahl von Prozessoren kompiliert werden, verursachen die Shader-Programme erheblichen Overhead. Da außerdem verschiedene Abschnitte eines Materialgraphen und/oder Materialgraphen mit verschiedenen Materialeigenschaftsparametern in verschiedene Shader-Programme kompiliert werden, kann die Anzahl von Shader-Programmen, die zum Rendern einer 3D-Szene kompiliert werden müssen, im Vergleich zur Anzahl der verschiedenen Arten von Objektoberflächen in der 3D-Szene exponentiell ansteigen. Bezugnehmend auf 15 kann zum Beispiel jeder Materialeigenschaftsknoten 1510 einem anderen Shader-Programm entsprechen.
  • Anstatt einen Materialgraphen in eine Vielzahl von Shader-Programmen zu kompilieren, erzeugt der Compiler 1420 einen oder mehrere Sätze von Bytecode-Anweisungen auf der Grundlage des Materialgraphen. Jeder Satz von Bytecode-Anweisungen umfasst Bytecode, der von einer hardwarebasierten Rendering-Maschine, wie beispielsweise der PBRU 335, ausgeführt werden kann. Bei der Ausführung durch eine PBRU veranlasst jeder Satz von Bytecode-Anweisungen die PBRU, die verschiedenen Materialeigenschaften und die Beziehungen zwischen den verschiedenen Materialeigenschaften, die durch den Materialgraphen definiert sind, auszuwerten.
  • Wie gezeigt, empfängt der Compiler 1420 den Materialgraphen 1418 und erzeugt auf der Grundlage des Materialgraphen 1418 einen Satz von Materialschattierungsanweisungen 1422 und einen Satz von Wichtigkeits-Sampling-Anweisungen 1424. Der Satz von Materialschattierungsanweisungen 1422 veranlasst bei Ausführung durch eine PBRU die PBRU, eine Farbe zu erzeugen, die dem Schnittpunkt eines Strahls mit einer Objektoberfläche zugeordnet ist, die die durch den Materialgraph 1418 definierten Materialeigenschaften aufweist. Der Satz von Wichtigkeits-Sampling-Anweisungen 1424 veranlasst bei Ausführung durch eine PBRU die PBRU, eine Richtung eines sekundären Strahls zu erzeugen, der erzeugt wird, wenn ein primärer Strahl eine Objektoberfläche schneidet, die die durch den Materialgraph 1418 definierten Materialeigenschaften aufweist.
  • In einigen Ausführungsformen empfängt der Compiler 1420 eine textuelle Repräsentation des Materialgraphen 1418. Der Compiler 1420 parst die textuelle Repräsentation des Materialgraphen 1418, um einen Ausdrucksbaum zu erzeugen, wie z.B. einen Postfix-Ausdrucksbaum. Der Ausdrucksbaum beinhaltet für jeden Knoten des Materialgraphen 1418 einen oder mehrere Ausdrücke, die dem Knoten entsprechen. In einigen Ausführungsformen entsprechen der eine oder die mehreren Ausdrücke der einen oder den mehreren Berechnungen, die durch den Knoten definiert werden. Jeder in dem Ausdrucksbaum enthaltene Ausdruck wird als ein Satz eines oder mehrerer Knoten in dem Ausdrucksbaum dargestellt.
  • In einigen Ausführungsformen prüft der Compiler 1420 die semantische Integrität des Ausdrucksbaums, um zu bestimmen, ob irgendwelche Fehler in dem Ausdrucksbaum enthalten sind. Die Überprüfung der semantischen Integrität des Ausdrucksbaums umfasst beispielsweise ein Bestimmen, ob Variablen in dem Ausdrucksbaum definiert sind, bevor die Variablen verwendet werden, und/oder ein Bestimmen, ob Funktionen die korrekte Anzahl von Argumenten enthalten. Falls der Compiler 1420 bestimmt, dass der Ausdrucksbaum Fehler enthält, dann fährt der Compiler 1420 nicht mit dem Erzeugen eines Satzes von Bytecode-Anweisungen fort.
  • In einigen Ausführungsformen vereinfacht der Compiler 1420 einen oder mehrere Ausdrücke oder Unterausdrücke in dem Ausdrucksbaum. Das Vereinfachen eines oder mehrerer Ausdrücke oder Unterausdrücke kann beispielsweise beinhalten: Löschen unbenutzter Variablen, Falten von Konstanten (z.B. Ersetzen eines Satzes von 5*12 entsprechenden Knoten durch einen einzigen, 60 entsprechenden Knoten), Vereinfachen von Ausdrücken (z.B. x+0, x*0, x+1, x/1, 0/x), Bestimmen, ob eine Texturfunktion durch eine konstante Farbe ersetzt werden kann, Ersetzen von Funktionsaufrufen, die zu Konstanten ausgewertet werden, durch die Konstanten (z.B. Ersetzen einer Oren-Nayar-Funktion, wenn die Rauheit gleich 0 ist, durch den Wert 1/pi) oder Löschen des Speichers für Variablen, die nur einmal verwendet werden. Beliebige technisch machbaren Vereinfachungen und/oder Optimierungen können an dem Ausdrucksbaum auf der Grundlage der verschiedenen, in dem Materialgraphen 1418 enthaltenen Funktionen und Variablen vorgenommen werden.
  • In einigen Ausführungsformen entfernt dann, wenn der Compiler 1420 Wichtigkeits-Sampling-Anweisungen erzeugt, der Compiler 1420 einen oder mehrere Abschnitte des Ausdrucksbaums, die sich nicht auf die Richtung und/oder die Gewichte auswirken, wie z.B. einige Knoten, die Texturfunktionen entsprechen.
  • In einigen Ausführungsformen erzeugt dann, wenn der Compiler 1420 Wichtigkeits-Sampling-Anweisungen generiert, der Compiler 1420 eine Liste, die die Vielzahl von Blattknoten umfasst, die in dem Ausdrucksbaum enthalten sind. Der Compiler 1420 erzeugt einen Zufallsauswahlknoten über der Vielzahl von Blattknoten und ersetzt die Wurzel des Ausdrucksbaums durch den Zufallsauswahlknoten. Der für das Wichtigkeits-Sampling modifizierte Ausdrucksbaum enthält den Zufallsauswahlknoten als einen Wurzelknoten und die Vielzahl von Blattknoten unter dem Zufallsauswahlknoten.
  • Für jeden Blattknoten der Vielzahl von Blattknoten bestimmt der Compiler 1420 ein dem Blattknoten zugeordnetes Gewicht. Der Compiler 1420 weist dem Blattknoten das dem Blattknoten zugeordnete Gewicht zu. In einigen Ausführungsformen umfasst das Zuweisen von Gewichten zu Blattknoten ein Hinzufügen eines oder mehrerer Knoten zu dem Ausdrucksbaum, die die Gewichtswerte definieren und/oder die Anweisungen entsprechen, die der Berechnung der Gewichtswerte zugeordnet sind. Wie nachstehend erörtert wird, kann das einem Blattknoten zugewiesene Gewicht ein spezifisches Gewicht sein, oder kann das Gewicht durch Ausführen einer oder mehrerer Anweisungen, die dem dem Blattknoten zugeordneten Abschnitt des Materialgraphen entsprechen, dynamisch erzeugt werden. Der eine oder die mehreren Knoten werden dem Ausdrucksbaum oberhalb des Zufallsauswahlknotens hinzugefügt, so dass die entsprechenden Anweisungen vor der Ausführung einer Zufallsauswahlanweisung ausgeführt werden.
  • In einigen Ausführungsformen wird jedem Blattknoten in der Vielzahl von Blattknoten ein gleiches Gewicht zugewiesen. Zum Beispiel kann der Compiler 1420 einen Wert von 1 geteilt durch die Anzahl von Blattknoten berechnen und den Wert jedem Blattknoten der Vielzahl von Blattknoten zuweisen.
  • In einigen Ausführungsformen spezifiziert der Materialgraph 1418 Gewichte, die jedem Blattknoten entsprechen. Der Compiler 1420 bestimmt das für jeden Blattknoten spezifizierte Gewicht und weist es dem Blattknoten zu.
  • In einigen Ausführungsformen basiert das Gewicht jedes Blattknotens auf dem Beitrag des Blattknotens zu dem Materialgraphen 1418. Das heißt, das Gewicht jedes Blattknotens basiert darauf, wie der Blattknoten in dem Materialgraphen 1418 gewichtet ist. Zum Beispiel kann einem ersten Blattknoten, der einen kleinen Wert beiträgt, ein geringeres Gewicht zugewiesen werden als einem zweiten Blattknoten, der einen großen Wert beiträgt. In einigen Ausführungsformen wertet der Compiler 1420 den Materialgraphen 1418 aus, um den Betrag zu bestimmen, den jeder Blattknoten zum Gesamtergebnis beiträgt, das durch den Materialgraphen 1418 erzeugt wird. Der Compiler 1420 bestimmt das Gewicht für jeden Blattknoten auf der Grundlage der Beträge.
  • Der Compiler 1420 wandelt Funktionsaufrufe, auf die von den Blattknoten Bezug genommen wird, in Richtungsfunktionsaufrufe um. Falls beispielsweise ein Blattknoten eine Oren-Nayar-Funktion aufruft, modifiziert der Compiler 1420 den Blattknoten, um eine Oren-Nayar-Richtungsfunktion aufzurufen. Darüber hinaus modifiziert der Compiler 1420 die Argumente für den Blattknoten auf der Grundlage des Richtungsfunktionsaufrufs. Bezugnehmend auf das obige Beispiel kann die reguläre Oren-Nayar-Funktion Argumente beinhalten, die der Richtung eines schneidenden Strahls und der Rauheit entsprechen. Die Oren-Nayar-Richtungsfunktion benötigt diese Argumente nicht, um eine Richtung zu berechnen, weshalb der Compiler 1420 diese Argumente aus dem Ausdrucksbaum entfernt.
  • Der Compiler 1420 erzeugt einen Satz von Bytecode-Anweisungen auf der Grundlage des Ausdrucksbaums oder des verarbeiteten Ausdrucksbaums. In einigen Ausführungsformen traversiert der Compiler 1420 den Ausdrucksbaum und erzeugt für jeden Knoten des Ausdrucksbaums eine oder mehrere Bytecode-Anweisungen, die dem Knoten entsprechen. Falls beispielsweise ein Knoten des Ausdrucksbaums einen Wert für eine Variable definiert, dann erzeugt der Compiler 1420 eine Bytecode-Anweisung, die den Wert der Variablen auf einen Stapel schiebt. Als ein weiteres Beispiel ist die PBRU dazu konfiguriert ist, eine Vielzahl von eingebauten Funktionen auszuführen, wie z.B. die durch die Pipelines 440 der PBRU 335 implementierten Festfunktionen. Falls ein Knoten des Ausdrucksbaums einen Aufruf einer eingebauten Funktion enthält, dann erzeugt der Compiler 1420 eine Bytecode-Anweisung, die die Funktion aufruft.
  • In einigen Fällen können der Materialgraph 1418 und der entsprechende Ausdrucksbaum eine Funktion oder Operation enthalten, die nicht in Bytecode-Anweisungen konvertiert werden kann. Beispielsweise kann ein Knoten des Ausdrucksbaums einen Aufruf zu einer Funktion enthalten, die keine eingebaute Funktion ist oder die nicht unter Verwendung verfügbarer Bytecode-Anweisungen ausgedrückt werden kann. In einigen Ausführungsformen kann dann, wenn der Compiler 1420 bestimmt, dass eine Funktion nicht in Bytecode-Anweisungen konvertiert werden kann, der Compiler 1420 eine Strahlstopp-Anweisung erzeugen, um die Funktion zu ersetzen. Darüber hinaus kann in einigen Ausführungsformen der Compiler 1420 einen zusätzlichen Satz von Anweisungen erzeugen, die der Funktion entsprechen, die von einem Prozessor, wie z.B. einem SM 325, anstatt von einer PBRU ausgeführt werden können.
  • In einigen Ausführungsformen traversiert der Compiler 1420 den Ausdrucksbaum unter Verwendung einer Traversierung von unten nach oben. Für den Zufallsauswahlknoten führt der Compiler 1420 jedoch eine Traversierung von oben nach unten durch. Für einen Zufallsauswahlknoten erzeugt der Compiler 1420 eine Bytecode-Anweisung, die einer Zufallsauswahlfunktion entspricht. Für jeden Blattknoten unterhalb des Zufallsauswahlknotens erzeugt der Compiler 1420 eine Fall-Anweisung, eine oder mehrere Bytecode-Anweisungen, die dem Blattknoten entsprechen, und eine Endfall-Bytecode-Anweisung. Die von dem Compiler 1420 erzeugten Wichtigkeits-Sampling-Anweisungen 1424 umfassen eine Vielzahl von Fällen, die jeweils durch die Fall- und Endfall-Bytecode-Anweisungen gekennzeichnet sind, und die Zufallsauswahlfunktion wählt einen bestimmten Fall aus der Vielzahl von Fällen zur Ausführung aus.
  • In einigen Ausführungsformen fügt der Compiler 1420 nach der Erzeugung des Satzes von Bytecode-Anweisungen auf der Grundlage des Ausdrucksbaums eine Strahlstopp-Anweisung am Ende des Satzes von Bytecode-Anweisungen hinzu. In einigen Ausführungsformen enthält der Ausdrucksbaum einen oder mehrere Knoten, die einer Strahlstopp-Anweisung entsprechen, und erzeugt der Compiler 1420 die Strahlstopp-Anweisung(en), während er Bytecode-Anweisungen auf der Grundlage des Ausdrucksbaums erzeugt. Falls der Satz von Bytecode-Anweisungen mit einer Strahlstopp-Anweisung endet, dann fügt der Compiler 1420 keine weitere Strahlstopp-Anweisung am Ende des Satzes von Bytecode-Anweisungen hinzu.
  • Da die von dem Compiler 1420 erzeugten Bytecode-Anweisungen auf die PBRU ausgerichtet sind, ist der für den Satz von Bytecode-Anweisungen erforderliche Overhead im Vergleich zu dem für das/die Shader-Programm(e) erforderlichen Overhead sehr viel geringer. Darüber hinaus ist, da jede Bytecode-Anweisung nur ein Byte beansprucht, der Bedarf an Speicher und Speicherplatz für die Speicherung und Ausführung eines Satzes von Bytecode-Anweisungen, die einem Materialgraphen entsprechen, sehr viel geringer als der Bedarf an Speicher und Speicherplatz für die Speicherung und Ausführung der mehreren Shader-Programme.
  • Als ein Beispiel beinhaltet ein Shader-Programm if-Anweisungen, aber die SMs sind nicht gut im Verzweigen. Anstatt also Verzweigungen in ein einziges Shader-Programm aufzunehmen, können verschiedene Versionen des Shader-Programms kompiliert werden, die jeweils verschiedene Verzweigungen innerhalb des Shader-Programms nehmen, und es wird zusätzlicher Code aufgenommen, um zu bestimmen, welche Version des Shader-Programms ausgeführt werden muss. Insoweit kann unter Verwendung herkömmlicher Techniken ein einziger Materialgraph einer großen Anzahl von Shader-Programmen entsprechen. Demgegenüber muss bei den hier vorgestellten Techniken nur ein Satz von Bytecode-Anweisungen erzeugt und ausgeführt werden.
  • 16 ist ein Ablaufdiagramm von Verfahrensschritten zum Kompilieren eines Materialgraphen, gemäß einer Ausführungsform. Obwohl die Verfahrensschritte in Verbindung mit der Rechenvorrichtung aus 14 beschrieben werden, versteht der Fachmann, dass jede beliebige Rechenvorrichtung oder jedes beliebige System, die oder das dazu konfiguriert ist, die Verfahrensschritte in beliebiger Reihenfolge auszuführen, in den Anwendungsbereich der vorliegenden Offenbarung fällt.
  • In Schritt 1602 parst der Compiler einen Materialgraphen, um einen Ausdrucksbaum zu erzeugen. Beispielsweise parst der Compiler 1420 den Materialgraphen 1418, um einen Ausdrucksbaum zu erzeugen, der dem Materialgraphen 1418 entspricht. Der Ausdrucksbaum enthält für jeden Knoten des Materialgraphen 1418 einen oder mehrere Ausdrücke, die dem Knoten entsprechen. In einigen Ausführungsformen entsprechen der eine oder die mehreren Ausdrücke der einen oder den mehreren Berechnungen, die durch den Knoten definiert sind. Jeder in dem Ausdrucksbaum enthaltene Ausdruck wird als ein Satz von einem oder mehreren Knoten in dem Ausdrucksbaum repräsentiert.
  • In Schritt 1604 verarbeitet der Compiler 1420 den Ausdrucksbaum, um einen verarbeiteten Ausdrucksbaum zu erzeugen. Die Verarbeitung des Ausdrucksbaums erfolgt in einer Weise ähnlich zu derjenigen, die vorstehend in Bezug auf den Compiler 1420 offenbart ist.
  • In einigen Ausführungsformen prüft der Compiler 1420 die semantische Integrität des Ausdrucksbaums, um zu bestimmen, ob irgendwelche Fehler in dem Ausdrucksbaum enthalten sind. Die Überprüfung der semantischen Integrität des Ausdrucksbaums umfasst beispielsweise ein Bestimmen, ob Variablen in dem Ausdrucksbaum definiert sind, bevor die Variablen verwendet werden, und/oder ein Bestimmen, ob Funktionen die korrekte Anzahl von Argumenten enthalten. Falls der Compiler 1420 bestimmt, dass der Ausdrucksbaum Fehler enthält, dann fährt der Compiler 1420 nicht mit der Erzeugung eines Satzes von Bytecode-Anweisungen fort.
  • In einigen Ausführungsformen vereinfacht der Compiler 1420 einen oder mehrere Ausdrücke oder Unterausdrücke in dem Ausdrucksbaum. Das Vereinfachen eines oder mehrerer Ausdrücke oder Unterausdrücke kann beispielsweise beinhalten: Löschen unbenutzter Variablen, Falten von Konstanten (z.B. Ersetzen eines Satzes von 5*12 entsprechenden Knoten durch einen einzigen, 60 entsprechenden Knoten), Vereinfachen von Ausdrücken (z.B. x+0, x*0, x+1, x/1, 0/x), Bestimmen, ob eine Texturfunktion durch eine konstante Farbe ersetzt werden kann, Ersetzen von Funktionsaufrufen, die zu Konstanten ausgewertet werden, durch die Konstanten (z.B. Ersetzen einer Oren-Nayar-Funktion, wenn die Rauheit gleich 0 ist, durch den Wert 1/pi), oder Löschen von Speicherplatz für Variablen, die nur einmal verwendet werden.
  • In einigen Ausführungsformen entfernt dann, wenn der Compiler 1420 Wichtigkeits-Sampling-Anweisungen erzeugt, der Compiler 1420 einen oder mehrere Abschnitte des Ausdrucksbaums, die sich nicht auf die Richtung und/oder die Gewichte auswirken, wie beispielsweise einige Knoten, die Texturfunktionen entsprechen. Der Compiler 1420 bestimmt für jeden Knoten, ob der Knoten zur Berechnung eines Gewichts für einen Blattknoten erforderlich ist. Falls der Knoten nicht zur Berechnung eines Gewichts für einen Blattknoten erforderlich ist, dann entfernt der Compiler 1420 den Knoten.
  • In einigen Ausführungsformen entfernt dann, wenn der Compiler 1420 Wichtigkeits-Sampling-Anweisungen erzeugt, der Compiler 1420 einen oder mehrere Abschnitte des Ausdrucksbaums, die Variablen oder Argumente definieren, die nicht für Richtungsfunktionen verwendet werden. Beispielsweise kann eine reguläre (Materialschattierungs-) Oren-Nayar-Funktion Argumente enthalten, die der Richtung eines schneidenden Strahls und der Rauheit entsprechen, aber die Oren-Nayar-Richtungsfunktion enthält diese Argumente nicht, da die Argumente nicht benötigt werden, um eine Richtung zu berechnen. Der Compiler 1420 entfernt die Knoten, die der Richtung eines schneidenden Strahls und der Rauheit entsprechen, aus dem Ausdrucksbaum.
  • Falls der Compiler 1420 Materialschattierungsanweisungen erzeugt, dann schreitet das Verfahren zu mit dem nachstehenden Schritt 1614 fort, in dem der Compiler 1420 Bytecode-Anweisungen auf der Grundlage des verarbeiteten Ausdrucksbaums erzeugt.
  • Falls der Compiler 1420 Wichtigkeits-Sampling-Anweisungen erzeugt, dann schreitet das Verfahren zu Schritt 1606 fort. In Schritt 1606 erzeugt der Compiler 1420 eine Liste von Blattknoten in dem verarbeiteten Ausdrucksbaum. In einigen Ausführungsformen entspricht jeder Blattknoten einem Funktionsaufruf, wie beispielsweise GGX, Oren-Nayar, Glanz usw.
  • In Schritt 1608 erzeugt der Compiler 1420 einen Zufallsauswahlknoten über der Vielzahl von Blattknoten. Der Zufallsauswahlknoten entspricht einer Zufallsauswahlfunktion, die zufällig einen Fall aus einer Vielzahl von Fällen zur Ausführung auswählt. In einigen Ausführungsformen entspricht jeder in der Vielzahl von Fällen enthaltene Fall einem Blattknoten in der Liste der Blattknoten. Der Compiler 1420 ersetzt den/die übergeordneten Knoten jedes Blattknotens durch den Zufallsauswahlknoten. Darüber hinaus ersetzt der Compiler 1420 die Wurzel des Ausdrucksbaums durch den Zufallsauswahlknoten. Der für das Wichtigkeits-Sampling modifizierte Ausdrucksbaum enthält den Zufallsauswahlknoten als einen Wurzelknoten und die Vielzahl von Blattknoten als Unterknoten des Zufallsauswahlknotens.
  • In Schritt 1610 berechnet der Compiler ein Gewicht für jeden Blattknoten und weist das Gewicht dem Blattknoten zu. Die Berechnung eines Gewichts für jeden Blattknoten erfolgt in einer Weise ähnlich zu derjenigen, die vorstehend in Bezug auf den Compiler 1420 offenbart wurde.
  • In einigen Ausführungsformen wird jedem Blattknoten, der in der Vielzahl der Blattknoten enthalten ist, ein gleiches Gewicht zugewiesen. Zum Beispiel kann der Compiler 1420 einen Wert von 1 geteilt durch die Anzahl von Blattknoten berechnen und den Wert jedem Blattknoten der Vielzahl von Blattknoten zuweisen.
  • In einigen Ausführungsformen spezifiziert der Materialgraph 1418 Gewichte, die jedem Blattknoten entsprechen. Der Compiler 1420 bestimmt das für jeden Blattknoten spezifizierte Gewicht und weist das Gewicht dem Blattknoten zu.
  • In einigen Ausführungsformen basiert das Gewicht jedes Blattknotens auf dem Beitrag des Blattknotens zu dem Materialgraphen 1418. Das heißt, das Gewicht jedes Blattknotens basiert darauf, wie der Blattknoten in dem Materialgraphen 1418 gewichtet ist. Zum Beispiel kann einem ersten Blattknoten, der einen kleinen Wert beiträgt, ein geringeres Gewicht zugewiesen werden als einem zweiten Blattknoten, der einen großen Wert beiträgt. In einigen Ausführungsformen wertet der Compiler 1420 den Materialgraphen 1418 aus, um den Betrag zu bestimmen, den jeder Blattknoten zum Gesamtergebnis beiträgt, das durch den Materialgraphen 1418 erzeugt wird. Der Compiler 1420 bestimmt das Gewicht für jeden Blattknoten auf der Grundlage der Beträge.
  • In Schritt 1612 konvertiert der Compiler Verweise auf Farbanweisungen mit Verweisen auf Richtungsanweisungen. In einigen Ausführungsformen entspricht jeder Blattknoten einem Funktionsaufruf, z.B. GGX, Oren-Nayar, Glanz usw. Der Compiler 1420 ersetzt den Funktionsaufruf in jedem Blattknoten durch einen Aufruf einer Richtungsversion der Funktion. Zum Beispiel wird ein Funktionsaufruf für GGX durch einen Funktionsaufruf für GGX_Direction ersetzt.
  • In Schritt 1612 erzeugt der Compiler auf der Grundlage des verarbeiteten Ausdrucksbaums Bytecode-Anweisungen. Die Erzeugung der Bytecode-Anweisungen erfolgt in einer Weise ähnlich zu derjenigen, die vorstehend in Bezug auf den Compiler 1420 offenbart wurde.
  • In einigen Ausführungsformen durchläuft der Compiler 1420 den Ausdrucksbaum und erzeugt für jeden Knoten des Ausdrucksbaums eine oder mehrere Bytecode-Anweisungen, die dem Knoten entsprechen. Falls beispielsweise ein Knoten des Ausdrucksbaums einen Wert für eine Variable definiert, erzeugt der Compiler 1420 eine Bytecode-Anweisung, die den Wert der Variablen auf einen Stapel schiebt. Als ein weiteres Beispiel ist die PBRU dazu konfiguriert, eine Vielzahl von eingebauten Funktionen auszuführen, wie z.B. die durch die Pipelines 440 der PBRU 335 implementierten Festfunktionen. Falls ein Knoten des Ausdrucksbaums einen Aufruf zu einer eingebauten Funktion enthält, dann erzeugt der Compiler 1420 eine Bytecode-Anweisung, die die Funktion aufruft.
  • In einigen Fällen können der Materialgraph 1418 und der entsprechende Ausdrucksbaum eine Funktion oder Operation enthalten, die nicht in Bytecode-Anweisungen konvertiert werden kann. Beispielsweise kann ein Knoten des Ausdrucksbaums einen Aufruf zu einer Funktion enthalten, die keine eingebaute Funktion ist oder die nicht unter Verwendung verfügbarer Bytecode-Anweisungen ausgedrückt werden kann. In einigen Ausführungsformen kann dann, wenn der Compiler 1420 bestimmt, dass eine Funktion nicht in Bytecode-Anweisungen konvertiert werden kann, der Compiler 1420 eine Strahlstopp-Anweisung erzeugen, um die Funktion zu ersetzen. Darüber hinaus kann in einigen Ausführungsformen der Compiler 1420 einen zusätzlichen Satz von Anweisungen erzeugen, die der Funktion entsprechen, die von einem Prozessor, wie z.B. einem SM 325, anstatt von einer PBRU ausgeführt werden kann. Falls z.B. die Funktion einer benutzerdefinierten Funktion entspricht, kann der Compiler 1420 dazu konfiguriert sein, Anweisungen zu erzeugen, die bei Ausführung durch einen Prozessor wie beispielsweise den SM 325 die benutzerdefinierte Funktion aufrufen.
  • In einigen Ausführungsformen traversiert der Compiler 1420 den Ausdrucksbaum unter Verwendung einer Traversierung von unten nach oben. Für den Zufallsauswahlknoten führt der Compiler 1420 jedoch eine Traversierung von oben nach unten durch. Für einen Zufallsauswahlknoten erzeugt der Compiler 1420 eine Bytecode-Anweisung, die einer Zufallsauswahlfunktion entspricht. Für jeden Blattknoten unterhalb des Zufallsauswahlknotens erzeugt der Compiler 1420 eine Fall-Anweisung, eine oder mehrere Bytecode-Anweisungen, die dem Blattknoten entsprechen, und eine Endfall-Bytecode-Anweisung. Die von dem Compiler 1420 erzeugten Wichtigkeits-Sampling-Anweisungen 1424 umfassen eine Vielzahl von Fällen, die jeweils durch die Fall- und Endfall-Bytecode-Anweisungen gekennzeichnet sind, und die Zufallsauswahlfunktion wählt einen bestimmten Fall aus der Vielzahl von Fällen zur Ausführung aus.
  • In einigen Ausführungsformen fügt nach dem Erzeugen des Satzes von Bytecode-Anweisungen auf der Grundlage des Ausdrucksbaums der Compiler 1420 eine Strahlstopp-Anweisung am Ende des Satzes von Bytecode-Anweisungen hinzu, falls die Strahlstopp-Anweisung am Ende des Satzes von Bytecode-Anweisungen nicht vorhanden war.
  • In der Summe ermöglichen die offenbarten Techniken eine effiziente Auswertung von Materialgraphen zur Materialschattierung. Eine programmierbare Rendering-Maschine ist mit einer oder mehreren Baumtraversierungseinheiten und einem oder mehreren Streaming-Multiprozessoren gekoppelt. Die Rendering-Maschine umfasst eine Vielzahl von MIMD-Verarbeitungskernen und eine Vielzahl von Pipelines, die von der Vielzahl von Verarbeitungskernen gemeinsam genutzt werden. Jede Pipeline ist eine Festfunktionseinheit, die dazu konfiguriert ist, eine bestimmte komplexe Funktion oder Auswertung durchzuführen, die dem Materialgraphen zugeordnet ist. Der Materialgraph wird in einen Satz von Assembler-Anweisungen für die Rendering-Maschine kompiliert.
  • Wenn die Rendering-Maschine einen Strahl empfängt, weist die Rendering-Maschine den Strahl einem Verarbeitungskern aus der Vielzahl von Verarbeitungskernen zu. Der Verarbeitungskern führt einen kompilierten Materialgraphen auf der Grundlage des Strahls und der schneidenden Oberfläche aus. Wenn der Verarbeitungskern eine Anweisung ausführt, die einer Pipeline entspricht, sendet der Verarbeitungskern die Betriebsparameter an die Pipeline und empfängt die entsprechende, von der Pipeline erzeugte Ausgabe.
  • In einem Ansatz stellt ein Streaming-Multiprozessor einen Strahl für eine Baumtraversierungseinheit zur Auswertung bereit. Die Baumtraversierungseinheit bestimmt eine Oberfläche, die sich mit dem Strahl schneidet, und sendet den Strahl und die Oberfläche zur Materialschattierung an die Rendering-Maschine. Alternativ kann ein Streaming-Multiprozessor einen Strahl und eine Oberfläche zur Materialschattierung an die Rendering-Maschine senden. Die Rendering-Maschine führt den kompilierten Materialgraphen aus und gibt eine entsprechende Farbe an die Baumtraversierungseinheit oder den Streaming-Multiprozessor zurück.
  • In einem Ansatz nutzt ein Streaming-Multiprozessor die Vielzahl von Pipelines der Rendering-Maschine zum Durchführen von Funktionen oder Auswertungen, die den Pipelines zugeordnet sind. Der Streaming-Multiprozessor sendet Eingaben an eine bestimmte Pipeline aus der Vielzahl von Pipelines und nicht an die Rendering-Maschine zur Zuweisung zu einem Verarbeitungskern. Die Pipeline führt die zugehörige Funktion oder Auswertung an der Eingabe durch und sendet die Ausgabe an den Streaming-Multiprozessor.
  • In einem Ansatz stellt ein Streaming-Multiprozessor einen Strahl für die Rendering-Maschine für das Wichtigkeits-Sampling bereit. Zusätzlich zum Erzeugen eines Satzes von Assembler-Anweisungen zum Ausführen des Materialgraphen erzeugt ein Compiler auch einen Satz von Assembler-Anweisungen zum Durchführen des Wichtigkeits-Samplings auf der Grundlage des Materialgraphen. Die Rendering-Maschine führt die Wichtigkeits-Sampling-Anweisungen auf der Grundlage des Strahls aus und gibt eine Richtung für einen sekundären Strahl an den Streaming-Multiprozessor zurück.
  • Mindestens ein technischer Vorteil der offenbarten Techniken besteht darin, dass eine Rendering-Maschine bereitgestellt wird, die speziell für die Durchführung von Strahlenverfolgungsoperationen und anderen seriellen Verarbeitungsaufgaben mit verbesserter Effizienz im Vergleich zu Lösungen nach dem Stand der Technik ausgelegt ist. Demgemäß kann die Rendering-Maschine in eine GPU oder eine andere Parallelverarbeitungseinheit integriert sein, und können Verarbeitungsaufgaben, die nicht effektiv über die herkömmlichen Verarbeitungselemente innerhalb der GPU oder einer anderen Parallelverarbeitungseinheit parallelisiert werden können, auf die Rendering-Maschine ausgelagert werden, welches die Gesamtverarbeitungsleistung und den Durchsatz erhöht. In dieser Hinsicht sind in der Rendering-Maschine mehrere MIMD (Multiple Input, Multiple Data)-Verarbeitungskerne implementiert, wobei jeder Verarbeitungskern dazu konfiguriert ist, asynchron einen anderen Strahl oder eine andere Einheit serieller Verarbeitung zu verarbeiten, welches ermöglicht, Strahlenverfolgungsoperationen und andere serielle Verarbeitungsaufgaben weitgehend parallel über die verschiedenen Verarbeitungskerne hinweg auszuführen. Um den Gesamtverarbeitungsdurchsatz weiter zu verbessern, umfasst die Rendering-Maschine außerdem mehrere Pipelines, die für die Ausführung bestimmter spezialisierter Verarbeitungsaufgaben ausgelegt sind. Während des Betriebs können die Verarbeitungskerne die spezialisierten Verarbeitungsaufgaben auf die verschiedenen Pipelines verlagern, und ist ein Scheduler, der sich innerhalb der Rendering-Maschine befindet, dazu konfiguriert, die verlagerten Aufgaben auf die verschiedenen Pipelines in optimierter Weise zu verteilen. Darüber hinaus kann die spezialisierte Verarbeitungsaufgabe, die von einer Pipeline ausgeführt wird, optimiert werden, um den Verarbeitungsdurchsatz für individuelle Verarbeitungsaufgaben zu verbessern.
  • Ein weiterer technischer Vorteil besteht darin, dass jeder Materialgraph in einen einzigen Satz von Assembler-Anweisungen für die Rendering-Maschine kompiliert wird. Im Gegensatz zu bekannten Ansätzen müssen unterschiedliche Permutationen von Materialeigenschaften und Materialeigenschaftsparametern nicht separat in mehrere Materialschattierungsprogramme kompiliert werden. Ferner kann während der Kompilierung der Compiler die Anweisungen auf der Grundlage der Semantik des Materialgraphen, der verschiedenen Materialeigenschaftsparameter und der Hardware-Architektur der Rendering-Maschine optimieren.
    1. 1. In einigen Ausführungsformen umfasst ein computerimplementiertes Verfahren zum parallelen Verarbeiten von Strahlenverfolgungsoperationen ein Empfangen einer Vielzahl von Strahlen und eines entsprechenden Satzes von Materialschattierungsanweisungen für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, zur Verarbeitung, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert und jeder entsprechende Satz von Materialschattierungsanweisungen zumindest teilweise auf einer oder mehreren Materialeigenschaften basiert, die mindestens einer Oberfläche von mindestens einem Objekt zugeordnet sind, das in der 3D-Umgebung enthalten ist; ein Zuweisen jedes Strahls, der in der Vielzahl von Strahlen enthalten ist, zu einem anderen Verarbeitungskern, der in einer Vielzahl von Verarbeitungskernen enthalten ist; und für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, ein Veranlassen des dem Strahl zugewiesenen Verarbeitungskerns, den entsprechenden Satz von Materialschattierungsanweisungen an dem Strahl auszuführen, um eine Farbe zu erzeugen.
    2. 2. Verfahren nach Ziffer 1, wobei die Vielzahl von Strahlen einen oder mehrere von einer Baumtraversierungseinheit empfangene Strahlen umfasst.
    3. 3. Verfahren nach Ziffer 1 oder 2, wobei die Vielzahl von Strahlen einen oder mehrere von einer Verarbeitungseinheit empfangene Strahlen umfasst.
    4. 4. Verfahren nach einer der Ziffern 1 bis 3, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Empfangen der Farbe von dem Verarbeitungskern, der dem Strahl zugeordnet ist.
    5. 5. Verfahren nach einer der Ziffern 1 bis 4, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Übermitteln der Farbe an eine Baumtraversierungseinheit oder eine Verarbeitungseinheit.
    6. 6. Verfahren nach einer der Ziffern 1 bis 5, wobei das Empfangen der Vielzahl von Strahlen ein Empfangen, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, einer ersten Datenstruktur, die dem Strahl entspricht, umfasst, wobei die erste Datenstruktur einen oder mehrere erste Werte speichert, die dem Strahl zugeordnet sind.
    7. 7. Verfahren nach einer der Ziffern 1 bis 6, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Empfangen zweiten Datenstruktur, die dem Strahl entspricht, von dem Verarbeitungskern, der dem Strahl zugeordnet ist, wobei die zweite Datenstruktur einen oder mehrere zweite Werte speichert, die dem Strahl zugeordnet sind.
    8. 8. Verfahren nach einer der Ziffern 1 bis 7, wobei der eine oder die mehreren zweiten Werte die Farbe beinhalten.
    9. 9. Verfahren nach einer der Ziffern 1 bis 8, ferner umfassend ein Übermitteln der zweiten Datenstruktur an eine Baumtraversierungseinheit oder eine Verarbeitungseinheit.
    10. 10. Verfahren nach einer der Ziffern 1 bis 9, ferner umfassend ein Empfangen einer ersten Anforderung von einem ersten Verarbeitungskern, der in der Vielzahl von Verarbeitungskernen enthalten ist; ein Bestimmen, auf der Grundlage der ersten Anforderung, eines Zielorts der ersten Anforderung; und ein Übermitteln der ersten Anforderung an den Zielort.
    11. 11. Verfahren nach einer der Ziffern 1 bis 10, wobei die erste Anforderung eine Anforderung für einen Texturblock ist.
    12. 12. Verfahren nach einer der Ziffern 1 bis 11, wobei die erste Anforderung eine Anforderung für einen zweiten entsprechenden Satz von Materialschattierungsanweisungen für einen Strahl ist.
    13. 13. Verfahren nach einer der Ziffern 1 bis 12, wobei die erste Anforderung eine Anforderung zum Ausgeben von Anweisungen an eine Festfunktions-Pipeline ist.
    14. 14. Verfahren nach einer der Ziffern 1 bis 13, ferner umfassend ein Empfangen einer zweiten Anforderung von einem zweiten Verarbeitungskern, der in der Vielzahl von Verarbeitungskernen enthalten ist; ein Bestimmen, dass ein Zielort der zweiten Anforderung derselbe ist wie der Zielort der ersten Anforderung; ein Bestimmen einer Reihenfolge zum Senden der ersten Anforderung und der zweiten Anforderung an den Zielort; und ein Senden der ersten Anforderung und der zweiten Anforderung an den Zielort auf der Grundlage der Reihenfolge.
    15. 15. Verfahren nach einer der Ziffern 1 bis 14, ferner umfassend ein Empfangen, von dem Zielort, einer oder mehrerer Antworten auf die erste Anforderung; ein Bestimmen, dass die eine oder die mehreren Antworten dem ersten Verarbeitungskern zugeordnet sind; und ein Übermitteln der einen oder der mehreren Antworten an den ersten Verarbeitungskern.
    16. 16. In einigen Ausführungsformen umfasst ein Rechensystem eine zentrale Verarbeitungseinheit; eine Parallelverarbeitungseinheit, die Arbeit von der zentralen Verarbeitungseinheit empfängt; und eine Ausführungseinheit, die einen Teil der Arbeit von der Parallelverarbeitungseinheit empfängt und zumindest teilweise parallel verschiedene Anweisungen auf verschiedenen Daten ausführt, die dem Teil der Arbeit zugeordnet sind.
    17. 17. Rechensystem nach Ziffer 16, wobei der Teil der Arbeit von der Parallelverarbeitungseinheit eine Vielzahl von Strahlenverfolgungsoperationen umfasst.
    18. 18. Rechensystem nach Ziffer 16 oder 17, wobei die verschiedenen Daten, die dem Teil der Arbeit zugeordnet sind, eine Vielzahl von Strahlen umfassen, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert.
    19. 19. Rechensystem nach einer der Ziffern 16 bis 18, wobei die verschiedenen Anweisungen einen oder mehrere verschiedene Sätze von Materialschattierungsanweisungen enthalten.
    20. 20. Rechensystem nach einer der Ziffern 16 bis 19, wobei die verschiedenen Anweisungen einen oder mehrere verschiedene Sätze von Wichtigkeits-Sampling-Anweisungen enthalten.
  • Jegliche Kombinationen jeglicher der in den Ansprüchen genannten Anspruchselemente und/oder jegliche der in dieser Anmeldung beschriebenen Elemente in jeglicher Weise fallen in den vorgesehenen Anwendungsbereich der vorliegenden Erfindung und des Schutzes.
  • Die Beschreibungen der verschiedenen Ausführungsformen dienen der Veranschaulichung, sollen jedoch nicht erschöpfend oder auf die offenbarten Ausführungsformen beschränkend sein. Viele Modifikationen und Variationen ergeben sich für den Fachmann, ohne den Rahmen und die Idee der beschriebenen Ausführungsformen zu verlassen.
  • Aspekte der vorliegenden Ausführungsformen können als ein System, Verfahren oder Computerprogrammprodukt verkörpert werden. Dementsprechend können Aspekte der vorliegenden Offenbarung die Form einer reinen Hardware-Variante, einer reinen Software-Variante (einschließlich Firmware, residenter Software, Mikrocode usw.) oder einer Variante annehmen, die Software- und Hardware-Aspekte kombiniert, die hierin allgemein als „Modul“, „System“ oder „Computer“ bezeichnet sein können. Darüber hinaus kann jegliche Hardware- und/oder Softwaretechnik, jeder Prozess, jede Funktion, jede Komponente, jede Maschine, jedes Modul oder jedes System, in der vorliegenden Offenbarung beschrieben, als ein Schaltkreis oder als eine Reihe von Schaltkreisen implementiert werden. Ferner können Aspekte der vorliegenden Offenbarung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren computerlesbaren Medium/Medien mit darauf verkörpertem computerlesbarem Programmcode verkörpert ist.
  • Eine beliebige Kombination aus einem oder mehreren computerlesbaren Medien kann genutzt werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann beispielsweise, ohne darauf beschränkt zu sein, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, ein Gerät oder eine Vorrichtung oder jede beliebige geeignete Kombination der vorgenannten sein. Spezifischere Beispiele (eine nicht erschöpfende Liste) des computerlesbaren Speichermediums würden folgendes beinhalten: eine elektrische Verbindung mit einem oder mehreren Leitern, eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Festwertspeicher (ROM), ein löschbarer programmierbarer Festwertspeicher (EPROM oder Flash-Speicher), eine optische Faser, ein tragbarer Compact-Disc-Festwertspeicher (CD-ROM), eine optische Speichervorrichtung, eine magnetische Speichervorrichtung oder eine beliebige geeignete Kombination der vorgenannten. Im Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes tangible Medium sein, das ein Programm zur Verwendung durch oder in Verbindung mit einem Befehlsausführungssystem, -gerät oder einer solchen Vorrichtung enthalten oder speichern kann.
  • Aspekte der vorliegenden Offenbarung sind vorstehend unter Bezugnahme auf Ablaufdiagrammdarstellungen und/oder Blockdiagramme von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung bzw. Offenbarung beschrieben. Es versteht sich, dass jeder Block der Ablaufdiagrammdarstellungen und/oder Blockdiagramme, und Kombinationen von Blöcken in den Ablaufdiagrammdarstellungen und/oder Blockdiagrammen, durch Computerprogrammanweisungen implementiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder eines anderen programmierbaren Datenverarbeitungsgeräts zugeführt werden, um eine Maschine zu erzeugen. Die Anweisungen ermöglichen bei Ausführung durch den Prozessor des Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung die Implementierung der in dem Ablaufdiagramm und/oder Blockdiagramm spezifizierten Funktionen/Aktionen. Solche Prozessoren können, ohne darauf beschränkt zu sein, Universalprozessoren, Spezialprozessoren, anwendungsspezifische Prozessoren oder feldprogrammierbare Gate-Arrays sein.
  • Die Ablaufdiagramme und Blockdiagramme in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betriebsablauf möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block in dem Ablaufdiagramm oder in den Blockdiagrammen ein Modul, ein Segment oder einen Abschnitt des Codes repräsentieren, das/der eine oder mehrere ausführbare Anweisungen zur Implementierung der angegebenen logischen Funktion(en) umfasst. Es wird auch angemerkt, dass in einigen alternativen Implementierungen die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren angegeben auftreten können. Beispielsweise können zwei aufeinanderfolgend gezeigte Blöcke in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder können die Blöcke manchmal in umgekehrter Reihenfolge ausgeführt werden, abhängig von der involvierten Funktionalität. Es wird auch angemerkt, dass jeder Block der Blockdiagramme und/oder Ablaufdiagrammdarstellung, sowie Kombinationen von Blöcken in den Blockdiagrammen und/oder der Ablaufdiagrammdarstellung, durch spezielle hardwarebasierte Systeme, die die spezifizierten Funktionen oder Handlungen durchführen, oder durch Kombinationen von spezieller Hardware und Computeranweisungen implementiert werden können.
  • Während das Vorstehende auf Ausführungsformen der vorliegenden Erfindung gerichtet ist, können andere und weitere Ausführungsformen der Erfindung entwickelt werden, ohne deren grundlegenden Umfang zu verlassen, und wird deren Schutzbereich durch die nachfolgenden Ansprüche bestimmt.
  • Claims (20)

    1. Computerimplementiertes Verfahren zum parallelen Verarbeiten von Strahlenverfolgungsoperationen, wobei das Verfahren umfasst: Empfangen einer Vielzahl von Strahlen und eines entsprechenden Satzes von Materialschattierungsanweisungen für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, zur Verarbeitung, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert und jeder entsprechende Satz von Materialschattierungsanweisungen zumindest teilweise auf einer oder mehreren Materialeigenschaften basiert, die mindestens einer Oberfläche von mindestens einem Objekt zugeordnet sind, das in der 3D-Umgebung enthalten ist; Zuweisen jedes Strahls, der in der Vielzahl von Strahlen enthalten ist, zu einem anderen Verarbeitungskern, der in einer Vielzahl von Verarbeitungskernen enthalten ist; und für jeden Strahl, der in der Vielzahl von Strahlen enthalten ist, ein Veranlassen des dem Strahl zugewiesenen Verarbeitungskerns, den entsprechenden Satz von Materialschattierungsanweisungen an dem Strahl auszuführen, um eine Farbe zu erzeugen.
    2. Verfahren nach Anspruch 1, wobei die Vielzahl von Strahlen einen oder mehrere von einer Baumtraversierungseinheit empfangene Strahlen umfasst.
    3. Verfahren nach Anspruch 1 oder 2, wobei die Vielzahl von Strahlen einen oder mehrere von einer Verarbeitungseinheit empfangene Strahlen umfasst.
    4. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Empfangen der Farbe von dem Verarbeitungskern, der dem Strahl zugeordnet ist.
    5. Verfahren nach Anspruch 4, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Übermitteln der Farbe an eine Baumtraversierungseinheit oder eine Verarbeitungseinheit.
    6. Verfahren nach einem der vorangehenden Ansprüche, wobei das Empfangen der Vielzahl von Strahlen ein Empfangen, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, einer ersten Datenstruktur, die dem Strahl entspricht, umfasst, wobei die erste Datenstruktur einen oder mehrere erste Werte speichert, die dem Strahl zugeordnet sind.
    7. Verfahren nach Anspruch 6, ferner umfassend, für jeden in der Vielzahl von Strahlen enthaltenen Strahl, ein Empfangen zweiten Datenstruktur, die dem Strahl entspricht, von dem Verarbeitungskern, der dem Strahl zugeordnet ist, wobei die zweite Datenstruktur einen oder mehrere zweite Werte speichert, die dem Strahl zugeordnet sind.
    8. Verfahren nach Anspruch 7, wobei der eine oder die mehreren zweiten Werte die Farbe beinhalten.
    9. Verfahren nach Anspruch 7 oder 8, ferner umfassend ein Übermitteln der zweiten Datenstruktur an eine Baumtraversierungseinheit oder eine Verarbeitungseinheit.
    10. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend: Empfangen einer ersten Anforderung von einem ersten Verarbeitungskern, der in der Vielzahl von Verarbeitungskernen enthalten ist; Bestimmen, auf der Grundlage der ersten Anforderung, eines Zielorts der ersten Anforderung; und Übermitteln der ersten Anforderung an den Zielort.
    11. Verfahren nach Anspruch 10, wobei die erste Anforderung eine Anforderung für einen Texturblock ist.
    12. Verfahren nach Anspruch 10 oder 11, wobei die erste Anforderung eine Anforderung für einen zweiten entsprechenden Satz von Materialschattierungsanweisungen für einen Strahl ist.
    13. Verfahren nach einem der Ansprüche 10 bis 12, wobei die erste Anforderung eine Anforderung zum Ausgeben von Anweisungen an eine Festfunktions-Pipeline ist.
    14. Verfahren nach einem der Ansprüche 10 bis 13, ferner umfassend: Empfangen einer zweiten Anforderung von einem zweiten Verarbeitungskern, der in der Vielzahl von Verarbeitungskernen enthalten ist; Bestimmen, dass ein Zielort der zweiten Anforderung derselbe ist wie der Zielort der ersten Anforderung; Bestimmen einer Reihenfolge zum Senden der ersten Anforderung und der zweiten Anforderung an den Zielort; und Senden der ersten Anforderung und der zweiten Anforderung an den Zielort auf der Grundlage der Reihenfolge.
    15. Verfahren nach Anspruch 10, ferner umfassend: Empfangen, von dem Zielort, einer oder mehrerer Antworten auf die erste Anforderung; Bestimmen, dass die eine oder die mehreren Antworten dem ersten Verarbeitungskern zugeordnet sind; und Übermitteln der einen oder der mehreren Antworten an den ersten Verarbeitungskern.
    16. Rechensystem, umfassend: eine zentrale Verarbeitungseinheit; eine Parallelverarbeitungseinheit, die Arbeit von der zentralen Verarbeitungseinheit empfängt; und eine Ausführungseinheit, die einen Teil der Arbeit von der Parallelverarbeitungseinheit empfängt und zumindest teilweise parallel verschiedene Anweisungen auf verschiedenen Daten ausführt, die dem Teil der Arbeit zugeordnet sind.
    17. Rechensystem nach Anspruch 16, wobei der Teil der Arbeit von der Parallelverarbeitungseinheit eine Vielzahl von Strahlenverfolgungsoperationen umfasst.
    18. Rechensystem nach Anspruch 16 oder 17, wobei die verschiedenen Daten, die dem Teil der Arbeit zugeordnet sind, eine Vielzahl von Strahlen umfassen, wobei jeder Strahl einen Pfad von einer Lichtquelle zu mindestens einem Punkt innerhalb einer dreidimensionalen (3D) Umgebung repräsentiert.
    19. Rechensystem nach einem der Ansprüche 16 bis 18, wobei die verschiedenen Anweisungen einen oder mehrere verschiedene Sätze von Materialschattierungsanweisungen enthalten.
    20. Rechensystem nach einem der Ansprüche 16 bis 18, wobei die verschiedenen Anweisungen einen oder mehrere verschiedene Sätze von Wichtigkeits-Sampling-Anweisungen enthalten.
    DE102022111609.3A 2021-05-14 2022-05-10 Beschleunigte verarbeitung über eine körperbasierte rendering-maschine Pending DE102022111609A1 (de)

    Applications Claiming Priority (2)

    Application Number Priority Date Filing Date Title
    US17/321,311 US11908064B2 (en) 2021-05-14 2021-05-14 Accelerated processing via a physically based rendering engine
    US17/321,311 2021-05-14

    Publications (1)

    Publication Number Publication Date
    DE102022111609A1 true DE102022111609A1 (de) 2022-11-17

    Family

    ID=83806272

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102022111609.3A Pending DE102022111609A1 (de) 2021-05-14 2022-05-10 Beschleunigte verarbeitung über eine körperbasierte rendering-maschine

    Country Status (3)

    Country Link
    US (1) US11908064B2 (de)
    CN (1) CN115345769A (de)
    DE (1) DE102022111609A1 (de)

    Families Citing this family (1)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    CN116467227B (zh) * 2023-06-19 2023-08-25 深流微智能科技(深圳)有限公司 Tmu系统和tmu系统的运算优化方法

    Family Cites Families (24)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    AU760826B2 (en) 2000-04-18 2003-05-22 Canon Kabushiki Kaisha Rendering graphic object based images
    US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
    US9465619B1 (en) 2012-11-29 2016-10-11 Marvell Israel (M.I.S.L) Ltd. Systems and methods for shared pipeline architectures having minimalized delay
    US9626789B2 (en) 2013-05-07 2017-04-18 Advanced Micro Devices, Inc. Implicit texture map parameterization for GPU rendering
    US9355492B2 (en) 2013-05-15 2016-05-31 Nvidia Corporation System, method, and computer program product for utilizing a wavefront path tracer
    KR102071766B1 (ko) 2014-07-10 2020-03-02 인텔 코포레이션 효율적 텍스처 압축을 위한 방법 및 장치
    US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
    KR102477264B1 (ko) 2015-09-22 2022-12-13 삼성전자주식회사 텍스쳐를 처리하는 방법 및 장치
    US9892544B2 (en) 2015-12-22 2018-02-13 Intel Corporation Method and apparatus for load balancing in a ray tracing architecture
    US10354432B2 (en) 2016-01-15 2019-07-16 Intel Corporation Texture space shading and reconstruction for ray tracing
    US10115229B2 (en) 2016-07-13 2018-10-30 Nvidia Corporation Reinforcement learning for light transport
    US10580189B2 (en) 2016-09-16 2020-03-03 Intel Corporation Apparatus and method for optimized ray tracing
    US10504273B2 (en) 2016-12-09 2019-12-10 Nvidia Corporation Automatic level-of-detail for physically-based materials
    DE102017127367A1 (de) 2016-12-09 2018-06-14 Nvidia Corporation Automatischer detaillierungsgrad für physikalisch basierte materialien
    US10255105B2 (en) 2017-04-11 2019-04-09 Imagination Technologies Limited Parallel computing architecture for use with a non-greedy scheduling algorithm
    US10930050B2 (en) * 2018-12-13 2021-02-23 Advanced Micro Devices, Inc. Mechanism for supporting discard functionality in a ray tracing context
    US11004252B2 (en) 2018-12-28 2021-05-11 Intel Corporation Real time ray tracing (RTRT)-based adaptive multi-frequency shading (AMFS)
    US10699370B1 (en) * 2018-12-28 2020-06-30 Intel Corporation Apparatus and method for a compressed stack representation for hierarchical acceleration structures of arbitrary widths
    US11030800B2 (en) 2019-11-08 2021-06-08 Chaos Software Ltd. Rendering images using modified multiple importance sampling
    US11977895B2 (en) 2020-06-03 2024-05-07 Intel Corporation Hierarchical thread scheduling based on multiple barriers
    US11308683B2 (en) 2020-06-29 2022-04-19 Imagination Technologies Limited Intersection testing in a ray tracing system using ray bundle vectors
    US11995767B2 (en) * 2020-08-17 2024-05-28 Intel Corporation Apparatus and method for compressing ray tracing acceleration structure build data
    US12067428B2 (en) 2020-12-21 2024-08-20 Intel Corporation Thread synchronization mechanism
    US11663775B2 (en) 2021-04-19 2023-05-30 Adobe, Inc. Generating physically-based material maps

    Also Published As

    Publication number Publication date
    CN115345769A (zh) 2022-11-15
    US20220366632A1 (en) 2022-11-17
    US11908064B2 (en) 2024-02-20

    Similar Documents

    Publication Publication Date Title
    DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
    DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
    DE102013022257B4 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
    DE112022004435T5 (de) Beschleunigung von Dreieckssichtbarkeitstests für Echtzeit-Strahlenverfolgung
    DE102020108218A1 (de) Vorrichtung und Verfahren zur Konstruktion von Begrenzungsvolumenhierarchien mit reduzierter Genauigkeit
    DE102019103326A1 (de) Robuste, effiziente multiprozessor-koprozessor-schnittstelle
    DE102019103058A1 (de) Verfahren für fortgesetzte begrenzungsvolumenhierarchietraversierung auf schnittpunkte ohne shader-intervention
    DE102020129003A1 (de) Vorrichtung und verfahren zum verwenden von alpha-werten zum verbessern einer strahlverfolgungseffizienz
    DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
    DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
    DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
    DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
    DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
    DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
    DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
    DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
    DE102020118860A1 (de) Techniken zum vorladen von texturen beim rendering von graphik
    DE102020131901A1 (de) Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors
    DE102022124599A1 (de) Vorrichtung und verfahren zur baumstrukturdatenreduzierung
    DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
    DE112020000865T5 (de) Speicherverwaltungssystem
    DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
    DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
    DE102021111335A1 (de) Techniken zum dynamischen komprimieren von speicherregionen, die einen einheitlichen wert haben
    DE102023124837A1 (de) Reduzierung falsch positiver Strahltraversierungen in einer Begrenzungsvolumen-Hierarchie

    Legal Events

    Date Code Title Description
    R012 Request for examination validly filed