DE102016109905A1 - Stückweise lineare unregelmäßige Rasterisierung - Google Patents

Stückweise lineare unregelmäßige Rasterisierung Download PDF

Info

Publication number
DE102016109905A1
DE102016109905A1 DE102016109905.8A DE102016109905A DE102016109905A1 DE 102016109905 A1 DE102016109905 A1 DE 102016109905A1 DE 102016109905 A DE102016109905 A DE 102016109905A DE 102016109905 A1 DE102016109905 A1 DE 102016109905A1
Authority
DE
Germany
Prior art keywords
region
horizontal
vertical
regions
geometry object
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
DE102016109905.8A
Other languages
English (en)
Inventor
Eric B. Lum
Justin Cobb
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 DE102016109905A1 publication Critical patent/DE102016109905A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • 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
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)

Abstract

Eine Ausführungsform der vorliegenden Erfindung umfasst ein Verfahren zum Rendern eines Geometrieobjekts in einer computererzeugten Szene. Ein Bildschirm-Raum, der einem Anzeigeschirm zugeordnet ist, wird in einen Satz von Regionen geteilt. Für jede Region; Teilen eines einem Anzeigeschirm zugeordneten Bildschirm-Raums in eine Mehrzahl von Regionen; für jede Region: wird ein erster Abtastfaktor in einer horizontalen Dimension berechnet, der einen horizontalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, ein zweiter Abtastfaktor in einer vertikalen Dimension berechnet, der einen vertikalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, ein erster Versatz in der horizontalen Dimension berechnet, der eine der Region zugeordnete horizontale Position darstellt, und ein zweiter Versatz in der vertikalen Dimension berechnet, der eine der Region zugeordnete vertikale Position darstellt. Wenn bestimmt wird, dass das Geometrieobjekt mehr als eine Region schneidet, wird eine Instanz des Geometrieobjekts für jede Region erzeugt, die das Geometrieobjekt schneidet.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Ausführungsformen der vorliegenden Erfindung betreffen allgemein eine Computergraphikverarbeitung und insbesondere eine stückweise lineare unregelmäßige Rasterisierung.
  • Beschreibung der Verwandten Technik
  • Die VR(virtual reality)-Brille ist eine zunehmend populäre Vorrichtung zum Erreichen eines immersiveren Erlebnisses beim Spielen von Computerspielen, Anschauen dreidimensionaler (3D) Spielfilme oder Betrachten von anderen 3D-Medieninhalten. Die VR-Brille wird am Kopf des Betrachters angebracht und blockiert Licht von der realen Umgebung ab. Die VR-Brille umfasst typischerweise zwei flache Anzeigeschirme, wobei ein Anzeigeschirm zum Betrachten durch das linke Auge und der andere Anzeigeschirm zum Betrachten durch das rechte Auge angebracht wird. Spielinhalte oder andere 3D-Medieninhalte werden an die beiden Anzeigeschirme übertragen, so dass der Betrachter die 3D-Inhalte beim Tragen der VR-Brille sehen kann. Weil die beiden Anzeigeschirme in einiger Entfernung vor den Augen des Betrachters angebracht sind, können die Anzeigeschirme von sich aus dem Betrachter keine peripheren Inhalte bereitstellen. Mit anderen Worten sieht der Betrachter Inhalte vor den Augen, wobei er jedoch die Inhalte über, unter oder zu den Seiten der beiden Anzeigeschirme nicht sieht.
  • Folglich umfasst die VR-Brille ebenfalls eine nichtlineare Verzerrungslinse vor jedem Anzeigeschirm. Die Verzerrungslinse bewirkt, dass die Inhalte nahe einem bestimmten Ort, wie beispielsweise der Mitte, des Anzeigeschirms optisch konvergieren, und bewirkt, dass der Inhalt nahe den Rändern des Anzeigeschirms optisch divergiert. Die divergierten Inhalte werden dann auf den peripheren Betrachtungsbereich der Augen des Betrachters projiziert. Als Ergebnis ist der Betrachter in der Lage, die 3D-Inhalte in der Peripherie des Betrachters sowie auch vor dem Betrachter zu sehen, was zu einem immersiveren Erlebnis einer virtuellen Realität führt.
  • Zusätzlich zu der VR-Brille werden diese Techniken ebenfalls für andere Breitbild-Render-Anwendungen verwendet, wie beispielsweise gekrümmte Betrachtungsoberflächen, die einen oder mehrere Anzeigeschirme umfassen. Derartige Breitbild-Render-Anwendungen umfassen gekrümmte Hochdefinitions- und Ultrahochdefinitions-Anzeigeschirme für Hausgebrauch und gekachelte Mehrbildschirmanzeigen für industrielle Anwendungen, wie beispielsweise Leitwarten. In derartigen Anwendungen verändert sich die von einem Betrachter wahrgenommene Entfernung zwischen angrenzenden Pixeln von einem Abschnitt des Anzeigeschirms zu einem anderen, was zu ähnlichen Verzerrungsartefakten wie jenen Artefakten führt, die beim Gebrauch einer VR-Brille beobachtet werden.
  • Obwohl nichtlineare Verzerrungslinsen den Vorteil bereitstellen, den Inhalt auf die Peripherie der Ansicht zu projizieren, weist diese Verzerrungslinse die unerwünschte Nebenwirkung auf, dass Objekte verzerrt erscheinen, die auf den Anzeigeschirmen gerendert und in die Augen des Betrachters projiziert werden. Eine häufige Form optischer Verzerrung ist die Kissenverzerrung, wobei der wahrgenommene Ort eines Punkts auf einem Objekt näher zu der Mitte des Anzeigeschirms relativ zu dem ist, wo der Punkt tatsächlich lokalisiert ist. Als Ergebnis scheint es so, als ob Objekte mit geraden Linien, wie beispielsweise Quadrate und Rechtecke, gekrümmte Ränder bei Betrachtung über eine VR-Brille aufweisen. Um diesem Phänomen zu begegnen, rendern Graphik-Verarbeitungseinheiten (GPUs) oder andere Prozessoren typischerweise 3D-Inhalte, die zur Betrachtung mit einer VR-Brille bestimmt sind, durch absichtliches Induzieren einer nichtlinearen Tonnenverzerrung, wobei der wahrgenommene Ort eines Punkts auf einem Objekt weiter weg von der Mitte des Anzeigeschirms relativ zu dem ist, wo der Punkt tatsächlich lokalisiert ist. Die induzierte Tonnenverzerrung wirkt der optischen Kissenverzerrung entgegen, so dass der Betrachter beim Tragen einer VR-Brille unverzerrte Inhalte sieht.
  • Ein Nachteil der obigen Vorgehensweise ist, dass die Inhalte nahe der Mitte des Anzeigeschirms vergrößert werden, während die Inhalt nahe den Rändern des Anzeigeschirms komprimiert werden. Folglich weisen die Inhalte direkt vor den Augen des Betrachters eine relativ niedrigere Auflösung auf, was zu Detailverlust führt. Mit anderen Worten werden zu wenige Pixel in der Mitte des Anzeigeschirms gerendert relativ zu der Anzahl gerenderter Pixel, die für ein hochqualitatives Betrachtungserlebnis benötigt werden. Dieser Detailverlust kann als weich, verschwommen oder blockartiges Video wahrgenommen werden. Im Gegensatz dazu weist der Inhalt in der Peripherie von dem, was der Betrachter sehen kann, eine größere Auflösung als die Auflösung auf, die für hochqualitatives Betrachten benötigt wird. Mit anderen Worten werden mehr Pixel nahe den Rändern des Anzeigeschirms gerendert relativ zu der Anzahl gerenderter Pixel, die für ein hochqualitatives Betrachtungserlebnis benötigt werden, was zur Verschwendung von Rechenressourcen führt.
  • Ein weiterer Nachteil der obigen Vorgehensweise ist, dass GPUs gewöhnlicherweise zum Rendern des Inhalts unter Verwendung eines linearen Rasters optimiert werden. Weil die optische Kissen-Linsenverzerrung nichtlinear ist, sollte idealerweise die durch die GPU während des Rendern induzierte Tonnenverzerrung ebenfalls nichtlinear sein. Rendern unter Verwendung eines nichtlinearen Rasters kann jedoch zu signifikant niedrigerer GPU Leistung relativ zum Rendern unter Verwendung eines linearen Rasters führen.
  • Wie das Vorhergehende veranschaulicht, ist das, was in der Technik benötigt wird, eine wirksamere Vorgehensweise zum Rendern von Inhalten für eine VR-Brille und anderen Breitbild-Render-Anwendungen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung legt ein Verfahren zum Rendern eines Geometrieobjekts in einer computererzeugten Szene dar. Das Verfahren umfasst Teilen eines einem Anzeigeschirm zugeordneten Bildschirm-Raums in eine Menge von Regionen. Das Verfahren umfasst ferner, für jede Region; Berechnen eines ersten Abtastfaktors in einer horizontalen Dimension, der einen horizontalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, Berechnen eines zweiten Abtastfaktors in einer vertikalen Dimension, der einen vertikalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, Berechnen eines ersten Versatzes in der horizontalen Dimension, der eine der Region zugeordnete horizontale Position darstellt, und Berechnen eines zweiten Versatzes in der vertikalen Dimension, der eine der Region zugeordnete vertikale Position darstellt. Das Verfahren umfasst ferner Bestimmen, dass das Geometrieobjekt mehr als eine Region schneidet. Das Verfahren umfasst ferner Erzeugen einer ersten Instanz des Geometrieobjekts für eine erste Region, die das Geometrieobjekt schneidet. Das Verfahren umfasst ferner Erzeugen einer zweiten Instanz des Geometrieobjekts für eine zweite Region, die das Geometrieobjekt schneidet.
  • Andere Ausführungsformen der vorliegenden Erfindung umfassen, ohne einschränkend zu sein, ein computerlesbares Medium, das Anweisungen zum Durchführen eines oder mehrerer Aspekte der offenbarten Techniken umfasst, sowie auch ein System zum Durchführen eines oder mehrerer Aspekte der offenbarten Techniken.
  • Ein Vorteil der offenbarten Technik ist, dass die nahe dem Rand des Bildschirm-Raums lokalisierten Pixel mit niedrigerer Auflösung gerendert werden, was zu einer verbesserten Leistung relativ zu vorbekannten Breitbild-Rendering-Techniken führt.
  • Es sei zu verstehen, dass die oben erwähnten Merkmale und nachstehend noch zu erläuternden Merkmale nicht nur in den jeweiligen angegebenen Kombinationen verwendet werden können, sondern ebenfalls in anderen Kombinationen oder in Alleinstellung verwendet werden können, ohne vom Umfang der vorliegenden Erfindung abzuweichen. Merkmale der oben erwähnten Aspekte und Ausführungsformen können in anderen Ausführungsformen miteinander kombiniert werden, soweit nicht explizit anders erwähnt.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Um die Art und Weise anzugeben, in der die oben genannten Merkmale der vorliegenden Erfindung im Detail zu verstehen sind, kann eine detailliertere Beschreibung der Erfindung, die oben kurz zusammengefasst ist, mit Bezug auf Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es sei jedoch bemerkt, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen dieser Erfindung darstellen und daher nicht als einschränkend für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulassen kann.
  • 1 ist ein Blockdiagramm, das ein Computersystem darstellt, das ausgelegt ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu implementieren;
  • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit, die in dem Parallelverarbeitungssubsystem von 1 umfasst ist, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3A ist ein Blockdiagramm eines allgemeinen Verarbeitungs-Clusters, der in der Parallelverarbeitungseinheit von 2 umfassen ist, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3B ist ein Konzeptdiagramm einer Graphikverarbeitungs-Pipeline, die in der Parallelverarbeitungseinheit von 2 2 implementiert werden kann, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist ein Konzeptdiagramm einer Cache-Kachel, für welche die Graphikverarbeitungs-Pipeline von 3B ausgelegt ist, diese zu erzeugen und zu verarbeiten, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5 ist eine detaillierte Ansicht eines Abschnitts der Graphikverarbeitungs-Pipeline von 3B gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6A6D veranschaulichen beispielhafte Abtastraster, die während der stückweisen unregelmäßigen Rasterisierung implementiert werden können, gemäß verschiedener Ausführungsformen der vorliegenden Erfindung; und
  • 7 veranschaulicht ein Ablaufdiagramm von Verfahrensschritten zum Durchführen des stückweisen unregelmäßigen Rendern gemäß einer Ausführungsform der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung bereitzustellen. Jedoch erkennt ein Fachmann auf diesem Gebiet, dass die vorliegende Erfindung ohne eine oder mehrerer dieser spezifischen Einzelheiten praktiziert werden kann.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, das ein Computersystem 100 veranschaulicht, das ausgelegt ist, um ein oder mehrere Aspekte der vorliegenden Erfindung zu implementieren. Wie gezeigt, umfasst das Computersystem 100, ohne einschränkend zu sein, eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über eine Speicherbrücke 105 und einen Kommunikationspfad 113 mit einem Parallelverarbeitungssubsystem 112 verbunden sind. Die Speicherbrücke 105 ist ferner mit einer I/O-(Eingangs/Ausgangs-)Brücke 107 über einen Kommunikationspfad 106 verbunden, und die I/O-Brücke 107 ist ihrerseits mit einem Schalter 116 verbunden.
  • Im Betrieb ist die I/O-Brücke 107 ausgelegt, um Anwendereingabeinformation aus Eingabevorrichtungen 108, wie beispielsweise einer Tastatur oder einer Maus, zu erhalten und die Eingabeinformation an die CPU 102 zur Verarbeitung über den Kommunikationspfad 106 und die Speicherbrücke 105 weiterzuleiten. Der Schalter 116 ist ausgelegt, um Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten des Computersystems 100, wie beispielsweise einem Netzwerkadapter 118 und verschiedenen Zusatzkarten 120 und 121, bereitzustellen.
  • Wie ebenfalls gezeigt, ist die I/O-Brücke 107 mit einer Systemdiskette 114 verbunden, die ausgelegt sein kann, um Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Allgemein stellt die Systemdiskette 114 nicht-flüchtigen Speicherplatz für Anwendungen und Daten bereit und kann fest installierte oder entfernbare Festplattenlaufwerke, Flash-Speichervorrichtungen und CD-(Kompaktdisketten-Nur-Lese-Speicher), DVD-(digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (hochauflösende DVD) oder andere magnetische, optische oder elektronische Speichervorrichtungen umfassen. Schließlich können, obwohl nicht explizit gezeigt, weitere Komponenten, wie beispielsweise ein universeller serieller Bus oder andere Portverbindungen, Kompaktdisketten-Laufwerke, DVD(digitale Vielseitigkeitsdisketten)-Laufwerke, Filmaufzeichnungsvorrichtungen und dergleichen ebenfalls mit der I/O-Brücke 107 verbunden sein.
  • In verschiedenen Ausführungsformen kann die Speicherbrücke 105 ein Nordbrücken-Chip und die I/O-Brücke 107 kann ein Südbrücken-Chip sein. Des Weiteren können die Kommunikationspfade 106 und 113 sowie andere Kommunikationspfade innerhalb des Computersystems 100 unter Verwendung beliebiger technisch geeigneter Protokolle implementiert werden, einschließlich, ohne einschränkend zu sein, AGP (beschleunigter Graphikport), HyperTransport oder anderer im Stand der Technik bekannter Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokolle.
  • In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 Teil eines Graphiksubsystems, das Pixel an eine Anzeigevorrichtung 110 liefert, die eine beliebige herkömmliche Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. In derartigen Ausführungsformen umfasst das Parallelverarbeitungssubsystem 112 Schaltungen, die für Graphik- oder Videoverarbeitung optimiert sind, wozu beispielsweise Video-Ausgabeschaltungen gehören. Wie nachfolgend in 2 detaillierter beschrieben ist, können derartige Schaltungen in einer oder mehreren Parallelverarbeitungseinheiten (PPUs) umfasst sein, die in dem Parallelverarbeitungssubsystem 112 umfasst sind. In anderen Ausführungsformen umfasst das Parallelverarbeitungssubsystem 112 eine Schaltung, die für eine Verarbeitung für Allgemeinzwecke und/oder für eine Rechenverarbeitung optimiert ist. Eine derartige Schaltung kann ihrerseits in einer oder mehreren PPUs umfasst sein, die in dem Parallelverarbeitungssubsystem 112 umfasst sind und die ausgelegt sind, derartige Operationen für Allgemeinzwecke und/oder Berechnungen auszuführen. In noch anderen Ausführungsformen kann die eine oder mehrere PPUs, die in dem Parallelverarbeitungssubsystem 112 umfasst sind, ausgelegt sein, Operationen für eine Graphikverarbeitung, eine Verarbeitung für Allgemeinzwecke und eine Verarbeitung von Berechnungen auszuführen. Der Systemspeicher 104 umfasst mindestens einen Vorrichtungstreiber 103, der ausgelegt ist, um die Verarbeitungsoperationen der einen oder der mehreren PPUs in dem Parallelverarbeitungssubsystem 112 zu verwalten.
  • In verschiedenen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 in einem oder mehreren anderen der anderen Elemente von 1 integriert sein, um ein einzelnes System zu bilden. Beispielsweise kann das Parallelverarbeitungssubsystem 112 mit der CPU 102 und anderen Verbindungsschaltungen auf einem einzelnen Chip integriert sein, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hier gezeigte System veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl an CPUs 102 und der Anzahl an Parallelverarbeitungssubsystemen 112, können nach Bedarf modifiziert werden. Beispielsweise könnte in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über die Speicherbrücke 105 verbunden sein, und andere Vorrichtungen könnten mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102 kommunizieren. In anderen alternativen Topologien kann das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt über die Speicherbrücke 105 verbunden sein. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt als ein oder mehrere diskrete Bauelemente vorhanden zu sein. Schließlich können in bestimmten Ausführungsformen eine oder mehrere der in 1 gezeigten Komponenten nicht vorhanden sein. Beispielsweise könnte der Schalter 116 weggelassen werden, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 könnten direkt mit der I/O-Brücke 107 verbunden sein.
  • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit (PPU) 202, die in dem Parallelverarbeitungssubsystem 112 von 1 umfassen ist, gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl 2 eine PPU 202 darstellt, kann, wie oben angegeben ist, das Parallelverarbeitungssubsystem 112 eine beliebige Anzahl an PPUs 202 umfassen. Wie gezeigt, ist die PPU 202 mit einem lokalen Parallelverarbeitungs(PP)-Speicher 204 verbunden. Die PPU 202 und der PP-Speicher 204 können unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen, wie beispielsweise programmierbaren Prozessoren, anwendungsspezifischen integrierten Schaltungen (ASIC) oder Speichervorrichtungen oder in irgendeiner anderen technisch machbaren Art und Weise implementiert sein.
  • In einigen Ausführungsformen umfasst die PPU 202 eine graphische Verarbeitungseinheit (GPU), die ausgelegt sein kann, um eine Graphik-Rendering-Pipeline zu implementieren, um verschiedene Operationen auszuführen, die mit der Erzeugung von Pixeldaten auf der Grundlage von Graphikdaten in Beziehung stehen, die von der CPU 102 und/oder dem Systemspeicher 104 zugeführt werden. Wenn Graphikdaten verarbeitet werden, kann der PP-Speicher 204 als ein Graphikspeicher verwendet werden, der einen oder mehrere herkömmliche Frame-Puffer und bei Bedarf auch ein oder mehrere andere Render-Ziele speichert. Unter anderem kann der PP-Speicher 204 verwendet werden, um Pixeldaten zu speichern und zu aktualisieren und endgültige Pixeldaten oder Anzeigeblöcke zu der Anzeigevorrichtung 110 zur Darstellung zu leiten. In einigen Ausführungsformen kann die PPU 202 ebenfalls für Allzweckverarbeitung und Rechenoperationen ausgelegt sein.
  • Während des Betriebs ist die CPU 102 der Master-Prozessor des Computersystems 100, der den Betrieb anderer Systemkomponenten steuert und koordiniert. 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 Befehlen für die PPU 202 in eine Datenstruktur (in 1 oder 2 nicht explizit gezeigt), die im Systemspeicher 104, im PP-Speicher 204 oder an einer anderen Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen können. Ein Zeiger auf die Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms von Befehlen in der Datenstruktur einzuleiten. Die PPU 202 liest Befehlsströme aus dem Schiebepuffer aus und führt dann Befehle asynchron relativ zu der Betriebsweise der CPU 102 aus. In Ausführungsformen, in denen mehrere Schiebepuffer erzeugt werden, können Prioritäten für die Ausführung für jeden Schiebepuffer durch ein Anwendungsprogramm über den Vorrichtungstreiber 103 angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.
  • Wie ebenfalls gezeigt, umfasst die PPU 202 eine I/O(Eingabe/Ausgabe)-Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 und die Speicherbrücke 105 kommuniziert. Die I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ebenfalls alle ankommenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113 und leitet die ankommenden Pakete zu geeigneten Komponenten der PPU 202. Beispielsweise können Befehle, die mit Verarbeitungsaufgaben in Bezug stehen, an eine übergeordnete Schnittstelle bzw. Master-Schnittstelle 206 geleitet werden, während Befehle, die mit Speicheroperationen in Verbindung stehen (beispielsweise Auslesen aus dem und Schreiben in den PP-Speicher 204) zu einer Kreuzungseinheit 210 gesendet werden. Die Master-Schnittstelle 206 liest jeden Schiebepuffer aus und sendet den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212.
  • Wie zuvor in Verbindung mit 1 erwähnt, kann die Verbindung der PPU 202 mit dem Rest des Computersystems 100 unterschiedlich sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112, das mindestens eine PPU 202 umfasst, als eine Zusatzkarte implementiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann die PPU 202 auf einem einzelnen Chip mit einer Busbrücke, wie beispielsweise der Speicherbrücke 105 oder der I/O-Brücke 107, integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einer einzelnen integrierten Schaltung oder einem System auf einem Chip (SoC) umfasst sein.
  • Während des Betriebs sendet der Frontbereich 212 Verarbeitungsaufgaben, die aus der Master-Schnittstelle 206 empfangen werden, an eine Arbeitsverteilungseinheit (nicht gezeigt) in der Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) codiert und im Speicher gespeichert sind. Die Zeiger auf die TMD sind in einem Befehlsstrom umfasst, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Master-Schnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, umfassen Indizes, die den zu verarbeitenden Daten zugeordnet sind, sowie Zustandsparameter und Befehle, die festlegen, wie die Daten zu verarbeiten sind. Beispielsweise können die Zustandsparameter und die Befehle das Programm festlegen, das an den Daten auszuführen ist. Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die von jedem Satz der TMD spezifizierte Verarbeitungsaufgabe initiiert wird. Es kann eine Priorität für jeden Satz an TMD spezifiziert werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können ferner aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter umfassen, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste an Verarbeitungsaufgaben (oder einer Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzugefügt werden, wodurch eine weitere Ebene an Steuerung zusätzlich zur Ausführungspriorität bereitgestellt wird.
  • Die PPU 202 implementiert vorteilhafterweise eine hoch parallele Verarbeitungsarchitektur auf der Grundlage eines Verarbeitungs-Cluster-Arrays 230, das eine Gruppe aus C allgemeinen Verarbeitungs-Clustern (GPCs) 208 umfasst, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise Hunderte oder Tausende) von Threads gleichzeitig auszuführen, wobei jeder Thread eine Instanz eines Programms ist. In verschiedenen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung von unterschiedlichen Arten von Programmen oder zum Durchführen unterschiedlicher Arten von Berechnungen zugeteilt werden. Die Zuteilung von GPCs 208 kann abhängig von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.
  • Eine Speicherschnittstelle 214 umfasst eine Gruppe aus D Partitionseinheiten 215, wobei D ≥ 1 ist. Jede Partitionseinheit 215 ist mit einem oder mehreren dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220 verbunden, die in dem PP-Speicher 204 liegen. In einer Ausführungsform ist die Anzahl an Partitionseinheiten 215 gleich der Anzahl an DRAMs 220, und jede Partitionseinheit 215 ist mit einem anderen DRAM 220 verbunden. In anderen Ausführungsformen unterscheidet sich die Anzahl an Partitionseinheiten 215 von der Anzahl an DRAMs 220. Fachleute werden erkennen, dass ein DRAM 220 durch eine beliebige andere technisch geeignete Speichervorrichtung ersetzt werden kann. Im Betrieb können verschiedene Render-Ziele, wie beispielsweise Texturzuordnungen und Frame-Puffer, über die DRAMs 220 hinweg gespeichert werden, wodurch es den Partitionseinheiten 215 ermöglicht wird, Abschnitte jedes Render-Ziels parallel zu beschreiben, um die verfügbare Bandbreite des PP-Speichers 204 effizient zu nutzen.
  • Ein gegebener GPC 208 kann Daten verarbeiten, die in einen oder mehrere der DRAMs 220 in dem PP-Speicher 204 zu schreiben sind. Die Kreuzungseinheit 210 ist ausgelegt, um die Ausgabe jedes GPC 208 zu dem Eingang irgendeiner Partitionseinheit 215 oder zu einem anderen GPC 208 zur weiteren Verarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um verschiedene DRAMs 220 auszulesen oder diese zu beschreiben. In einer Ausführungsform weist die Kreuzungseinheit 210 eine Verbindung zu der I/O-Einheit 205 zusätzlich zu einer Verbindung zu dem PP-Speicher 204 über die Speicherschnittstelle 214 auf, wodurch die Verarbeitungskerne in den unterschiedlichen GPCs 208 in die Lage versetzt werden, mit dem Systemspeicher 104 oder mit einem anderen Speicher, der nicht lokal zu der PPU 202 ist, zu kommunizieren. In der Ausführungsform von 2 ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. In verschiedenen Ausführungsformen kann die Kreuzungseinheit 210 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Die GPCs 208 können ihrerseits so programmiert sein, dass sie Verarbeitungsaufgaben ausführen, die mit einer weiten Vielfalt von Anwendungen in Beziehung stehen, einschließlich, ohne einschränkend zu sein, lineare und nicht-lineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung von Position, Geschwindigkeit und anderen Attributen von Objekten), Bild-Rendering-Operationen (beispielsweise Programme zur Parkettierung-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel/Fragment-Schattierung), allgemeine Berechnungsmethoden, usw. Im Betrieb ist die PPU 202 ausgelegt, um Daten von dem Systemspeicher 104 und/oder dem PP-Speicher 204 an eine oder mehrere chipinterne Speichereinheiten zu übertragen, die Daten zu verarbeiten und Ergebnisdaten zurück in den Systemspeicher 104 und/oder den PP-Speicher 204 zu schreiben. Auf die Ergebnisdaten kann von anderen Systemkomponenten dann zugegriffen werden, wozu die CPU 102, eine weitere PPU 202 innerhalb des Parallelverarbeitungssubsystems 112 oder eines weiteren Parallelverarbeitungssubsystems 112 in dem Computersystem 100 gehören.
  • Wie zuvor bemerkt, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 umfasst sein. Beispielsweise können mehrere PPUs 202 in einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 113 verbunden werden, oder eine oder mehrere der PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich voneinander sein. Beispielsweise können unterschiedliche PPUs 202 eine unterschiedliche Anzahl an Verarbeitungskernen und/oder unterschiedliche Größen des PP-Speichers 204 aufweisen. In Ausführungsformen, 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 wäre. Systeme, in denen eine oder mehrere PPUs 202 umfasst sind, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, wozu gehören, ohne einschränkend zu sein, Tischrechner, Mobilrechner, handgehaltene Personalcomputer oder andere handgehaltene Vorrichtungen, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen.
  • 3A ist ein Blockdiagramm eines GPC 208, der in der PPU 202 von 2 umfasst ist, gemäß einer Ausführungsform der vorliegenden Erfindung. Im Betrieb kann der GPC 208 ausgelegt sein, eine große Anzahl an Threads parallel auszuführen, um Operationen für Graphik, allgemeine Verarbeitung und/oder Berechnungen auszuführen. Wie hier verwendet, bezeichnet ein „Thread” eine Instanz eines speziellen Programms, das an einer speziellen Menge an Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehl, Mehrfach-Daten(SIMD)-Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Threads zu unterstützen, ohne mehrere unabhängige Befehlseinheiten bereitzustellen. In anderen Ausführungsformen werden Einzelbefehl, Mehrfach-Thread(SIMT)-Techniken eingesetzt, um die parallele Ausführung einer großen Anzahl an allgemein synchronisierten Threads zu unterstützen, wobei eine gemeinsame Befehlseinheit ausgelegt ist, um Befehle an eine Gruppe von Verarbeitungseinheiten innerhalb des GPC 208 auszugeben. Anders als ein SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, erlaubt eine SIMT-Ausführung, dass unterschiedliche Threads effizienter divergenten Ausführungspfaden durch ein gegebenes Programm hindurch folgen. Fachleute werden erkennen, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des GPC 208 wird über einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben, die aus einer Arbeitsverteilungseinheit (nicht gezeigt) in der Aufgaben/Arbeitseinheit 207 empfangen werden, an einen oder mehrere Datenstrom-Multiprozessoren (SMs) 310 verteilt. Der Pipeline-Verwalter 305 kann ebenfalls ausgelegt sein, um eine Arbeitsverteilungs-Kreuzungseinheit 330 durch Angabe von Zielen für verarbeitete Daten, die von den SM 310 ausgegeben werden, zu steuern.
  • In einer Ausführungsform umfasst der GPC 208 eine Gruppe M von SMs 310, wobei M ≥ 1 ist. Ferner umfasst jeder SM 310 eine Gruppe von Funktionsausführungseinheiten (nicht gezeigt), wie beispielsweise Ausführungseinheiten und Lade-Speicher-Einheiten. Die Verarbeitung von Operationen, die speziell für jegliche der Funktionsausführungseinheiten sind, kann als Pipeline betrieben bzw. parallel ausgeführt werden, wodurch es möglich ist, dass ein neuer Befehl zur Ausführung ausgegeben wird, bevor die Ausführung eines vorhergehenden Befehls abgeschlossen wurde. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten in einem gegebenen SM 310 bereitgestellt werden. Die Funktionsausführungseinheiten können in verschiedenen Ausführungsformen ausgelegt sein, um eine Vielzahl unterschiedlicher Operationen zu unterstützen, wozu Ganzzahl- und Fließkommaarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, boolesche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung verschiedener algebraischer Funktionen (beispielsweise ebene Interpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.) gehören. Vorteilhafterweise kann die gleiche Funktionsausführungseinheit ausgelegt sein, um unterschiedliche Operationen auszuführen.
  • Im Betrieb ist jeder SM 310 ausgelegt, um eine oder mehrere Threadgruppen zu verarbeiten. Wie hier verwendet, bedeutet eine „Threadgruppe” oder „Wölbung” eine Gruppe von Threads, die gleichzeitig das gleiche Programm an unterschiedlichen Eingangsdaten ausführen, wobei ein Thread der Gruppe einer unterschiedlichen Ausführungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Threadgruppe kann weniger Threads umfassen als es der Anzahl an Ausführungseinheiten innerhalb des SM 310 entspricht, in welchem Falle einige der Ausführungseinheiten während Zyklen untätig sein können, wenn diese Threadgruppe verarbeitet wird. Eine Threadgruppe kann auch mehr Threads umfassen, als dies der Anzahl an Ausführungseinheiten innerhalb des SM 310 entspricht, in welchem Falle die Verarbeitung sich über aufeinander folgende Taktzyklen erstrecken kann. Da jeder SM 310 bis zu G Threadgruppen gleichzeitig unterstützen kann, folgt, dass bis zu G·M Threadgruppen in dem GPC 208 gleichzeitig ausgeführt werden können.
  • Außerdem kann eine Mehrzahl von Beziehung stehender Threadgruppen gleichzeitig in einem SM 310 aktiv sein (in unterschiedlichen Phasen der Ausführung). Diese Ansammlung an Threadgruppen wird hier als ein „kooperatives Thread-Array” („CTA”) oder als „Thread-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl an gleichzeitig ausgeführten Threads in einer Threadgruppe ist, was typischerweise ein ganzzahliges Vielfaches der Anzahl an Ausführungseinheiten innerhalb des SM 310 ist, und m die Anzahl an Threadgruppen ist, die gleichzeitig in dem SM 310 aktiv sind.
  • Obwohl in 3A nicht gezeigt, umfasst jeder SM 310 einen Cache-Speicher der Ebene eins (L1) oder verwendet Platz in einem entsprechenden L1-Cache-Speicher außerhalb des SM 310, um unter anderem Lade- und Speicher-Operationen zu unterstützen, die von den Ausführungseinheiten durchgeführt werden. Jeder SM 310 weist ferner Zugriff auf Cache-Speicher der Ebene zwei (L2) (nicht gezeigt) auf, die gemeinsam von allen GPCs 208 in der PPU 202 verwendet werden. Die L2-Cache-Speicher können verwendet werden, um Daten zwischen Threads auszutauschen. Schließlich können die SMs 310 auch Zugriff auf einen chipexternen „globalen” Speicher aufweisen, der den PP-Speicher 204 und/oder den Systemspeicher 104 umfassen kann. Ferner ist zu beachten, dass ein beliebiger Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Wie außerdem in 3A gezeigt ist, kann ein Cache-Speicher der Ebene eins-Punkt-fünf (L1.5) in dem GPC 208 verwendet werden und ausgelegt sein, um aus dem Speicher über die Speicherschnittstelle 214 von den SM 310 angeforderte Daten zu empfangen und zu halten. Derartige Daten können umfassen, ohne einschränkend zu sein, Anweisungen, gleichförmige Daten und konstante Daten. In Ausführungsformen mit mehreren SMs 310 innerhalb des GPC 208 können die SM 310 vorteilhafterweise gemeinsame Befehle und Daten, die in dem L1.5-Cache-Speicher 325 zwischengespeichert sind, gemeinsam nutzen.
  • Jeder GPC 208 kann eine zugeordnete Speicherverwaltungseinheit (MMU) 320 aufweisen, die ausgelegt ist, virtuelle Adressen auf physikalische Adressen abzubilden. In verschiedenen Ausführungsformen kann die MMU 320 entweder in dem GPC 208 liegen oder in der Speicherschnittstelle 214 liegen. Die MMU 320 umfasst eine Gruppe aus Seitentabelleneinträgen (PTE), die verwendet werden, um eine virtuelle Adresse in eine physische Adresse einer Kachel oder einer Speicherseite abzubilden und optional einem Cache-Zeilenindex zuzuordnen. Die MMU 320 kann Adressen-Translations-Nebenschaupuffer (TLB) oder Cache-Speicher umfassen, die in den SMs 310 in einem oder mehreren L1-Cache-Speichern oder in dem GPC 208 liegen können.
  • Der GPC 208 kann in Graphik- und Rechenanwendungen ausgelegt sein, so dass jeder SM 310 mit einer Textureinheit 315 zum Durchführen von Texturabbildungsanforderungen, wie beispielsweise der Bestimmung von Texturabtastpositionen, dem Auslesen von Texturdaten und der Filterung von Texturdaten, verbunden ist.
  • Im Betrieb sendet jeder SM 310 eine verarbeitete Aufgabe an die Arbeitsverteilungs-Kreuzungseinheit 330, um die verarbeitete Aufgabe einem weiteren GPC 208 für die Weiterverarbeitung bereitzustellen, oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher (nicht gezeigt), dem Parallelverarbeitungsspeicher 204 oder dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Außerdem ist eine Vor-Rasteroperationen(vor-ROP)-Einheit 325 ausgelegt, um Daten aus dem SM 310 zu empfangen, Daten einer oder mehreren Rasteroperationen(ROP)-Einheiten in den Partitionseinheiten 215 zuzuführen, Optimierungen zur Farbmischung auszuführen, Pixel-Farbdaten zu organisieren und Adressenübersetzungen auszuführen.
  • Zu beachten ist, dass die hier beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Unter anderem kann eine beliebige Anzahl an Verarbeitungseinheiten, wie beispielsweise SMs 310, Textureinheiten 315 oder Vor-ROP-Einheiten 325 in dem GPC 208 umfasst sein. Wie ferner oben in Verbindung mit 2 beschrieben ist, kann die PPU 202 eine beliebige Anzahl an GPCs 208 umfassen, die ausgelegt sind, um funktionsmäßig zueinander ähnlich zu sein, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 eine bestimme 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. Im Hinblick auf das zuvor Gesagte erkennen Fachleute, dass die in 13A beschriebene Architektur in keiner Weise für den Schutzbereich der vorliegenden Erfindung einschränkend ist.
  • Graphik-Pipeline-Architektur
  • 3B ist ein Konzeptdiagramm einer Graphikverarbeitungs-Pipeline 350, die in der PPU 202 von 2 gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann. Wie gezeigt, umfasst die Graphikverarbeitungs-Pipeline 350, ohne einschränkend zu sein, eine Verteilereinheit für Grundelemente (PD) 355; eine Vertex-Attributabholeinheit (VAF) 360; eine Vertex-, Parkettierung-, Geometrie-Verarbeitungseinheit (VTG) 365; eine Darstellungsfeldskalier-, Auswahl- und Schneide-Einheit (VPC) 370; eine Kacheleinheit 375, eine Einrichtungseinheit (Setup) 380, eine Rastereinheit (Rastereinheit) 385; eine Fragment-Verarbeitungseinheit, auch als eine Pixel-Schattierungseinheit (PS) 390 bezeichnet, und eine Raster-Operationen-Einheit (ROP) 395.
  • Die PD 355 sammelt Vertex-Daten, die Oberflächen höherer Ordnung, graphischen Grundelementen und dergleichen zugeordnet sind, aus dem Frontbereich 212 und sendet die Vertex-Daten an die VAF 360.
  • Die VAF 360 ruft Vertex-Attribute, die jedem der ankommenden Vertices zugeordnet sind, aus dem gemeinsam benutzten Speicher ab und speichert die Vertex-Daten zusammen mit den zugeordneten Vertex-Attributen in dem gemeinsam benutzten Speicher.
  • Die VTG 365 ist eine programmierbare Ausführungseinheit, die ausgelegt ist, um Vertex-Schattierungsprogramme, Parkettierung Programme und Geometrieprogramme auszuführen. Diese Programme verarbeiten Vertex-Daten und Vertex-Attribute, die aus der VAF 360 empfangen werden, und erzeugen graphische Grundelemente, wie beispielsweise Farbwerte, Vektoren der Oberflächennormalen und Transparenzwerte an jedem Vertex für die graphischen Grundelemente für die weitere Verarbeitung innerhalb der Graphikverarbeitungs-Pipeline 350. Obwohl dies nicht explizit gezeigt ist, kann die VTG 365 in einigen Ausführungsformen eine oder mehrere der folgenden Einheiten umfassen: eine Vertex-Verarbeitungseinheit, eine Parkettierung-Initialisierungs-Verarbeitungseinheit, eine Aufgabenerzeugungseinheit, eine Aufgabenverteilungseinheit, eine Topologie-Erzeugungseinheit, eine Parkettierung-Verarbeitungseinheit und eine Geometrie-Verarbeitungseinheit.
  • Die Vertex-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgelegt ist, Vertex-Schattierungsprogramme, Beleuchtung und Transformation von Vertex-Daten, wie sie von den Vertex-Schattierungsprogrammen angegeben werden, zu verarbeiten. Beispielsweise kann die Vertex-Verarbeitungseinheit programmiert sein, um die Vertex-Daten aus einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis, wie beispielsweise einen Welt-Raum oder in einen Raum mit normierten Vorrichtungskoordinaten (NDC) umzuwandeln. Die Vertex-Verarbeitungseinheit kann Vertex-Daten und Vertex-Attribute auslesen, die in einem gemeinsam benutzten Speicher von der VAF gespeichert wurden, und kann die Vertex-Daten und die Vertex-Attribute verarbeiten. Die Vertex-Verarbeitungseinheit 415 speichert verarbeitete Vertices in einem gemeinsam benutzten Speicher.
  • Die Parkettierung-Initialisierungs-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgelegt ist, Parkettierungs-Initialisierungs-Schattierungsprogramme auszuführen. Die Parkettierung-Initialisierungs-Verarbeitungseinheit verarbeitet Vertices, die von der Vertex-Verarbeitungseinheit erzeugt wurden, und erzeugt graphische Grundelemente, die als Flecken (patches) bekannt sind. Die Parkettierung-Initialisierungs-Verarbeitungseinheit erzeugt ferner verschiedene Attribute für Flecken. Die Parkettierung-Initialisierungs-Verarbeitungseinheit speichert dann die Fleckendaten und Fleckenattribute in dem gemeinsam benutzten Speicher. In einigen Ausführungsformen kann das Parkettierung-Initialisierungs-Schattierungsprogramm eine Hüllenschattierung oder eine Parkettierungs-Steuer-Schattierung genannt werden.
  • Die Aufgabenerzeugungseinheit ruft Daten und Attribute für Vertices und Flecken aus dem gemeinsam benutzten Speicher ab. Die Aufgabenerzeugungseinheit erzeugt Aufgaben zur Verarbeitung der Vertices und Flecken für die Verarbeitung durch spätere Stufen in der Graphikverarbeitungs-Pipeline 350.
  • Die Aufgabenverteilungseinheit verteilt die von der Aufgabenerzeugungseinheit erzeugten Aufgaben um. Die von den verschiedenen Instanzen des Vertex-Schattierungsprogramms und dem Parkettierung-Initialisierungsprogramm erzeugten Aufgaben können von der einen Graphikverarbeitungs-Pipeline 350 zu einer anderen deutlich unterschiedlich sein. Die Aufgabenverteilungseinheit verteilt diese Aufgaben derart um, dass jede Graphikverarbeitungs-Pipeline 350 während späterer Pipeline-Stufen ungefähr die gleiche Arbeitslast aufweist.
  • Die Topologie-Erzeugungseinheit ruft von der Aufgabenverwaltungseinheit verteilte Aufgaben ab. Die Topologie-Erzeugungseinheit indiziert die Vertices, einschließlich von Vertices, die Flecken zugeordnet sind, und berechnet (U, V) Koordinaten für Parkettierungs-Vertices und die Indizes, welche die parkettartig verteilten Vertices verbinden, um graphische Grundelemente zu bilden. Die Topologie-Erzeugungseinheit speichert dann die indizierten Vertices in dem gemeinsam benutzten Speicher.
  • Die Parkettierung-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgelegt ist, um Parkettierung-Schattierungsprogramme auszuführen. Die Parkettierung-Verarbeitungseinheit liest Eingangsdaten aus dem gemeinsam benutzten Speicher und schreibt Ausgangsdaten in diesen hinein. Diese Ausgangsdaten in dem gemeinsam benutzten Speicher werden an die nächste Schattierungsstufe, d. h. die Geometrie-Verarbeitungseinheit 445, als Eingangsdaten weitergegeben. In einigen Ausführungsformen kann das Parkettierung-Schattierungsprogramm als eine Bereichsschattierungseinheit oder eine Parkettierung-Bewertungs-Schattierungseinheit bezeichnet werden.
  • Die Geometrie-Verarbeitungseinheit ist eine programmierbare Ausführungseinheit, die ausgelegt ist, Geometrie-Schattierungsprogramme auszuführen, wodurch graphische Grundelemente transformiert werden. Es werden Vertices gruppiert, um graphische Grundelemente für die Verarbeitung zu bilden, wobei graphische Grundelemente Dreiecke, Liniensegmente, Punkte und dergleichen umfassen. Beispielsweise kann die Geometrie-Verarbeitungseinheit so programmiert sein, dass die graphischen Grundelemente in ein oder mehrere neue graphische Grundelemente unterteilt werden, und um Parameter zu berechnen, wie beispielsweise Koeffizienten für eine Ebenengleichung, die verwendet werden, um die neuen graphischen Grundelemente in Raster einzuteilen.
  • Die Geometrie-Verarbeitungseinheit sendet die Parameter und die Vertices, die die neuen graphischen Grundelemente angeben, an die VPC 370. Die Geometrie-Verarbeitungseinheit kann Daten auslesen, die in dem gemeinsam benutzten Speicher gespeichert sind, um diese bei der Verarbeitung der Geometriedaten zu verwenden. Die VPC 370 führt Schneidevorgänge, Auswahlvorgänge, perspektivische Korrekturen und eine Transformation des Darstellungsfeldes durch, um zu ermitteln, welche graphischen Grundelemente in dem schließlich erzeugten Bild potentiell betrachtet werden können, und welche graphischen Grundelemente potentiell nicht betrachtet werden können. Die VPC 370 sendet dann die verarbeiteten graphischen Grundelemente an die Kacheleinheit 375.
  • Die Kacheleinheit 375 ist eine Einheit zum Sortieren graphischer Grundelemente, die zwischen einer Welt-Raum-Pipeline 252 und einer Bildschirm-Raum-Pipeline 354 liegt, wie dies hier näher beschrieben ist. Graphische Grundelemente werden in der Welt-Raum-Pipeline 352 verarbeitet und anschließend an die Kacheleinheit 375 übergeben. Der Bildschirm-Raum wird in Cache-Kacheln unterteilt, wobei jede Cache-Kachel einem Bereich des Bildschirm-Raums zugeordnet ist. Für jedes graphisches Grundelement ermittelt die Kacheleinheit 375 die Gruppe aus Cache-Kacheln, die einen Schnittpunkt mit den graphischen Grundelementen aufweisen, wobei dieser Vorgang als „unterteilen in Kacheln” bezeichnet wird. Nachdem eine gewisse Anzahl an graphischen Grundelementen in Kacheln unterteilt ist, verarbeitet die Kacheleinheit 375 die graphischen Grundelemente auf Ebene von Cache-Kacheln, wobei graphische Grundelemente, die zu einer speziellen Cache-Kachel gehören, zu der Einrichtungseinheit 380 gesendet werden. Die Kreuzungseinheit 375 sendet graphische Grundelemente an die Einrichtungseinheit 380, wobei eine einzige Cache-Kachel pro Zeiteinheit übergeben wird. Graphische Grundelemente, die mehrere Cache-Kacheln abschneiden, werden typischerweise einmal in der Welt-Raum-Pipeline 352 verarbeitet, werden dann aber mehrere Male an die Bildschirm-Raum-Pipeline 354 übergeben.
  • Eine derartige Technik verbessert die Cache-Speicherlokalität während der Verarbeitung in der Bildschirm-Raum-Pipeline 354, wobei mehrere Speicheroperationen, die einer ersten Cache-Kachel zugeordnet sind, auf eine Region der L2-Cache-Speicher zugreifen, oder auf einen anderen technisch machbaren Cache-Speicher, der während der Bildschirm-Raum-Verarbeitung der ersten Cache-Kachel beibehalten wird. Sobald die graphischen Grundelemente, die zu der ersten Cache-Kachel gehören, von der Bildschirm-Raum-Pipeline 354 verarbeitet sind, kann der Abschnitt der L2-Cache-Speicher, der zu der ersten Cache-Kachel gehört, gelöscht werden und die Kacheleinheit kann graphische Grundelemente, die zu einer zweiten Cache-Kachel gehören, übertragen. Es können mehrere Speicheroperationen, die einer zweiten Cache-Kachel zugeordnet sind, dann auf das Gebiet der L2-Cache-Speicher zugreifen, die während der Bildschirm-Raum-Verarbeitung der zweiten Cache-Kachel erhalten bleiben. Folglich kann der gesamte Speicherverkehr zu den L2-Cache-Speichern und zu den Render-Zielen reduziert werden. In einigen Ausführungsformen wird die Welt-Raum-Berechnung für ein gegebenes graphisches Grundelement einmal ausgeführt, unabhängig von der Anzahl an Cache-Kacheln in dem Bildschirm-Raum, die das graphische Grundelement abschneiden.
  • Die Einrichtungseinheit 380 empfängt Vertex-Daten aus der VPC 370 über die Kreuzungseinheit 375 und berechnet Parameter, die dem graphischen Grundelement zugeordnet sind, wozu gehören, ohne einschränkend zu sein, Kantengleichungen, Gleichungen für Teilebenen und Tiefebenen-Gleichungen. Die Einrichtungseinheit 380 sendet dann die verarbeiteten graphischen Grundelemente an die Rastereinheit 385.
  • Die Rastereinheit 385 wandelt durch Abtastung die neuen graphischen Grundelemente um und sendet Fragmente und Abdeckungsdaten an die Pixel-Schattierungseinheit 390. Des Weiteren kann die Rastereinheit 385 ausgelegt sein, eine z-Auswahl und andere z-basierte Optimierungen auszuführen.
  • Die Pixel-Schattierungseinheit 390 ist eine programmierbare Ausführungseinheit, die ausgelegt ist, um Fragment-Schattierungsprogramme auszuführen, die Fragmente transformiert, die von der Rastereinheit 385 erhalten werden, wie sie von den Fragment-Schattierungsprogramme angegeben werden. Fragment-Schattierungsprogramme können Fragmente mit einer Auflösung auf Pixelebene schattieren, wobei derartige Schattierungsprogramme Pixel-Schattierungsprogramme genannt werden können. Alternativ können Fragment-Schattierungsprogramme mit einer Auflösung auf Abtastebene schattieren, wobei jedes Pixel mehrere Abtastwerte umfasst, und wobei jeder Abtastwert einen Abschnitt eines Pixels repräsentiert. Alternativ können Fragment-Schattierungsprogramme Fragmente mit einer beliebigen anderen technisch machbaren Auflösung schattieren, wobei dies von der programmierten Abtastrate abhängig ist.
  • In verschiedenen Ausführungsformen kann die Fragment-Verarbeitungseinheit 460 programmiert sein, um Operationen, wie beispielsweise perspektivische Korrektur, Texturzuordnungen, Schattierung, Mischung und dergleichen auszuführen, um schattierte Fragmente zu erzeugen, die dann an die ROP 395 gesendet werden. Die Pixel-Schattierungseinheit 300 kann Daten lesen, die in dem gemeinsam benutzten Speicher gespeichert sind.
  • Die ROP 395 ist eine Verarbeitungseinheit, die Raster-Operationen, wie beispielsweise Schablone, z-Test, Mischung und dergleichen ausführt und die Pixeldaten als verarbeitete Graphikdaten zur Speicherung im Graphikspeicher über die Speicherschnittstelle 214 übergibt, wobei der Graphikspeicher typischerweise als ein oder mehrere Render-Ziele strukturiert ist. Die verarbeiteten Graphikdaten können in dem Graphikspeicher, in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 zur Darstellung auf der Anzeigevorrichtung 110 oder für die Weiterverarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In einigen Ausführungsformen ist die ROP 395 ausgelegt, z-Daten oder Farbdaten zu komprimieren, die in den Speicher geschrieben werden, und z-Daten oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren. In verschiedenen Ausführungsformen kann die ROP 395 in der Speicherschnittstelle 214, in den GPCs 208, in dem Verarbeitungs-Cluster-Array 230 außerhalb der GPCs oder in einer separaten Einheit (nicht gezeigt) in den PPUs 202 angeordnet sein.
  • Die Graphikverarbeitungs-Pipeline kann durch ein oder mehrere Verarbeitungselemente in der PPU 202 implementiert werden. Beispielsweise kann einer der SM 310 aus 3A ausgelegt sein, um die Funktionen der VTG 365 und/oder der Pixel-Schattierungseinheit 390 auszuführen. Die Funktionen der PD 355, der VAF 360, der VPC 450, der Kacheleinheit 375, der Einrichtungseinheit 380, der Rastereinheit 385 und der ROP 395 können ebenfalls von Verarbeitungselementen innerhalb eines speziellen GPC 208 in Verbindung mit einer entsprechenden Partitionseinheit 215 ausgeführt werden. Alternativ kann die Graphikverarbeitungs-Pipeline 350 unter Anwendung spezieller Verbindungselemente mit festgelegter Funktion für eine oder mehrere der zuvor aufgeführten Funktionen implementiert werden. In verschiedenen Ausführungsformen kann die PPU 202 ausgelegt sein, eine oder mehrere Graphikverarbeitungs-Pipelines 350 zu implementieren.
  • In einigen Ausführungsformen kann die Graphikverarbeitungs-Pipeline 350 in eine Bild-Raum-Pipeline 352 und eine Bildschirm-Raum-Pipeline 354 unterteilt werden. Die Welt-Raum-Pipeline 352 verarbeitet graphische Objekte im 3D-Raum, in welchem die Position jedes graphischen Objekts relativ zu anderen graphischen Objekten und relativ zu einem 3D-Koordinatensystem bekannt ist. Die Bildschirm-Raum-Pipeline 354 verarbeitet graphische Objekte, die von dem 3D-Koordinatensystem auf eine 2D-ebene Fläche projiziert wurden, die die Oberfläche der Anzeigevorrichtung 110 repräsentiert. Beispielsweise kann die Welt-Raum-Pipeline 352 Pipeline-Stufen in der Graphikverarbeitungs-Pipeline 350 aus der PD 355 bis zu der VPC 370 umfassen. Die Bildschirm-Raum-Pipeline 354 kann Pipeline-Stufen in der Graphikverarbeitungs-Pipeline 350 von der Einrichtungseinheit 380 bis zu der ROP 395 aufweisen. Die Kacheleinheit 375 würde nach der letzten Stufe der Welt-Raum-Pipeline 352, d. h. nach der VPC 370, auftreten. Die Kacheleinheit 375 würde vor der ersten Stufe der Bildschirm-Raum-Pipeline 354, d. h. vor der Einrichtungseinheit 380, auftreten.
  • In einigen Ausführungsformen kann die Bild-Raum-Pipeline 352 in eine Alpha-Phasen-Pipeline und eine Beta-Phasen-Pipeline weiter unterteilt werden. Beispielsweise kann die Alpha-Phasen-Pipeline Pipeline-Stufen in der Graphikverarbeitungs-Pipeline 350 von der PD 355 bis zu der Aufgabenerzeugungseinheit umfassen. Die Beta-Phasen-Pipeline kann Pipeline-Stufen in der Graphikverarbeitungs-Pipeline 350 von der Topologie-Erzeugungseinheit bis zu der VPC 370 umfassen. Die Graphikverarbeitungs-Pipeline 350 führt eine erste Gruppe aus Operationen während der Verarbeitung in der Alpha-Phasen-Pipeline aus und führt eine zweite Gruppe aus Operationen während der Verarbeitung in der Beta-Phasen-Pipeline aus. Im hier verwendeten Sinne ist eine Gruppe aus Operationen als ein oder mehrere Befehle definiert, die von einem einzelnen Thread, von einer Threadgruppe oder von mehreren Threadgruppen, die als Einheit agieren, ausgeführt werden.
  • In einem System mit mehreren Graphikverarbeitungs-Pipelines 350 können die Vertex-Daten und die Vertex-Attribute, die einer Gruppe aus graphischen Objekten zugeordnet sind, so unterteilt werden, dass jede Graphikverarbeitungs-Pipeline 350 ungefähr die gleiche Menge an Arbeitslast während der Alpha-Phase besitzt. Die Alpha-Phasenverarbeitung kann die Menge an Vertex-Daten und Vertex-Attributen deutlich erweitern, so dass die Menge an Vertex-Daten und Vertex-Attributen, die von der Aufgabenerzeugungseinheit erzeugt werden, deutlich größer als die Menge an Vertex-Daten und Vertex-Attributen ist, die von der PD 255 und der VAF 360 erzeugt wird. Ferner kann die Aufgabenerzeugungseinheit, die einer einzelnen Graphikverarbeitungs-Pipeline 350 zugeordnet ist, eine deutlich größere Menge an Vertex-Daten und Vertex-Attributen erzeugen als die Aufgabenerzeugungseinheit, die einer anderen Graphikverarbeitungs-Pipeline 350 zugeordnet ist, selbst in Fällen, in denen die beiden Graphikverarbeitungs-Pipelines 350 die gleiche Menge an Attributen zu Beginn der Alpha-Phasen-Pipeline verarbeiten. In derartigen Fällen verteilt die Aufgabenverteilungseinheit die Attribute, die von der Alpha-Phasen-Pipeline erzeugt werden, derart um, dass jede Graphikverarbeitungs-Pipeline 350 ungefähr die gleiche Arbeitsauslastung zu Beginn der Beta-Phasen-Pipeline besitzt.
  • Zu beachten ist ferner, dass, wie hier verwendet, Verweise auf einen gemeinsam benutzten Speicher einen oder mehrere technisch machbare Speicher umfassen, wozu gehören, ohne einschränkend zu sein, ein lokaler Speicher, der gemeinsam von dem einen oder den mehreren SM 310 benutzt wird, oder ein Speicher, auf den über die Speicherschnittstelle 214 zugegriffen werden kann, wie beispielsweise ein Cache-Speicher, der Parallelverarbeitungsspeicher 204 oder der Systemspeicher 104. Es sollte ferner beachtet werden, dass im hier verwendeten Sinne Verweise auf einen Cache-Speicher einen oder mehrere technisch machbare Speicher mit einschließen, wozu gehören, ohne einschränkend zu sein, ein L1-Cache-Speicher, ein L1.5-Cache-Speicher und der L2-Cache-Speicher.
  • Gekachelte Zwischenspeicherung
  • 4 ist ein Konzeptdiagramm einer Cache-Kachel 410(0), für welche die Graphikverarbeitungs-Pipeline 350 von 3B ausgelegt ist, diese zu erzeugen und zu verarbeiten, gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, stellt die Cache-Kachel 410(0) einen Abschnitt eines Bildschirm-Raums 400 dar und ist in mehrere Raster-Kacheln 420 unterteilt.
  • Der Bildschirm-Raum 400 repräsentiert einen oder mehrere Pufferspeicher, die ausgelegt sind, um gerenderte Bilddaten und andere Daten, die von den Funktionseinheiten innerhalb der Graphikverarbeitung-Pipeline 350 übergeben wurden, zu speichern. In einigen Ausführungsformen sind der eine oder die mehreren Pufferspeicher als ein oder mehrere Render-Ziele ausgelegt. Der Bildschirm-Raum repräsentiert einen Pufferspeicher, der ausgelegt ist, das von der Graphikverarbeitungs-Pipeline erzeugte Bild zu speichern. Der Bildschirm-Raum 400 kann einer beliebigen Anzahl an Render-Zielen zugeordnet sein, wobei jedes Render-Ziel unabhängig von anderen Render-Zielen so konfiguriert sein kann, dass es eine beliebige Anzahl an Feldern umfasst. Jedes Feld in einem Render-Ziel ist unabhängig von anderen Feldern so ausgelegt, dass es eine beliebige Anzahl an Bits umfasst. Jedes Render-Ziel kann mehrere Bildelemente (Pixel) umfassen, und jedes Pixel kann seinerseits mehrere Abtastwerte umfassen. In einigen Ausführungsformen kann die Größe jeder Cache-Kachel auf der Größe und der Konfiguration der Render-Ziele, die dem Bildschirm-Raum zugeordnet sind, beruhen. Wenn im Betrieb die Bilderzeugung abgeschlossen ist, können die Pixel in dem einen oder den mehreren Render-Zielen an ein Anzeigevorrichtung gesendet werden, um das erzeugte Bild anzuzeigen.
  • Beispielsweise kann eine Gruppe aus Render-Zielen für den Bildschirm-Raum 400 acht Render-Ziele umfassen. Das erste Render-Ziel kann vier Felder umfassen, die Farben repräsentieren, wozu Rot-, Grün- und Blau-Komponentenfarben und Transparenzinformation, die einem entsprechenden Fragment zugeordnet sind, gehören. Das zweite Render-Ziel kann zwei Felder umfassen, die entsprechend Tiefeninformationen und Schabloneninformation repräsentieren, die dem entsprechenden Fragment zugeordnet sind. Das dritte Render-Ziel kann drei Felder umfassen, die Information über den Oberflächennormalenvektor einschließlich eines Normalenvektors in der X-Achse und eines Normalenvektors in der Y-Achse und eines Normalenvektors in der Z-Achse, die dem entsprechenden Fragment zugeordnet sind, repräsentieren. Die verbleibenden fünf Render-Ziele können so konfiguriert sein, dass sie zusätzliche Informationen, die zu dem entsprechenden Fragment gehört, speichern. Derartige Konfigurationen können umfassen: einen Speicher für verschiedene Informationen einschließlich, ohne einschränkend zu sein, 3D-Positionsdaten, Information für diffuse Beleuchtung und Information für Glanzbeleuchtung.
  • Jede Cache-Kachel 410 repräsentiert einen Abschnitt des Bildschirm-Raums 400. Der Klarheit halber sind nur fünf Cache-Kacheln 410(0)410(4) in 4 gezeigt. In einigen Ausführungsformen besitzen die Cache-Kacheln in dem X- und Y-Bildschirm-Raum eine willkürliche Größe. Wenn beispielsweise eine Cache-Kachel in einem Cache-Speicher liegt, der auch verwendet wird, um andere Daten zu speichern, dann kann die Cache-Kachel so dimensioniert sein, dass nur ein spezieller Abschnitt des Cache-Speichers eingenommen wird. Die Größe einer Cache-Kachel kann auf einer Reihe von Faktoren beruhen, wozu gehören: die Quantität und die Konfiguration der Render-Ziele, die dem Bildschirm-Raum 400 zugeordnet sind, die Menge an Abtastwerten pro Pixel, und ob die in der Cache-Kachel gespeicherten Daten komprimiert sind. Allgemein gilt, dass eine Cache-Kachel so dimensioniert wird, dass die Wahrscheinlichkeit erhöht ist, dass die Cache-Kacheldaten in dem Cache-Speicher beibehalten werden, bis alle graphischen Grundelemente, die der Cache-Kachel zugeordnet sind, vollständig verarbeitet sind.
  • Die Raster-Kacheln 420 repräsentieren einen Abschnitt der Cache-Kachel 410(0). Wie gezeigt, umfasst die Cache-Kachel 410(0) 16 Raster-Kacheln 420(0)420(15), die in einem Array angeordnet sind, das eine Breite von vier Raster-Kacheln 420 und eine Höhe von vier Raster-Kacheln 420 aufweist. In Systemen, die mehrere GPCs 208 umfassen, kann die Verarbeitung, die einer gegebenen Cache-Kachel 410(0) zugeordnet ist, auf die verfügbaren GPCs 208 aufgeteilt werden. In dem gezeigten Beispiel gilt, dass, wenn die 16 Raster-Kacheln der Cache-Kachel 410(0) durch viele unterschiedliche GPCs 208 zu verarbeiten sind, dann jeder GPC 208 so zugeordnet werden kann, dass er vier der 16 Raster-Kacheln 420 in der Cache-Kachel 410(0) verarbeitet. Insbesondere kann der erste GPC 208 zugewiesen werden, die Raster-Kacheln 420(0), 420(7), 420(10) und 420(13) zu verarbeiten. Der zweite GPC 208 kann zugewiesen werden, um Raster-Kacheln 420(1), 420(4), 420(11) und 420(14) zu verarbeiten. Der dritte GPC 208 kann zugewiesen werden, um Raster-Kacheln 420(2), 420(5), 420(8) und 420(15) zu verarbeiten. Der vierte GPC 208 kann dann zugewiesen werden, um Raster-Kacheln 420(3), 420(6), 420(9) und 420(12) zu verarbeiten. In anderen Ausführungsformen kann die Verarbeitung der unterschiedlichen Raster-Kacheln in einer gegebenen Cache-Kachel auf die GPCs 208 oder andere Verarbeitungseinheiten, die in dem Computersystem 100 umfassen sind, auf eine beliebige technisch machbare Art und Weise aufgeteilt werden.
  • Stückweise Lineare Unregelmäßige Rasterisierung
  • Die Graphikverarbeitungs-Pipeline 350 kann ausgelegt sein, um eine stückweise lineare unregelmäßige Rasterisierung durchzuführen, wobei eine derartige stückweise lineare unregelmäßige Rasterisierung die ideale nichtlineare Rasterisierung approximiert, die benötigt wird, um die Wirkungen von VR-Brillen-Verzerrungslinsen oder der Artefakte von anderen Breitbild-Rendering-Techniken umzukehren. Diese stückweise lineare unregelmäßige Rasterisierungs-Technik wird nun beschrieben.
  • 5 ist eine detaillierte Ansicht eines Abschnitts 500 der Graphikverarbeitungs-Pipeline 350 von 3B gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst der veranschaulichte Abschnitt 500, ohne einschränkend zu sein, eine Vertex-Verarbeitungseinheit 510, eine Geometrie-Verarbeitungseinheit 520; ein Darstellungsfeldskalier-, Auswahl- und Schneide-Einheit (VPC) 370; eine Kacheleinheit 375, eine Einrichtungseinheit (Setup) 380, eine Rastereinheit 385; eine Fragment-Verarbeitungseinheit, auch als eine Pixel-Schattierungseinheit 390 gekennzeichnet, und eine Raster-Operationen-Einheit (ROP) 395. Die in 5 gezeigten Elemente arbeiten im Wesentlichen genauso wie in 3B beschrieben, außer wie nachstehend weiter beschrieben ist.
  • Die Vertex-Verarbeitungseinheit 510 empfängt Vertex-Daten und Vertex-Attribute von der VAF 360 und verarbeitet die empfangenen Vertex-Daten und Vertex-Attribute. Die Vertex-Verarbeitungseinheit 510 teilt die Szene in mehrere Regionen auf, wobei jede Region einen unterschiedlichen x, y-Abtastfaktor und einen unterschiedlichen x, y-Versatz aufweist, wobei x die horizontale Dimension des einem Anzeigeschirm zugeordneten Bildschirm-Raums darstellt, und y die vertikale Dimension des dem Anzeigeschirm zugeordneten Bildschirm-Raums darstellt. In einigen Ausführungsformen können x und y beliebige zwei Dimensionen eines Bildschirm-Raum darstellen, wobei die x-Dimension einen rechten Winkel mit der y-Dimension bildet. Der x, y-Abtastfaktor für eine Region bestimmt das Ausmaß, mit dem jedes Pixel in den horizontalen und vertikalen Dimensionen jeweils zu dehnen ist. Die x, y-Versatz bestimmt, wo die Region im Bildschirm-Raum in den horizontalen und vertikalen Dimensionen jeweils zu lokalisieren ist. Im Allgemeinen weisen Regionen mit größerer horizontaler Entfernung von einem spezifizierten Ort auf dem Bildschirm-Raum einen höheren x-Abtastfaktor auf, was zu einer erhöhten Pixelbreite relativ zu der Region führt, die den spezifizierten Ort umfasst. Regionen mit größerer vertikalen Entfernung von dem spezifizierten Ort auf dem Bildschirm-Raum weisen einen höheren y-Abtastfaktor auf, was zu einer erhöhten Pixelhöhe relativ zu der Region führt, die den spezifizierten Ort umfasst. Regionen mit größerer horizontalen und vertikalen Entfernung von dem spezifizierten Ort auf dem Bildschirm-Raum weisen einen höheren x-Abtastfaktor und einen höheren y-Abtastfaktor auf, was zu sowohl einer erhöhten Pixelbreite als auch Pixelhöhe relativ zu der Region führt, die den spezifizierten Ort umfasst.
  • In einigen Ausführungsformen kann der spezifizierte Ort die Mitte des dem Anzeigeschirm zugeordneten Bildschirm-Raums sein. In anderen Ausführungsformen kann der spezifizierte Ort ein Ort auf dem Bildschirm-Raum sein, der direkt in Linie mit der Mitte einer entsprechenden Verzerrungslinse ist. Dieser Ort kann in der Mitte des Bildschirm-Raums lokalisiert sein oder nicht. In noch anderen Ausführungsformen kann der spezifizierte Ort ein beliebiger Ort auf dem Bildschirm sein. In diesen letzteren Ausführungsformen kann der spezifizierte Ort ein Fixationspunkt sein, der sich auf „foveated rendering” bezieht. Mit „foveated rendering” kann ein Fixationspunkt festgelegt werden, wobei der Fixationspunkt von einer Zeigervorrichtung, einschließlich, ohne einschränkend zu sein, einer Computermaus oder einer Digitalstiftvorrichtung, spezifiziert werden kann. Alternativ kann der Fixationspunkt über eine Blickerfassungsvorrichtung (eye tracking device), die dem Ort der Fovea folgt, das heißt der Mitte der Retina des Auges des Betrachters, bestimmt werden. In diesen Ausführungsformen kann der x-Abtastfaktor und y-Abtastfaktor auf der horizontalen und vertikalen Entfernung einer bestimmten Region von dem Fixationspunkt basiert sein.
  • In einigen Ausführungsformen können der x-Abtastfaktor und der y-Abtastfaktor jeweils x- und y-Skalierfaktoren sein, welche die Menge an Skalier-Vertices und entsprechenden Geometrieobjekte spezifizieren, die eine bestimmte Region schneiden. Im Allgemeinen kann eine neue Vertex-Position (x', y') als x' = f(x, y, z, w) und y' = f(x, y, z, w) spezifiziert werden, was angibt, dass die neue Vertex-Position eine Funktion der homogenen Koordinaten x, y, z und w der aktuellen Vertex-Position ist. Eine beliebige lineare Funktion der homogenen Koordinaten x, y, z und w kann benutzt werden, wodurch den aktuellen Vertices des Geometrieobjekts zugeordnete Linien immer noch Linien sind, nachdem die Vertices in die neuen Vertex-Positionen skaliert wurden. In einem Beispiel könnte die neue Vertex-Position als x' = A·x und y' = B·y spezifiziert sein, wobei x und y die aktuelle Vertex-Position spezifizieren, x' und y' die neue Vertex-Position spezifizieren und A und B jeweils horizontale und vertikale Skalierfaktoren sind.
  • In einigen Ausführungsformen kann der x, y-Abtastfaktor und der x, y-Versatz angewendet werden, nachdem die Geometrieobjekte abgeschnitten wurden. In anderen Ausführungsformen können der x, y-Abtastfaktor und der x, y-Versatz angewendet werden, bevor die Geometrieobjekte abgeschnitten wurden. Auf ähnliche Weise kann in einigen Ausführungsformen der x, y-Abtastfaktor und der x, y-Versatz angewendet werden, nachdem die homogenen Koordinaten x, y, z und w durch Teilen der Koordinaten durch 'w' normiert wurden In anderen Ausführungsformen kann der x, y-Abtastfaktor und der x, y-Versatz angewendet werden, bevor die homogenen Koordinaten x, y, z und w durch Teilen der Koordinaten durch 'w' normiert wurden.
  • In einigen Ausführungsformen kann der x-Abtastfaktor der Gleiche für alle Regionen in einer bestimmten Spalte sein und der y-Abtastfaktor ist der Gleiche für alle Regionen in einer bestimmten Zeile. In derartigen Ausführungsformen können Vertices zwischen einer Region und einer angrenzenden Region ausgerichtet sein. Als Ergebnis können Geometrieobjekte, die mehrere Regionen abschneiden, ohne Diskontinuität oder Nähte an der Regionengrenze gerendert werden. In anderen Ausführungsformen kann sich der x-Abtastfaktor zwischen einer Region und ein vertikal angrenzenden Region unterscheiden oder der y-Abtastfaktor kann sich zwischen einer Region und einer horizontal angrenzenden Region unterscheiden. In derartigen Ausführungsformen können Vertices nicht zwischen einer Region und einer angrenzenden Region ausgerichtet sein. Als Ergebnis können Geometrieobjekte, die mehrere Regionen abschneiden, mit Diskontinuität, Nähten oder anderen Artefakten an der Regionengrenze gerendert werden. In diesen Ausführungsformen kann Interpolation und Filterung an derartigen Regiongrenzen angewendet werden, um derartige Artefakte zu verringern oder zu beseitigen. Die Vertex-Verarbeitungseinheit 510 erzeugt x, y-Attribute für jeden empfangenen Vertex und überträgt die x, y-Attribute an die Geometrie-Verarbeitungseinheit 520.
  • Die Geometrie-Verarbeitungseinheit 520 empfängt verarbeitete Vertices von der Vertex-Verarbeitungseinheit 510. In einigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 520 replizierte Geometrieobjekte über Darstellungsfeld-Multicasting übertragen. In derartigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 520 ein Geometrieobjekt einmal zeichnen und Instanzen des Geometrieobjekts an mehrere Darstellungsfelder übertragen, wobei jedes Darstellungsfeld einen gegebenen x, y-Abtastfaktor und x, y-Versatz sowie auch eine Scherenbox aufweist, die den Abschnitt des Bildschirm-Raums definieren können, um für ein bestimmtes Darstellungsfeld zu zeichne. Die Szene kann in mehrere Darstellungsfelder aufgeteilt werden, wobei jedes Darstellungsfeld einer unterschiedlichen Region des Bildschirm-Raums entspricht, wie hier beschrieben. Wenn die Geometrie-Verarbeitungseinheit 520 ein Geometrieobjekt aufnimmt, kann die Geometrie-Verarbeitungseinheit 520 eine Schnittmaske erzeugen, die bewirkt, dass das Geometrieobjekt nur an die Darstellungsfelder übertragen wird, die Regionen entsprechen, die von dem Geometrieobjekt geschnitten werden. Alternativ kann die Geometrie-Verarbeitungseinheit 520 das Geometrieobjekt an alle Darstellungsfelder ohne Erzeugen einer Schnittmaske übertragen und jedes Darstellungsfeld kann bestimmen, ob das Geometrieobjekt basierend darauf gezeichnet wird, ob das Geometrieobjekt die entsprechende Region im Bildschirm-Raum schneidet.
  • Die VPC 370 empfängt verarbeitete Vertices und eine Scherenbox für jedes Darstellungsfeld von der Geometrie-Verarbeitungseinheit 520. Die VPC 370 kann ebenfalls eine Schnittmaske von der Geometrie-Verarbeitungseinheit 520 empfangen. Falls die VPC 370 eine Schnittmaske von der Geometrie-Verarbeitungseinheit 520 empfängt, dann erzeugt die VPC 370 einen Ausgabe-Vertex und eine entsprechende Scherenbox für jedes geschnittene Darstellungsfeld, wie von der Schnittmaske bestimmt. Falls die VPC 370 keine Schnittmaske von der Geometrie-Verarbeitungseinheit 520 empfängt, dann erzeugt die VPC 370 einen Ausgabe-Vertex einer entsprechenden Scherenbox für jedes Darstellungsfeld. In einigen Ausführungsformen bestimmt die VPC 370, welche Regionen interessieren mit verschiedenen Geometrieobjekten und nicht mit der Geometrie-Verarbeitungseinheit 520.
  • Die Kacheleinheit 375 empfängt Vertices und Scherenboxen von der VPC 370 und überträgt Vertices und Scherenboxen an eine oder mehrere Einrichtungseinheiten 380, wie hier ferner beschrieben.
  • Die Einrichtungseinheit (Setup) 380 empfängt Vertices und entsprechende Scherenboxen von der Kacheleinheit 375. Die Einrichtungseinheit 380 wendet die Scherenbox auf den Vertex an, um zu bestimmen, ob alles, ein Teil oder überhaupt nichts von dem Geometrieobjekt, das der aktuellen Vertex entspricht, das Darstellungsfeld schneidet, das der Scherenbox entspricht. Die Einrichtungseinheit 380 berechnet und überträgt lineare Ebenengleichungen und lineare Attribut-Randgleichungen an die Rastereinheit 385.
  • Die Rastereinheit 385, eine Pixel-Schattierungseinheit 390 und die ROP 395 führen ihre Standardfunktionen durch, ohne sich gezielt der stückweisen linearen unregelmäßigen Rasterisierung bewusst zu sein. Weil jede Region des Bildschirm-Raums Vertices umfasst, die in einem regelmäßigen linearen Raster ausgerichtet sind, rastern und schattieren die Rastereinheit 385, eine Pixel-Schattierungseinheit 390 und die ROP 395 die ankommenden Vertices und Pixel korrekt und effizient, ohne die Standardfunktionalität dieser Verarbeitungselemente zu modifizieren. Diese Verarbeitungselemente stützen sich auf einen linearen Rasterraum für Effizienz. Weil die von der Einrichtungseinheit 380 erzeugten Ebenengleichungen und Randgleichungen linear sind, halten die Rastereinheit 385, eine Pixel-Schattierungseinheit 390 und die ROP 395 eine effiziente Verarbeitung aufrecht. Beispielsweise könnte die Rastereinheit 385 Operationen unter Verwendung von linearen Randgleichungen durchführen. Eine oder mehrere von der Rastereinheit 385, einer Pixel-Schattierungseinheit 390 und der ROP 395 könnten auf Attribute im gemeinsam benutzten Speicher basierend auf linearen Ebenengleichungen zugreifen.
  • Wie oben beschrieben, ist jede Region im Bildschirm-Raum mit einem unterschiedlichen x, y-Abtastfaktor und x, y-Versatz einem unterschiedlichen Darstellungsfeld zugeordnet. Folglich entspricht jede Region im Bildschirm-Raum einem unterschiedlichen Darstellungsfeld. Beispielsweise könnte in einem System, das 16 Darstellungsfelder umfasst, der Bildschirm-Raum auf jede Art und Weise geteilt werden, die 16 Regionen nicht überschreitet. Somit könnte der Bildschirm-Raum in Regionen von 2 Zeilen aus 8 Spalten, 3 Zeilen aus 5 Spalten und 4 Zeilen aus vier Spalten geteilt werden. In einigen Ausführungsformen können Darstellungsfelder in getrennte x-Darstellungsfelder und y-Darstellungsfelder trennbar sein, wie beispielsweise 16x-Darstellungsfelder mal 16y-Darstellungsfelder. In derartigen Ausführungsformen könnte jeder Region im Bildschirm-Raum zwei Darstellungsfelder zugeordnet sein – ein x-Darstellungsfeld und ein y-Darstellungsfeld. Beispielsweise würde ein System mit 16x-Darstellungsfeldern mal 16y-Darstellungsfeldern insgesamt 256 Darstellungsfelder aufweisen. In anderen Ausführungsformen können Regionen unter Verwendung von Cache-Kacheln statt Darstellungsfeldern festgelegt werden. In derartigen Ausführungsformen könnte jede Region im Bildschirm-Raum einer unterschiedlichen Cache-Kachel zugeordnet sein, wobei jede Cache-Kachel eine unterschiedliche 64 Pixel mal 64 Pixel Region im Bildschirm-Raum darstellt und jede Cache-Kachel einen gegebenen x, y-Abtastfaktor und x, y-Versatz aufweist. In noch anderen Ausführungsformen können Regionen unter Verwendung von entweder groben Raster-Kacheln oder feinen Raster-Kacheln statt Darstellungsfeldern festgelegt werden. In derartigen Ausführungsformen kann jede Region im Bildschirm-Raum einer unterschiedlichen groben Raster-Kachel zugeordnet sein, wobei jede Cache-Kachel eine unterschiedliche 16 Pixel mal 16 Pixel Region im Bildschirm-Raum darstellt und jede Raster-Kachel einen gegebenen x, y-Abtastfaktor und x, y-Versatz aufweist. Alternativ kann jede Region im Bildschirm-Raum einer unterschiedlichen groben Raster-Kachel zugeordnet sein, wobei jede Cache-Kachel eine unterschiedliche Region von 8 Abtastungen mal 8 Abtastungen im Bildschirm-Raum darstellt. Indem Cache-Kacheln oder Raster-Kacheln statt Darstellungsfeldern verwendet werden, können mehr Regionen im Bildschirm-Raum festgelegt werden. Als Ergebnis kann die stückweise lineare unregelmäßige Rasterisierung unter Verwendung von Cache-Kacheln oder Raster-Kacheln das ideale nichtlineare Rasterisierungsraster im Vergleich zu der Darstellungsfeld-Vorgehensweise enger approximieren.
  • In einigen Ausführungsformen können die Elemente in der Graphikverarbeitungs-Pipeline 350 die stückweise lineare unregelmäßige Ebenengleichungen zurück in ein regelmäßiges quadratische Raster umkehren, bevor auf bestimmte Attribute zugegriffen wird. Beispielsweise könnte eine Textur im Texturspeicher in quadratische Pixel abgebildet werden. Ein auf den Texturspeicher zugreifendes Element würde die stückweisen linearen unregelmäßigen Ebenengleichungen zurück in ein regelmäßiges quadratisches Raster umkehren. Das Element würde die Vertex-Position basierend auf den umgekehrten Ebenengleichungen verwenden, um auf den Texturspeicher zuzugreifen, um das korrekte Texel wiederherzustellen.
  • 6A6D veranschaulichen beispielhafte Abtastraster, die während der stückweisen unregelmäßigen Rasterisierung implementiert werden können, gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung.
  • Wie in 6A gezeigt, umfasst das Abtastraster neun Regionen 610(0)610(8), die als drei Zeilen mal drei Spalten angeordnet sind. Die Region 610(4) nahe der Mitte des Bildschirm-Raums umfasst quadratische Pixel mit einer relativ feinen Auflösung. Regionen 610(3) und 610(5), die in einer horizontalen Entfernung von der Mittenregion 610(4) lokalisiert sind, umfassen Pixel mit größerer horizontaler Beabstandung relativ zu der Mittenregion 610(4). Regionen 610(1) und 610(7), die in einer vertikalen Entfernung von der Mittenregion 610(4) lokalisiert sind, umfassen Pixel mit größerer vertikaler Beabstandung relativ zu der Mittenregion 610(4). Regionen 610(0), 610(2), 610(6) und 610(8), die in einer horizontalen und vertikalen Entfernung von der Mittenregion 610(4) lokalisiert sind, umfassen Pixel mit größerer horizontaler Beabstandung und größerer vertikaler Beabstandung relativ zu der Mittenregion 610(4). Wie gezeigt, weisen Regionen in der gleichen Spalte alle die gleiche horizontale Auflösung auf, und Regionen in der gleichen Zeile weisen alle die gleiche vertikale Auflösung auf.
  • Wie in 6B gezeigt, ist das Dreieck 620 auf den Bildschirm-Raum zu rendern, das durch Regionen 610(0)610(8) dargestellt wird. Das Dreieck 620 schneidet vier Regionen 610(4), 610(6), 610(7) und 610(8). Wenn es auf das stückweise lineare unregelmäßige Raster gerendert wird, erscheint das Dreieck 620 als Dreieck 630, was Diskontinuität an den Grenzen zwischen angrenzenden Regionen zeigt. Wenn es in die VR-Brille projiziert wird, wirken die Verzerrung, die durch das Dreieck 630 veranschaulicht wird, und die optische Verzerrung der Linsen in der VR-Brille gegeneinander und der Betrachter sieht ein Dreieck, welches das Dreieck 620 approximiert.
  • Wie in 6C gezeigt, umfasst das Abtastraster sechs Regionen 640(0)640(5), die als zwei Zeilen mal drei Spalten angeordnet sind. Die Region 640(4) umfasst 5 Zeilen mal 8 Spalten von quadratischen Pixeln mit einer relativ feinen Auflösung. Regionen 640(3) und 640(5), die in einer horizontalen Entfernung von der Mittenregion 640(4) beabstandet sind, umfassen Pixel in größerer horizontaler Beabstandung relativ zu der Region 640(4). Die Region 640(1), die in einer vertikalen Entfernung von der Region 640(4) lokalisiert ist, umfasst Pixel mit größerer vertikaler Beabstandung relativ zu der Region 640(4). Regionen 640(0) und 640(2), die in einer horizontalen und vertikalen Entfernung von der Mittenregion 640(4) lokalisiert sind, umfassen Pixel mit größerer horizontaler Beabstandung und größerer vertikaler Beabstandung relativ zu der Region 640(4). Wie gezeigt, weisen Regionen 640(0) und 640(2) unterschiedliche horizontale und vertikale Auflösungen relativ zu den direkt angrenzenden Regionen auf. Daher zeigen Geometrieobjekte, die in einer oder beiden der Regionen 640(0) und 640(2) und angrenzenden Regionen liegen, wahrscheinlich Diskontinuität, Nähte oder anderen Artefakte. Daher sollten derartige Geometrieobjekte an Regionengrenzen interpoliert und gefiltert werden, um die Wirkung derartiger Artefakte zu verringern.
  • Wie in 6D gezeigt, umfasst das Abtastraster sechs Regionen 650(0)650(5), die als zwei Zeilen mal drei Spalten angeordnet sind. Regionen 650(1), 650(3), 650(4) und 650(5) umfassen 8 Zeilen mal 8 Spalten quadratischer Pixel. Regionen 650(0) und 650(2) umfassen 6 Zeilen mal 6 Spalten quadratischer Pixel. Alle sechs Regionen 650(0)650(5) weisen die gleiche horizontale und vertikale Auflösung auf.
  • 7 stellt ein Ablaufdiagramm von Verfahrensschritten zum Durchführen eines stückweisen unregelmäßigen Rendern gemäß einer Ausführungsform der vorliegenden Erfindung dar. Obwohl die Verfahrensschritte in Verbindung mit den Systemen von 16D beschrieben werden, werden Fachleute verstehen, dass ein beliebiges System, das zum Durchführen der Verfahrensschritte in beliebiger Reihenfolge ist, innerhalb des Schutzumfangs der vorliegenden Offenbarung liegt.
  • Wie gezeigt, beginnt ein Verfahren bei Schritt 702, wo die Vertex-Verarbeitungseinheit 510 x, y, Attribute, einschließlich x, y-Abtastfaktor und x, y-Versatz, für jeden empfangenen Vertex berechnet. Der berechnete x, y-Abtastfaktor und x, y-Versatz platzieren den empfangenen Vertex und das dem Vertex entsprechende Geometrieobjekt in der geeigneten Region des Bildschirm-Raums. Jede Region des Bildschirm-Raums ist einem bestimmten x- und y-Abtastfaktor zugeordnet, der jeweils die horizontale und vertikale Auflösung der Region festlegt. Auf ähnliche Weise ist jede Region des Bildschirm-Raums einem bestimmten x- und y-Versatz zugeordnet, der jeweils die horizontale und vertikale Position der Region festlegt. Im Allgemeinen weisen unterschiedliche Regionen unterschiedliche x, y-Abtastfaktoren und x, y-Versätze auf, so dass sich die Pixelauflösung von Region zu Region verändern kann. Im Fall des Rendern für die VR-Brille weisen Regionen nahe einem spezifizierten Ort des Bildschirm-Raums eine relativ feine Auflösung auf, um eine ausreichende Auflösung bereitzustellen, wenn die Regionen nahe dem spezifizierten Ort von der Verzerrungslinse vergrößert werden. Regionen, die horizontal von dem spezifizierten Ort des Bildschirms entfernt sind, weisen eine entsprechend gröbere Auflösung auf, wenn die horizontale Entfernung von dem spezifizierten Ort des Bildschirms zunimmt. Auf ähnliche Weise weisen Regionen, die vertikal von dem spezifizierten Ort der Bildschirms entfernt sind, eine entsprechend gröbere Auflösung auf, wenn die vertikale Entfernung von dem spezifizierten Ort des Bildschirms zunimmt. Allgemeiner gesagt, kann jede Region unabhängig dimensioniert, skaliert und versetzt werden. Als Ergebnis sind verschiedene Konfigurationen von Regionen über die offenbarten Techniken möglich.
  • Bei Schritt 704 berechnet die Geometrie-Verarbeitungseinheit 520 eine Darstellungsfeld-Schnittmaske für jeden Vertex. Die Darstellungsfeld-Schnittmaske umfasst einen Indikator für jede Region, wobei der Indikator für eine bestimmte Region auf WAHR gesetzt wird, wenn ein bestimmtes Geometrieobjekt die Region schneidet, und auf UNWAHR gesetzt ist, wenn das bestimmte Geometrieobjekt die Region nicht schneidet. Bei Schritt 706 führt die VPC 370 Abschneideoperationen für jedes relevante Darstellungsfeld durch. In einigen Ausführungsformen sind die relevanten Darstellungsfelder die Darstellungsfelder, die das Geometrieobjekt entsprechend einem bestimmten Vertex abschneiden. In diesen Ausführungsformen scannt die VPC 370 die Maske und erzeugt eine Instanz des Geometrieobjekts für jede Region, wo der entsprechenden Indikator in der Darstellungsfeld-Schnittmaske auf WAHR gesetzt ist. In anderen Ausführungsformen wird jedes Darstellungsfeld betrachtet, ein relevantes Darstellungsfeld zu sein. In diesen letzteren Ausführungsformen kann die Geometrie-Verarbeitungseinheit 520 keine Darstellungsfeld-Schnittmaske erzeugen. In derartigen Ausführungsformen, kann die VPC 370 eine Instanz des Geometrieobjekts an jedes Darstellungsfeld rundsenden. Die Einrichtungseinheit 380 kann dann das Dreieck für jene Darstellungsfelder abschneiden oder zurückweisen, die nicht von dem Dreieck geschnitten werden. Diese letzteren Ausführungsformen benutzen nicht die Geometrie-Verarbeitungseinheit 520, um dadurch den Wirkungsgrad und die Leistung der Graphikverarbeitungs-Pipeline 350 zu verbessern. Das Erzeugen von Instanzen von Geometrieobjekten für Regionen, die das Geometrieobjekt kreuzen, kann den Wirkungsgrad für Stufen der Graphikverarbeitungs-Pipeline 350 geringfügig verringern, die stromabwärts von der Geometrie-Verarbeitungseinheit 520 sind. Diese Verringerungen im Wirkungsgrad können durch den erhöhten Wirkungsgrad des Nicht-Benutzens der Geometrie-Verarbeitungseinheit 520 mehr als ausgeglichen werden, um Darstellungsfeld-Schnittmasken zu erzeugen.
  • Bei Schritt 708 repliziert die VPC 370 das Geometrieobjekt für jedes relevante Darstellungsfeld. Wie oben beschrieben, kann die VPC 370 Instanzen des Geometrieobjekts nur für die Darstellungsfelder erzeugen, welche das Geometrieobjekt abschneiden, wobei derartige Darstellungsfelder die relevanten Darstellungsfelder sind. Alternativ kann die VPC 370 Instanzen des Geometrieobjekts erzeugen und eine Instanz für jedes Darstellungsfeld rundsenden, wobei alle Darstellungsfelder als relevante Darstellungsfelder betrachtet werden.
  • Bei Schritt 710 wendet die VPC 370 Abtastfaktoren und Versätze auf die Vertices an, um dadurch die Vertex-Positionen für jede der entsprechenden Darstellungsfelder einzustellen. Bei Schritt 712 markiert die VPC 370 jedes replizierte Geometrieobjekt mit dem entsprechenden relevanten Darstellungsfeld. Diese Markierung kennzeichnet jede Instanz des Geometrieobjekts mit der zugeordneten Region, so dass stromabwärtige Stufen der Graphikverarbeitungs-Pipeline 350 jede Instanz des Geometrieobjekt korrekt und ordnungsgemäß basierend auf dem entsprechenden x, y-Abtastfaktor und x, y-Versatz für die Region rendern. Bei Schritt 714 wendet die Einrichtungseinheit 380 eine Scherenbox für das gekennzeichnete Darstellungsfeld an. Das Anwenden der Scherenbox bewirkt lediglich, dass der Abschnitt des Geometrieobjekts, der ein bestimmtes Darstellungsfeld kreuzt, in diesem Darstellungsfeld gerendert wird. Bei Schritt 716 führen die Rastereinheit 385, die Pixel-Schattierungseinheit 390 und die ROP-Einheit 395 ihre normalen Funktionen durch. Wie hier ferner beschrieben, stellen die offenbarten Techniken lineare Ebenengleichungen und Randgleichungen für jedes Darstellungsfeld bereit. So lange wie die Ebenengleichungen und Randgleichungen linear bleiben, benötigen die Rastereinheit 385, die Pixel-Schattierungseinheit 390 und die ROP-Einheit 395 keine spezielle Programmierung oder funktionale Änderungen, um die Instanzen der Geometrie für die verschiedenen Darstellungsfelder korrekt zu rendern. Das Verfahren 700 endet dann.
  • In Summe werden 3D-Computer-Geometrieobjekte für Breitbild-Anwendungen, wie beispielsweise für die VR-Brille, unter Verwendung von stückweiser unregelmäßiger Rasterisierung gerendert. Der Bildschirm-Raum des Anzeigeschirms wird in mehrere Regionen aufgeteilt, wobei jede Region einem bestimmten x, y-Abtastfaktor und x, y-Versatz zugeordnet wird. Geometrieobjekte, die Pixel in einer oder mehreren Bildschirm-Raum-Regionen abdecken, werden gemäß dem x, y-Abtastfaktor und x, y-Versatz für die bestimmten Regionen gerendert, die das Geometrieobjekt abschneiden. Beispielsweise könnte ein Geometrieobjekt, das drei Bildschirm-Raum-Regionen abdeckt, mit einem x, y-Abtastfaktor und x, y-Versatz in der ersten Region, einem weiteren x, y-Abtastfaktor und x, y-Versatz in der zweiten Region und noch einem weiteren x, y-Abtastfaktor und x, y-Versatz in der dritten Region gerendert werden. Zum Breitbild-Rendering könnten Regionen, die nahe einem spezifizierten Ort des Bildschirm-Raums lokalisiert sind, relativ kleine quadratische Pixel aufweisen. Für Regionen, die entfernt von dem spezifizierten Ort lokalisiert sind, wo eine hohe Auflösung typischerweise nicht notwendig ist, könnte sich der x-Abtastfaktor so vergrößern, wie sich die horizontale Entfernung von dem spezifizierten Ort vergrößert, und der y-Abtastfaktor könnte sich so vergrößern, wie sich die vertikale Entfernung von dem spezifizierten Ort vergrößert.
  • Wenigstens ein Vorteil der offenbarten Vorgehensweise ist, dass nahe dem Rand des Bildschirm-Raums lokalisierte Pixel mit niedrigerer Auflösung gerendert werden, was zu verbesserter Leistung relativ zu vorbekannten Breitbild-Render-Techniken führt. Ein weiterer Vorteil der offenbarten Technik ist, dass nahe einem spezifizierten Ort des Bildschirm-Raums lokalisierte Pixel mit höherer Auflösung relativ zu früheren Techniken gerendert werden, was zu verbesserter Videoqualität nahe dem spezifizierten Ort des Bildschirm-Raums relativ zu vorbekannten Breitbild-Render-Techniken führt.
  • Die Beschreibungen der verschiedenen Ausführungsformen wurden für Zecke der Veranschaulichung vorgestellt, wobei sie jedoch nicht dazu gedacht sind, erschöpfend oder auf die offenbarten Ausführungsformen beschränkt zu sein. Viele Modifikationen und Variationen werden Fachleuten offensichtlich sein, ohne vom Umfang und Wesen der beschriebenen Ausführungsformen abzuweichen.
  • Aspekte der vorliegenden Ausführungsformen können als ein System, Verfahren oder Computerprogrammprodukt verkörpert sein. Demgemäß können Aspekte der vorliegenden Offenbarung die Form einer reinen Hardware-Ausführungsform, einer reinen Software-Ausführungsform (einschließlich Firmware, residenter Software, Mikrocode, usw.) oder einer Ausführungsform, die Software- und Hardware-Aspekte kombiniert, annehmen, die hier alle allgemein als „Schaltung”, ”Modul” oder ”System” bezeichnet werden können. Des Weiteren können Aspekte der vorliegenden Offenbarung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren computerlesbaren Medium(Medien) verkörpert wird, die darauf verkörperten computerlesbaren Programmcode aufweisen.
  • Jede Kombination aus einem oder mehrere computerlesbares Medium(Medien) kann benutzt werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann beispielsweise, ist jedoch nicht darauf begrenzt, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleiter System, -Einrichtung oder -Vorrichtung oder jede geeignete Kombination des Vorhergehenden sein. Spezifischere Beispiele (eine nicht erschöpfende Liste) des computerlesbaren Speichermediums würde Folgendes umfassen: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine tragbaren Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Festwertspeicher (ROM), ein löschbarer programmierbarer Festwertspeicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer Compactdisk-Festwertspeicher (CD-ROM), eine optische Speichervorrichtung, eine magnetische Speichervorrichtung oder jede geeignete Kombination des Vorhergehenden. Im Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes materielle Medium sein, das ein Programm zur Verwendung durch oder in Verbindung mit einem Anweisungsausführungssystem, einer Einrichtung oder Vorrichtung enthalten oder speichern kann.
  • Aspekte der vorliegenden Offenbarung werden oben mit Bezug auf Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagramme von Verfahren, Einrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Offenbarung beschrieben. Es versteht sich, dass jeder Block der Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagramme und Kombinationen von Blöcken in den Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagrammen durch Computerprogramm-Anweisungen implementiert werden können. Diese Computerprogramm-Anweisungen können für einen Prozessor eines Allzweckcomputers, Spezialzweckcomputers oder einer sonstigen programmierbaren Datenverarbeitungseinrichtung bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computer oder einer sonstigen programmierbare Datenverarbeitungseinrichtung ausgeführt werden, die Implementierung der in dem Ablaufdiagramm und/oder Blockdiagrammblock oder Blöcken spezifizierten Funktionen/Handlungen zu ermöglichen. Derartige Prozessoren können, ohne einschränkend zu sein, Allzweck-Prozessoren, Spezialzweck-Prozessoren, anwendungsspezifischen Prozessoren oder feldprogrammierbare Prozessoren sein.
  • Das Ablaufdiagramm und die Blockdiagramme in den Figuren veranschaulichen die Architektur, Funktionalität und den Betrieb möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedener Ausführungsformen der vorliegenden Offenbarung. In dieser Hinsicht kann jeder Block in dem Ablaufdiagramm oder den Blockdiagrammen ein Modul, ein Segment oder einen Abschnitt eines Codes darstellen, der eine oder mehrere ausführbare Anweisungen zum Implementieren der spezifizierten logischen Funktion(en) umfasst. Es sei ebenfalls bemerkt, dass in einigen alternativen Implementierungen die in dem Block erwähnten Funktionen außerhalb der in den Figuren erwähnten Reihenfolge auftreten können. Beispielsweise können zwei aufeinanderfolgend gezeigte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden oder die Blöcke können einige Male in umgekehrter Reihenfolge abhängig von der beteiligten Funktionalität ausgeführt werden. Es sei ebenfalls bemerkt, dass jeder Block der Blockdiagramme und/oder die Ablaufdiagramm-Veranschaulichung sowie Kombinationen von Blöcken in den Blockdiagrammen und/oder der Ablaufdiagramm-Veranschaulichung von Spezialzweck-Hardware-basierten Systeme implementiert werden können, welche die spezifizierten Funktionen oder Handlungen oder Kombinationen von Spezialzweck-Hardware und Computeranweisungen durchführen.
  • Während das Vorhergehende auf Ausführungsformen der vorliegenden Offenbarung gerichtet ist, können andere und weitere Ausführungsformen der Offenbarung erdacht werden, ohne von dem grundlegenden Schutzumfang derselben abzuweichen, und der Umfang derselben wird durch die Ansprüche bestimmt, die folgen.

Claims (14)

  1. Verfahren zum Rendern eines Geometrieobjekts in einer computererzeugten Szene, wobei das Verfahren umfasst: Teilen eines einem Anzeigeschirm zugeordneten Bildschirm-Raums in eine Mehrzahl von Regionen; für jede Region: Berechnen eines ersten Abtastfaktors in einer horizontalen Dimension, der einen horizontalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, Berechnen eines zweiten Abtastfaktors in einer vertikalen Dimension, der einen vertikalen Abtastfaktor für in der Region lokalisierte Pixel darstellt, Berechnen eines ersten Versatzes in der horizontalen Dimension, der eine der Region zugeordnete horizontale Position darstellt, und Berechnen eines zweiten Versatzes in der vertikalen Dimension, der eine der Region zugeordnete vertikale Position darstellt; Bestimmen, dass das Geometrieobjekt mehr als eine Region schneidet; Erzeugen einer ersten Instanz des Geometrieobjekts für eine erste Region, die das Geometrieobjekt schneidet; und Erzeugen einer zweiten Instanz des Geometrieobjekts für eine zweite Region, die das Geometrieobjekt schneidet.
  2. Verfahren gemäß Anspruch 1, wobei die erste Instanz einer ersten Scherenbox zugeordnet ist, und die zweiten Instanz einer zweiten Scherenbox zugeordnet ist, und ferner umfassend: Anwenden des ersten Abtastfaktors, des ersten Versatzes, des zweiten Abtastfaktors und des der ersten Region zugeordneten zweiten Versatzes auf die erste Instanz; Anwenden der ersten Scherenbox auf die erste Instanz; Anwenden des ersten Abtastfaktors, des ersten Versatzes, des zweiten Abtastfaktors und des der zweiten Region zugeordneten zweiten Versatzes auf die zweite Instanz; und Anwenden der zweiten Scherenbox auf die zweite Instanz.
  3. Verfahren gemäß Anspruch 1 oder 2, wobei der erste Abtastfaktor für die erste Region auf der horizontalen Entfernung der ersten Region von einem Ort auf dem Bildschirm-Raum basiert, der zweite Abtastfaktor für die erste Region auf der vertikalen Entfernung der ersten Region von dem Ort auf dem Bildschirm-Raum basiert, der erste Abtastfaktor für die zweite Region auf der horizontalen Entfernung der zweiten Region von dem Ort auf dem Bildschirm-Raum basiert und der zweite Abtastfaktor für die zweite Region auf der vertikalen Entfernung der zweiten Region von dem Ort auf dem Bildschirm-Raum basiert.
  4. Verfahren gemäß Anspruch 3, wobei der Ort auf dem Bildschirm-Raum einer Mitte einer dem Anzeigeschirm zugeordneter Linse entspricht.
  5. Verfahren gemäß einem der vorhergehenden Ansprüche, ferner umfassend ein Erzeugen einer Maske, die angibt, dass die erste Region und die zweite Region das Geometrieobjekt abschneiden.
  6. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei jede Region, die in der Mehrzahl von Regionen enthalten ist, zugeordnete mit einem unterschiedlichen Darstellungsfeld in einer Mehrzahl von Darstellungsfeldern zugeordnet ist.
  7. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die erste Region einem ersten horizontalen Darstellungsfeld in einer Mehrzahl von horizontalen Darstellungsfelder und einem ersten vertikalen Darstellungsfeld in einer Mehrzahl von vertikalen Darstellungsfeldern zugeordnet ist, und die zweite Region einem zweiten horizontalen Darstellungsfeld in der Mehrzahl von horizontalen Darstellungsfeldern und einem zweiten vertikalen Darstellungsfeld in der Mehrzahl von vertikalen Darstellungsfeldern zugeordnet ist.
  8. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei jede Region in der Mehrzahl von Regionen einer unterschiedlichen Cache-Kachel zugeordnet ist, die in einer Mehrzahl von Cache-Kacheln enthalten ist.
  9. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei jede Region in der Mehrzahl von Regionen einer unterschiedlichen Raster-Kachel zugeordnet ist, die in einer Mehrzahl von Raster-Kacheln enthalten ist.
  10. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die Regionen, die in der Mehrzahl von Regionen enthalten sind, in einer Menge von Zeilen und einer Menge von Spalten angeordnet sind, und wobei jede in einer gegebenen Zeile enthaltene Region den gleichen zweiten Abtastfaktor aufweist, und jede in einer gegebenen Spalte enthaltene Region den gleichen ersten Abtastfaktor aufweist.
  11. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei die Regionen, die in der Mehrzahl von Regionen enthalten sind, in einer Menge von Zeilen und einer Menge von Spalten angeordnet sind, und die erste Region und die zweite Region in der gleichen Zeile enthalten sind, und wobei die erste Region eine vertikale Größe aufweist, die sich von einer vertikalen Größe unterscheidet, die für die zweite Region berechnet wurde, und die erste Region eine horizontale Größe aufweist, die sich von einer horizontalen Größe unterscheidet, die für eine dritte Region berechnet wurde, die in der gleichen Spalte wie die erste Region lokalisiert ist.
  12. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei der erste Abtastfaktor einen ersten Skalierfaktor umfasst, der einen ersten Multiplizierer spezifiziert, der auf eine 'x' Koordinate jedes Vertex angewendet wird, der dem Geometrieobjekt zugeordnet ist, und der zweite Abtastfaktor ein zweiten Skalierfaktor umfasst, der einen zweiten Multiplizierer spezifiziert, der auf eine 'y' Koordinate jedes Vertex angewendet wird, der dem Geometrieobjekt zugeordnet ist.
  13. Computerlesbares Speichermedium, das Anweisungen umfasst, die, wenn von einem Prozessor ausgeführt, den Prozessor veranlassen, ein Geometrieobjekt in einer computererzeugten Szene durch Durchführen der Schritte zu rendern, wie in einem der Ansprüche 1 bis 12 erwähnt ist.
  14. Graphikverarbeitungs-Pipeline, umfassend: einen Vertex-Prozessor, der ausgelegt ist, um: einen einem Anzeigeschirm zugeordneten Bildschirm-Raum in eine Mehrzahl von Regionen aufzuteilen; für jede Region: einen ersten Abtastfaktor in einer horizontalen Dimension zu berechnen, der einen horizontalen Abtastfaktor für in der Region lokalisierten Pixel darstellt, einen zweiten Abtastfaktor in einer vertikalen Dimension zu berechnen, der einen vertikalen Abtastfaktor für die in der Region lokalisierten Pixel darstellt, einen ersten Versatz in der horizontalen Dimension zu berechnen, der eine der Region zugeordnete horizontale Position darstellt, und einen zweiten Versatz in der vertikalen Dimension zu berechnen, der eine der Region zugeordnete vertikale Position darstellt; und einen Darstellungsfeldskalier-, Auswahl- und Schneide-Prozessor der ausgelegt ist, um zu: bestimmen, dass das Geometrieobjekt mehr als eine Region schneidet; eine erste Instanz des Geometrieobjekts für eine ersten Region zu erzeugen, die das Geometrieobjekt schneidet; und eine zweite Instanz des Geometrieobjekts für eine zweite Region zu erzeugen, die das Geometrieobjekt schneidet.
DE102016109905.8A 2015-05-29 2016-05-30 Stückweise lineare unregelmäßige Rasterisierung Pending DE102016109905A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/726,381 2015-05-29
US14/726,381 US10037620B2 (en) 2015-05-29 2015-05-29 Piecewise linear irregular rasterization

Publications (1)

Publication Number Publication Date
DE102016109905A1 true DE102016109905A1 (de) 2016-12-01

Family

ID=57282131

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016109905.8A Pending DE102016109905A1 (de) 2015-05-29 2016-05-30 Stückweise lineare unregelmäßige Rasterisierung

Country Status (3)

Country Link
US (2) US10037620B2 (de)
CN (1) CN106204712B (de)
DE (1) DE102016109905A1 (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10152122B2 (en) * 2016-07-18 2018-12-11 Tobii Ab Foveated rendering
US10438318B2 (en) * 2016-08-30 2019-10-08 Intel IP Corporation Blind spot rendering optimizations for eye tracking head mounted displays
US11222397B2 (en) * 2016-12-23 2022-01-11 Qualcomm Incorporated Foveated rendering in tiled architectures
US10885883B2 (en) 2017-01-25 2021-01-05 Apple Inc. Electronic device with foveated display system
US10546365B2 (en) * 2017-03-27 2020-01-28 Advanced Micro Devices, Inc. Single pass flexible screen/scale rasterization
US10643374B2 (en) * 2017-04-24 2020-05-05 Intel Corporation Positional only shading pipeline (POSH) geometry data processing with coarse Z buffer
US10885607B2 (en) 2017-06-01 2021-01-05 Qualcomm Incorporated Storage for foveated rendering
US10395624B2 (en) 2017-11-21 2019-08-27 Nvidia Corporation Adjusting an angular sampling rate during rendering utilizing gaze information
CN115842907A (zh) * 2018-03-27 2023-03-24 京东方科技集团股份有限公司 渲染方法、计算机产品及显示装置
US11037271B2 (en) 2018-08-07 2021-06-15 Qualcomm Incorporated Dynamic rendering for foveated rendering
US10565689B1 (en) 2018-08-07 2020-02-18 Qualcomm Incorporated Dynamic rendering for foveated rendering
US10733783B2 (en) * 2018-10-09 2020-08-04 Valve Corporation Motion smoothing for re-projected frames
KR102582407B1 (ko) * 2019-07-28 2023-09-26 구글 엘엘씨 포비에이티드 메시들로 몰입형 비디오 콘텐츠를 렌더링하기 위한 방법들, 시스템들, 및 매체들
US11363247B2 (en) 2020-02-14 2022-06-14 Valve Corporation Motion smoothing in a distributed system

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5422653A (en) * 1993-01-07 1995-06-06 Maguire, Jr.; Francis J. Passive virtual reality
US6947057B2 (en) * 2000-01-11 2005-09-20 Sun Microsystems, Inc. Rendering lines with sample weighting
US6894698B2 (en) * 2000-01-11 2005-05-17 Sun Microsystems, Inc. Recovering added precision from L-bit samples by dithering the samples prior to an averaging computation
US6989835B2 (en) * 2000-06-28 2006-01-24 Sun Microsystems, Inc. Flexible video architecture for generating video streams
US6795076B2 (en) * 2001-06-28 2004-09-21 Sun Microsystems, Inc. Graphics system with real-time convolved pixel readback
US9183651B2 (en) * 2010-10-06 2015-11-10 Microsoft Technology Licensing, Llc Target independent rasterization
US9218679B2 (en) * 2012-10-08 2015-12-22 Intel Corporation Reduced bitcount polygon rasterization
US9947084B2 (en) * 2013-03-08 2018-04-17 Nvidia Corporation Multiresolution consistent rasterization
US20150253574A1 (en) * 2014-03-10 2015-09-10 Ion Virtual Technology Corporation Modular and Convertible Virtual Reality Headset System
US10068311B2 (en) * 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US10438312B2 (en) * 2014-04-05 2019-10-08 Sony Interactive Entertainment LLC Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters
US9710881B2 (en) * 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US10469873B2 (en) * 2015-04-15 2019-11-05 Google Llc Encoding and decoding virtual reality video
US10446118B2 (en) * 2015-06-02 2019-10-15 Intel Corporation Apparatus and method using subdivided swapchains for improved virtual reality implementations
US9959665B2 (en) * 2015-07-21 2018-05-01 Qualcomm Incorporated Zero pixel culling for graphics processing

Also Published As

Publication number Publication date
CN106204712A (zh) 2016-12-07
US10311628B2 (en) 2019-06-04
US20160350965A1 (en) 2016-12-01
CN106204712B (zh) 2019-09-27
US20180336718A1 (en) 2018-11-22
US10037620B2 (en) 2018-07-31

Similar Documents

Publication Publication Date Title
DE102016109905A1 (de) Stückweise lineare unregelmäßige Rasterisierung
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102015115232A1 (de) Verbessertes Anti-Aliasing durch räumliches und/oder zeitliches Variieren von Sample-Mustern
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102015113240A1 (de) System, verfahren und computerprogrammprodukt für schattierung unter verwendung eines dynamischen objektraumgitters
DE60126967T2 (de) Verfahren und Vorrichtung für Anti-Aliasing durch Überabtastung
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE112018004343T5 (de) Mehrraum-rendering mit konfigurierbaren transformationsparametern
DE102017108096A1 (de) System, verfahren und computerprogrammprodukt zum rendern bei variablen abtastraten mittels projektiver geometrischer verzerrung
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE112014002469T5 (de) System, Verfahren und Computerprogrammprodukt zur Erzeugung von Bildern für eine augennaheLichtfeldanzeige
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE102013114090A1 (de) Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms
DE102015113927B4 (de) Graphikverarbeitungseinheit zum Einstellen eines Detailierungsgrads, Verfahren zum Betreiben derselben und Vorrichtungen mit derselben
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013114373A1 (de) Konsistente Vertex-Einrastung für Rendering mit variabler Auflösung
DE102013021046A1 (de) Erzeugung fehlerbefreiter Voxel-Daten
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102018128699A1 (de) Einstellen einer Winkelabtastrate während eines Renderings unter Verwendung von Blickinformationen
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013222685A1 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
DE102017109472A1 (de) Stereo-mehrfach-projektion implementiert unter verwendung einer graphikverarbeitungs-pipeline

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication