DE102013114090B4 - Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms - Google Patents

Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms Download PDF

Info

Publication number
DE102013114090B4
DE102013114090B4 DE102013114090.4A DE102013114090A DE102013114090B4 DE 102013114090 B4 DE102013114090 B4 DE 102013114090B4 DE 102013114090 A DE102013114090 A DE 102013114090A DE 102013114090 B4 DE102013114090 B4 DE 102013114090B4
Authority
DE
Germany
Prior art keywords
edge
primitive
primitives
predetermined amount
coefficients
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.)
Active
Application number
DE102013114090.4A
Other languages
English (en)
Other versions
DE102013114090A1 (de
Inventor
Eric Brian Lum
Walter Robert Steiner
Henry Packard Moreton
Justin L. Cobb
Barry Nolan Rodgers
Yury Uralsky
Timo Oskari Aila
Tero Tapani KARRAS
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 DE102013114090A1 publication Critical patent/DE102013114090A1/de
Application granted granted Critical
Publication of DE102013114090B4 publication Critical patent/DE102013114090B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/40Scaling the whole image or part thereof
    • G06T3/403Edge-driven scaling

Abstract

Verfahren zum Rastern einer Primitiven, aufweisend:
Bestimmen einer Kante-Gleichung für jede Kante einer Primitiven, wobei die Kante-Gleichung Koeffizienten hat, welche die Kante der Primitive definieren;
Verschieben jeder Kante der Primitive, um die Primitive zu vergrößern, indem Koeffizienten der Kante-Gleichung, welche die Kante definieren, um einen Fehler-Term modifiziert werden, welcher ein vorbestimmter Betrag ist; und
Bestimmen von Pixeln, welche die Primitive schneiden, unter Benutzung der vergrößerten Primitive,
wobei die Koeffizienten jeder Kante-Gleichung von Vertizes der Primitive berechnet sind, welche auf eine fixe Zahl von Anteils-Bits eingeschnappt worden sind, und
wobei der vorbestimmte Betrag eine Funktion eines Abstands ist, um welchen die Kante der Primitiven eingeschnappt worden ist, wobei die Kante Kraft dessen eingeschnappt ist, dass die Kante mittels der eingeschnappten Vertizes definiert ist.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Grafik-Verarbeitung und insbesondere Rasterung von Primitiven (primitives).
  • HINTERGRUND
  • Eine Grafik-Verarbeitungs-Pipeline konvertiert Eingabe-Grafik-Daten (z.B. welche mit dreidimensionalen Objekten assoziiert sein können) in Pixel-Daten, welche mit einer zweidimensionalen Oberfläche assoziiert sind. In konventionellen Implementierungen ist ein Welt-Raum-Teil (world-space portion) der Grafik-Verarbeitungs-Pipeline verantwortlich zum Verarbeiten der Eingabe-Grafik-Daten, welche normalerweise aus einer Sammlung von Dreiecken und betreffenden Vertizes zusammengesetzt sind, bevor die Daten in Pixel-Daten konvertiert werden. Ein Schirm-Raum-Teil (screen-space portion) der Grafik-Verarbeitungs-Pipeline ist zum Verarbeiten der konvertierten Pixel-Daten und zum Erzeugen von finalen Pixel-Werten zur Anzeige verantwortlich.
  • Eine der Stufen der Grafik-Verarbeitungs-Pipeline ist die Rasterungs-Stufe, welche typischerweise ein Konvertieren der Grafik-Daten, welche mittels des Welt-Raum-Teils der Pipeline verarbeitet sind, in Pixel-Daten involviert. Rasterung (rasterization) kann involvieren Erzeugen von Kante-Gleichungen, welche die Kanten von Dreiecken beschreiben, welche in dem Welt-Raum-Teil der Pipeline verarbeitet sind, Bestimmen von Abdeckungs-Information (coverage information) für diese Dreiecke und Berechnen von Attribut-Werten für die Pixel und Fragmente, welche mittels der Dreiecke abgedeckt sind. Die Berechnungen, welche bei der Rasterung involviert sind, sind manchmal Fixpunkt-Berechnungen (fixed point calculations), welche normalerweise mit einer fixierten Anteils-Pixel-Genauigkeit (fixed fractional-pixel precision) durchgeführt werden. Somit können die Ergebnisse von Fixpunkt-Rasterung-Berechnungen angenommen werden, als auf ein Gitter „eingeschnappt“ bzw. eingerastet (snapped) zu sein, wobei die Boxen des Gitters Boxen von Anteils-Pixel-Größe (fractional-pixel size) entsprechen.
  • In vielen Implementierungen kann eine Grafik-Verarbeitungs-Pipeline dasselbe dreidimensionale Objekt bei verschiedenen Auflösungen rastern. Zum Beispiel kann ein Dreieck zuerst bei einer niedrigen Auflösung gerastert werden, um gewisse Bestimmungen über das Dreieck zu machen, wie etwa welche allgemeinen Teile einer Oberfläche durch das Dreieck abgedeckt sind. Das Dreieck kann nachfolgend bei einer höheren Auflösung gerastert werden, um Bild-Daten zur Anzeige zu erzeugen. Rasterung, welche bei einer niedrigeren Auflösung durchgeführt ist, stellt jedoch Ergebnisse bereit, welche „eingeschnappt“ auf ein gröberes Gitter sind als Rasterung, welche bei einer höheren Auflösung durchgeführt ist. Daher kann eine niedrigere-Auflösung-Rasterung Abdeckungs-Ergebnisse erzeugen, welche nicht korrekt mit den Abdeckungs-Ergebnissen von höhere-Auflösung-Rasterung übereinstimmen (align). Wenn z.B. ein Frame-Puffer-Speicher für dünnes Rendern (sparse rendering) basierend auf den Ergebnissen von niedrige-Auflösung-Rasterung allokiert ist, kann Speicher über-allokiert oder unter-allokiert aufgrund der Tatsache sein, dass die Ergebnisse von niedrigere-Auflösung-Rasterung auf ein gröberes Gitter eingerastet bzw. eingeschnappt sind. Insbesondere kann Speicher für Blöcke allokiert sein, für welche keine Allokierung notwendig ist, oder Speicher kann daran scheitern, für Blöcke allokiert zu sein, für welche Allokierung notwendig ist.
  • HERTEL, S. et al beschreiben in „A Hybrid GPU Rendering Pipeline for Alias-Free Hard Shadows, Eurographics 2009 Areas Paper“ eine GPU Rendering Pipeline.
  • LAINE, S. et al beschreiben in „High Performance Software Rasterization on GPUs, Proceedings of the ACM SIGGRAPH Symposium on High Performance Graphics, 2011, Seite 79 bis 88 eine Software-basierte Pipeline in einer GPU.
  • HASSELGREN, J beschreibt in der Doktorarbeit mit dem Titel „Performance Improvements for the Rasterization Pipeline, Department of Computer Science, Lund University, 2009“ eine Pipeline zum Rastern von Grafiken.
  • US 2004/0246251 A1 beschreibt ein Verfahren zur Bestimmung von Schatten bei dreidimensionalen Computergrafiken.
  • AKENINE-MÖLLER; T. et al beschreiben in „Conservative and Tiled Rasterization Using a Modified Triangle Setup“ ein Verfahren zum Rastern auf der Grundlage von Dreiecken.
  • Somit gibt es einen Bedarf zum Adressieren von Genauigkeits-Problemen, wenn Grafik-Daten gerastert werden und/oder zum Adressieren anderer Probleme, welche mit dem Stand der Technik assoziiert sind.
  • ZUSAMMENFASSUNG
  • Ein Verfahren und Speichermedium sowie ein System gemäß den unabhängigen Ansprüchen sind bereitgestellt zur konservativen Rasterung von Primitiven unter Benutzung eines Fehler-Terms. In Benutzung wird eine Kante-Gleichung für jede Kante einer Primitiven bestimmt, wobei die Kante-Gleichung Koeffizienten hat, welche die Kante der Primitiven definieren. Jede Kante der Primitiven wird verschoben, um die Primitive dadurch zu vergrößern, dass die Koeffizienten der Kante-Gleichung, welche die Kante definieren, um einen Fehler-Term modifiziert werden, welcher eine vorbestimmte Größe ist. Pixel, welche die Primitive schneiden, werden dann unter Benutzung der vergrößerten Primitive bestimmt.
  • Figurenliste
    • 1 illustriert ein Flussdiagramm eines Verfahrens zur konservativen Rasterung von Primitiven unter Benutzung eines Fehler-Terms in Übereinstimmung mit einer Ausführungsform;
    • 2 illustriert ein Flussdiagramm eines Verfahrens zur konservativen Rasterung von Primitiven in beiden einem groben Raster und einem feinen Raster in Übereinstimmung mit einer anderen Ausführungsform;
    • 3A illustriert ein Flussdiagramm eines Verfahrens zur konservativen Rasterung von Primitiven in einem feinen Raster unter Benutzung eines Fehler-Terms in Übereinstimmung mit noch einer anderen Ausführungsform;
    • 3B illustriert ein Pixel, welches eine Primitive schneidet, in Übereinstimmung mit einer anderen Ausführungsform;
    • 4 illustriert eine Grafik-Verarbeitungs-Pipeline in Übereinstimmung mit noch einer anderen Ausführungsform;
    • 5 illustriert eine Parallel-Verarbeitungs-Einheit (PPU) gemäß einer Ausführungsform;
    • 6 illustriert den strömenden (streaming) Mehr-Prozessor von 5 gemäß einer Ausführungsform; und
    • 7 illustriert ein exemplarisches System, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert werden kann.
  • DETAILLIERTE BESCHREIBUNG
  • Konservative Rasterung ist eine Rasterungs-Technik, wo, wenn irgendeine Fläche eines Pixels von einer Primitiven geschnitten wird (intersected), das Pixel zur Rasterung der Primitiven betrachtet wird. Dieses unterscheidet sich von traditionellen Rasterungs-Techniken, welche ein Pixel als einen Proben-Punkt (sample point) oder mehrere Proben-Punkte betrachten und, wenn die Proben-Pixel bzw. das Proben-Pixel innerhalb der Primitive ist, werden das Proben-Pixel bzw. die Proben-Pixel zur Rasterung der Primitiven betrachtet. Mit einer konservativen Rasterung werden alle Pixel, welche tatsächlich die Primitive schneiden, immer identifiziert werden. Der konservative Rasterungs-Prozess kann jedoch Pixel als eine Primitive schneidend identifizieren, welche mit perfekter Präzision nicht als die Primitive schneidend identifiziert würden. Es sollte bemerkt werden, dass in der vorliegenden Beschreibung Pixel betrachtet sind, eine rechteckige Fläche einer Anzeige zu besetzen und jede Primitive ein Dreieck, eine Linie oder Punkt sein kann.
  • Konservative Rasterung ist nützlich, um einer Grafik-Verarbeitungs-Einheit (GPU) zu erlauben, schnell die Pixel zu identifizieren, welche eine Primitive schneiden, so dass sie von anderen Ressourcen benutzt werden können, um weiterhin komplexe Berechnungen an dem Pixel durchzuführen. Zum Beispiel kann eine GPU mit einer konservativen Rasterungs-Fähigkeit schnell die Pixel finden, welche von einer Primitive geschnitten werden, diese Pixel an eine andere Rechen-Ressource senden und Berechnungen durchführen, welche die fixe-Funktion-Pipelines in der GPU nicht die Fähigkeit durchzuführen haben können bzw. brauchen. Ein Beispiel von diesem ist extrem feines Mehrfach-Abtasten (multisampling) für Antialiasing. Wenn die GPU konfiguriert ist, Mehrfach-Abtasten bis zu 4x4 Proben pro Pixel durchzuführen, kann eine andere Rechen-Ressource konfiguriert sein, Mehrfach-Abtasten durchzuführen, wenn mehr als 4x4 Proben pro Pixel benutzt werden, z.B. 16x16 Mehrfach-Abtasten. Das 16x16 Mehrfach-Abtasten kann mittels programmierbarer Schattierungs-Ressourcen innerhalb der GPU selbst durchgeführt werden oder kann in einem anderen Chip oder in einer Rechen-Ressource durchgeführt werden, wie etwa eine CPU (Zentral-Verarbeitungs-Einheit). Andere Beispiele, welche von konservativer Rasterung bei niedriger Auflösung profitieren können, um eine Verarbeitungs-Arbeits-Belastung zu partitionieren, umfassen Raytracing oder globale Beleuchtung, wo Pixel, welche eine Primitive schneiden, identifiziert sind, wobei dann komplexe oder speziell zugeschnittene Beleuchtungs-Berechnungen durchgeführt werden, um die tatsächliche Farbe der Pixel zu bestimmen.
  • Wenn konservative Rasterung benutzt wird, werden die Primitive-Positionen auf ein Gitter eingeschnappt. Wenn sich die Pixel-Auflösung ändert, feiner oder gröber werdend, kann das Einschnappen die Form der Primitiven beeinflussen. Mit anderen Worten ist die Form der Primitiven inkonsistent für verschiedene Pixel-Auflösungen, weswegen die Pixel, welche betrachtet sind, von den Primitiven abgedeckt zu sein, für verschiedene Pixel-Auflösungen variieren können.
  • 1 illustriert ein Flussdiagramm eines Verfahrens 100 zur konservativen Rasterung von Primitiven unter Benutzung eines Fehler-Terms in Übereinstimmung mit einer Ausführungsform. Solch ein Fehler-Term kann benutzt werden, um die zuvor erwähnte konservative-Rasterungs-Inkonsistenz zu kompensieren. Bei Schritt 102 wird eine Kante-Gleichung für jede Kante einer Primitive bestimmt, wobei die Kante-Gleichung Koeffizienten hat, welche die Kante der Primitiven definieren.
  • Zum Beispiel kann eine dreieckige Primitive mittels eines Satzes von Kanten definiert werden. Ferner kann jede Kante der Primitive mittels dreier Koeffizienten für eine Gleichung definiert werden, welche die Platzierung der Primitive auf der Anzeige beschreibt. Die Gleichung kann definiert sein als: Eo + Ex ( x ) + Ey ( y )
    Figure DE102013114090B4_0001
  • Die Koeffizienten können von Vertizes der Primitive berechnet werden, welche in Schirm-Raum transformiert worden sind. In einer Ausführungsform können die Vertizes auf eine fixe Anzahl von Anteils-Bits (fractional bits) (z.B. 8 Bits) eingeschnappt worden sein, um eine genaue Präzision in Raster-Berechnungen zu ermöglichen und somit eine gleichförmige Präzision über die Anzeige hinweg. Somit können die Koeffizienten die Platzierung einer eingeschnappten Kante definieren.
  • Ferner können die Koeffizienten und die resultierenden Kante-Gleichungen derart berechnet werden, dass, wenn irgendein Punkt (x, y) auf der Linie (d.h. Kante) ist, das Kante-Gleichung-Ergebnis null sein wird. Wenn (x, y) auf der Seite von Linie ist, auf der die Primitive liegt, wird das Ergebnis positiv und auf der anderen Seite der Kante negativ. Wenn ein Punkt (x, y) berechnet wird, positiv für alle drei Kanten zu sein, ist so der Punkt innerhalb der Primitive.
  • In Schritt 104 wird jede Kante der Primitive verschoben, um die Primitive dadurch zu vergrößern, indem Koeffizienten der Kante-Gleichung, welche die Kante definieren, um einen Fehler-Term modifiziert werden, welcher eine vorbestimmte Größe bzw. Betrag (amount) ist. Wie oben bemerkt ist, kann dieser Fehler-Term für den Zweck eines Kompensierens von Inkonsistenzen benutzt werden, welche mittels eines Einschnappens von Primitiven auf ein Gitter während des konservativen Rasterungs-Prozesses eingeführt sind. Der Fehler-Term kann auch benutzt werden, um Präzisions-Diskrepanzen der arithmetischen Operationen zu kompensieren, welche auf die Primitiven angewendet sind. Als eine Option kann der Fehler-Term programmierbar sein, derart, dass z.B. der Wert des Fehler-Terms eine Funktion der Größe von Präzision ist, welche mittels des konservativen Rasterungs-Prozesses eingeführt ist. Nur als ein Beispiel kann, wenn die Inkonsistenz zumindest zum Teil aufgrund des oben beschriebenen Einschnappens der Primitive eingeführt ist, der Fehler-Term eine Funktion des Abstandes sein, durch welchen jede Kante der Primitive eingeschnappt worden ist, wo die Kante aufgrund dessen eingeschnappt ist, dass die Kante mittels der eingeschnappten Vertizes definiert ist. In einer optionalen Ausführungsform kann der Fehler-Term die Hälfte des Abstandes sein, durch den jede Kante der Primitive eingeschnappt worden ist. Ferner kann derselbe Fehler-Term benutzt werden, um die Koeffizienten zu modifizieren.
  • Es sollte bemerkt werden, dass die Koeffizienten um einen vorbestimmten Betrag in irgendeiner vorkonfigurierten Weise modifiziert werden können, welche zu der Vergrößerung der Primitive führt. Wenn z.B. der vorbestimmte Betrag, welcher indikativ für den Fehler-Term ist, eine Potenz von zwei ist, dann können die Koeffizienten der Kante-Gleichung mittels eines Verschiebens der Koeffizienten der Kante-Gleichung basierend auf dem vorbestimmten Betrag modifiziert werden. Als ein anderes Beispiel können die Koeffizienten um den vorbestimmten Betrage gemäß der folgenden Gleichung modifiziert werden: Eo+Ex ( x +/- ErrorX ) +Ey ( y +/- ErrorY )
    Figure DE102013114090B4_0002
  • In der oben gezeigten Gleichung kann der Fehler-Term selektiv addiert oder von den Koeffizienten subtrahiert werden. Insbesondere kann der Fehler-Term gewählt werden, die Primitive um den Fehler-Term zu vergrößern. Tabelle 1 illustriert eine exemplarische Konfiguration zum Auswählen des Vorzeichens (+ oder -) jedes angewendeten Fehler-Terms, wo nämlich die Vorzeichen auf der Richtung und Orientierung der Kante basiert sind. Tabelle 1
    Eo-Vorzeichen Ex-Vorzeichen Ey-Vorzeichen Ecke X +/- Y +/-
    0 0 0 oben rechts - +
    0 0 1 unten rechts + +
    0 1 0 oben links - -
    0 1 1 unten links + -
    1 0 0 unten links + -
    1 0 1 oben links - -
    1 1 0 unten rechts + +
    1 1 1 oben rechts - +
  • In Schritt 106 werden dann Pixel, welche die Primitive schneiden, unter Benutzung der vergrößerten Primitive bestimmt. Als eine Option kann nur eine Untermenge von Pixeln gemäß dem Schritt 106 analysiert werden. Zum Beispiel kann Schritt 106 mit Rücksicht auf einen feines-Raster-Prozess durchgeführt werden und kann ferner nur für Pixel von Mehr-Pixel-Kacheln (tiles) durchgeführt werden, welche während eines grobes-Raster-Prozesses bestimmt sind, die Primitive zu schneiden. Mehr Information bezüglich eines solchen grobes-Raster-Prozesses wird unten bereitgestellt.
  • In einer Ausführungsform kann ein Pixel bestimmt sein, zumindest potentiell die Primitive zu schneiden, wenn es bestimmt ist, dass nicht alle Ecken des Pixels auf der negativen Seite irgendeiner einer Kante der vergrößerten Primitive sind oder mit anderen Worten, dass alle vier Ecken des Pixels nicht außerhalb irgendeiner Kante der vergrößerten Primitive sind. Wo Schritt 106 nur bestimmt, dass ein Pixel potentiell die Primitive schneiden kann, kann weitere Verarbeitung durchgeführt werden, um zu bestimmen, ob das Pixel tatsächlich die Primitive schneidet. Solch eine weitere Verarbeitung wird im größeren Detail unten beschrieben.
  • Mehr illustrative Information wird nun bezüglich verschiedener optionaler Architekturen und Merkmale ausgeführt, mit welchen das vorangehende Rahmenwerk implementiert werden kann oder nicht implementiert zu werden braucht, nach den Wünschen des Benutzers. Es sollte deutlich bemerkt sein, dass die folgende Information für illustrative Zwecke ausgeführt ist und nicht betrachtet werden sollte, in irgendeiner Weise zu begrenzen. Irgendwelche der folgenden Merkmale können optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen inkorporiert sein.
  • 2 illustriert ein Flussdiagramm eines Verfahrens 200 zur konservativen Rasterung von Primitiven in beidem, einem groben Raster und einen feinen Raster in Übereinstimmung mit einer anderen Ausführungsform. Als eine Option kann das vorliegende Verfahren 200 in dem Kontext der Funktionalität von 1 ausgeführt werden. Natürlich kann jedoch das Verfahren 200 in irgendeiner gewünschten Umgebung ausgeführt werden. Es sollte bemerkt werden, dass die zuvor erwähnten Definitionen während der vorliegenden Beschreibung gelten können.
  • In Schritt 202 werden Vertizes einer Primitiven auf eine fixierte Zahl von Bits eingeschnappt. Zusätzlich werden in Schritt 204 Kante-Koeffizienten und eine Begrenzungs-Box für die Primitive berechnet. Somit können die Kante-Koeffizienten und die Begrenzungs-Box die Platzierung der Primitive, sobald sie eingeschnappt ist, widerspiegeln. In der vorliegenden Beschreibung kann die Begrenzungs-Box das minimale oder das kleinste Rechteck sein, welche die Primitive begrenzt (d.h. einschließt).
  • In Schritt 206 werden ein oder mehrere grobe Kacheln, welche die Primitive schneiden, bestimmt. Die groben Kacheln können irgendein Block von Pixeln einer vorkonfigurierten Größe (z.B. 16x16 Pixel) sein. Die Primitive kann in groben Kachel-Schritten abgetastet werden, um zu bestimmen, ob jede Kachel die Primitive schneidet. Es kann bestimmt sein, dass die Primitive die grobe Kachel schneidet, wenn: 1) die Begrenzungs-Box muss die grobe Kachel schneiden, und 2) nicht alle Ecken der groben Kachel sind auf der negativen Seite von irgendeiner Kante der Primitive. Als eine Option (nicht gezeigt) kann es für jede grobe Kachel, welche bestimmt ist, die Primitive zu schneiden, ferner bestimmt werden, ob jede feine Kachel (z.B. 8x8 Pixel), welche die grobe Kachel ausmacht, die Primitive schneidet.
  • Für jede bestimmte grobe Kachel werden die Pixel der groben Kachel, welche die Primitive schneiden, auch bestimmt. Man bemerke Schritt 208. Wo die schneidenden feinen Kacheln bestimmt worden sind (nicht gezeigt), können die Pixel jeder schneidenden feinen Kachel, welche die Primitive schneidet, alternativ bestimmt werden. Während einer konservativen Rasterung kann ein Pixel bestimmt sein, die Primitive zu schneiden, wenn irgendein Teil der Pixel-Fläche die Primitive berührt.
  • Zu diesem Zweck kann eine hierarchische Technik benutzt werden, um die Pixel zu bestimmen, welche die Primitive schneiden. Die groben Kacheln nämlich, welche die Primitive schneiden, werden in Schritt 206 bestimmt und ferner in Schritt 208 werden für jede bestimmte grobe Kachel die Pixel solch einer groben Kachel bestimmt, welche die Primitive schneiden. In Schritt 210 werden die bestimmten Pixel verarbeitet. Beispiele eines solchen Verarbeitens sind unten mit Bezug auf 4 beschrieben.
  • 3A illustriert ein Flussdiagramm eines Verfahrens 300 zur konservativen Rasterung von Primitiven in einem feinen Raster unter Benutzung eines Fehler-Terms in Übereinstimmung mit noch einer anderen Ausführungsform. Als eine Option kann das vorliegende Verfahren 300 in dem Kontext der Funktionalität von 1-2 ausgeführt werden. Zum Beispiel kann das Verfahren 300 während Schritt 208 von 2 ausgeführt werden. Natürlich kann jedoch das Verfahren 300 in irgendeiner gewünschten Umgebung ausgeführt werden. Wieder sollte es bemerkt werden, dass die zuvor erwähnten Definitionen während der vorliegenden Beschreibung gelten können.
  • In Schritt 302 wird ein Pixel identifiziert. Zum Beispiel kann das Pixel in einer groben Kachel bestimmt werden, welche vorher bestimmt ist, eine Primitive zu schneiden. Um konservativ zu bestimmen, ob das Pixel die Primitive schneidet, anstatt die Bestimmung auf einer Anzahl von Proben-Punkten zu basieren, wie es in traditionellen Rasterungs-Techniken durchgeführt ist, können die Ecken des Pixels als eine Basis zur Schnitt-Bestimmung bestimmt werden. Ferner braucht nur eine der vier Ecken pro Kante berechnet werden, solange wie die korrekte Ecke ausgewählt ist. Mit anderen Worten braucht, wenn die korrekte Ecke ausgewählt ist, nur diese Ecke gegen die Primitive getestet werden. Die korrekte Ecke auszuwählen ist diejenige, welche am weitesten von der Kante entfernt ist, welche auf derselben Seite der Kante liegt wie die Primitive. Die Richtung und Orientierung der Kante kann mittels des Vorzeichens der Kante-Koeffizienten bestimmt werden, wie in der Tabelle 1 oben gezeigt ist. Abhängig davon, wie die Kanten definiert sind und abhängig von dem Koordinaten-System, können die Vorzeichen verschieden sein aber die Idee ist dieselbe.
  • Um effektiv die ausgewählte Ecke zu testen, wird in Schritt 304 die Primitive mittels eines Verschiebens jeder Kante der Primitive um einen ersten vorbestimmten Betrag vergrößert. Zum Beispiel hat der traditionelle aliased Rasterer einen Proben-Punkt in der Mitte des Pixels definiert. Das konservative Raster des vorliegenden Verfahrens 300 kann dadurch implementiert werden, indem die zentrale Probe (sample) zu der ausgewählten Ecke pro Kante der Primitive verschoben wird, oder in anderen Worten, indem jede Kante der Primitiven in der korrekten Richtung um den ersten vorbestimmten Betrag verschoben wird, um die zentrale Probe wie einen Eck-Punkt erscheinen zu lassen bzw. aussehen zu lassen. Der erste vorbestimmte Betrag kann ein vorbestimmter Anteil einer Größe eines Pixels sein, wie etwa eine Hälfte der Größe des Pixels.
  • Insbesondere kann Schritt 304 umfassen Modifizieren von Koeffizienten der Kante-Gleichung, welche die Kante definiert, um den ersten vorbestimmten Betrag, um die Primitive zu vergrößern. Die folgende Gleichung zeigt ein Beispiel einer Technik zum Modifizieren der Koeffizienten, um die Primitive zu verschieben: Eo+Ex ( x +/- ,5 ) +Ey ( y +/- ,5 ) = Eo ' + Ex ( x ) + Ey ( y )
    Figure DE102013114090B4_0003
    wobei Eo' = (Eo +/- ,5Ex +/- ,5Ey) or Eo' = (Eo +/- Ex>>1 +/- Ey>>1)
    wobei >> eine Rechts-Verschiebung ist
  • Zu diesem Zweck können die Koeffizienten um einen selben ersten vorbestimmten Betrag modifiziert sein, aber das Vorzeichen, um das die Koeffizienten modifiziert sind (d.h. + oder -) kann differieren. Mit Betrachtung auf die vorliegende Ausführungsform kann das Vorzeichen basierend auf der Richtung und Orientierung der Kante ausgewählt sein, wie es in Tabelle 1 konfiguriert ist.
  • Ferner ist in Schritt 306 die Primitive dadurch weiter vergrößert, dass jede Kante der Primitive um einen Fehler-Term verschoben wird. Der Fehler-Term kann ein zweiter vorbestimmter Betrag sein, welcher kleiner ist als der erste vorbestimmter Betrag, welcher benutzt ist, um die Position der Primitive zu verschieben. Somit kann die Primitive durch beide den ersten vorbestimmten Betrag und den Fehler-Term vergrößert werden. In Schritt 308 wird die Begrenzungs-Box, welche für die Primitive berechnet ist, auch vergrößert, indem jede Kante der Begrenzungs-Box verschoben wird. Zum Beispiel kann jede Kante der Begrenzungs-Box um den Fehler-Term verschoben werden, welcher benutzt ist, um die Primitive zu vergrößern.
  • Es wird dann in Schritt 310 bestimmt, ob die Pixel-Probe die vergrößerte Primitive schneidet. Wenn es bestimmt ist, dass die Pixel-Probe nicht die vergrößerte Primitive schneidet, ist es in Schritt 312 bestimmt, dass das Pixel nicht die Primitive schneidet. Wenn es jedoch in Schritt 310 bestimmt ist, dass die Pixel-Probe die vergrößerte Primitive schneidet, ist es ferner in Entscheidung 314 bestimmt, ob die Pixel-Probe die vergrößerte Begrenzungs-Box schneidet. Wenn es bestimmt ist, dass die Pixel-Probe nicht die vergrößerte Begrenzungs-Box schneidet, ist es in Schritt 312 bestimmt, dass das Pixel nicht die Primitive schneidet. Wenn es jedoch in Entscheidung 314 bestimmt ist, dass die Pixel-Probe die vergrößerte Begrenzungs-Box schneidet, ist das Pixel bestimmt, die Primitive zu schneiden. Man bemerke Schritt 316.
  • 3B illustriert ein Pixel 320, welches eine Primitive 322 schneidet in Übereinstimmung mit einer anderen Ausführungsform. Wie gezeigt ist, hat jede Kante zumindest eine Pixel-Ecke 326, welche innerhalb dieser Kante ist. Zusätzlich schneidet die Begrenzungs-Box 324 der Primitive 322 das Pixel 320. Als ein Ergebnis von beidem, dass die Begrenzungs-Box 324 der Primitiven 322 das Pixel 320 schneidet und dass jede Kante zumindest eine Pixel-Ecke 326 hat, welche innerhalb dieser Kante ist, ist es bestimmt, dass das Pixel die Primitive schneidet.
  • 4 illustriert eine konzeptionelle Grafik-Verarbeitungs-Pipeline 400, in Übereinstimmung mit einer Ausführungsform. Als eine Option kann die Grafik-Verarbeitungs-Pipeline 400 implementiert sein, die Verfahren von 1-3A auszuführen. Natürlich kann jedoch die Grafik-Verarbeitungs-Pipeline 400 in irgendeiner gewünschten Umgebung implementiert sein. Wieder sollte es bemerkt sein, dass die zuvor erwähnten Definitionen während der vorliegenden Beschreibung gelten können.
  • Die Grafik-Verarbeitungs-Pipeline 400 kann unter Benutzung einer programmierbaren Verarbeitungs-Einheit oder unter Benutzung dedizierter Verarbeitungs-Einheiten für eine oder mehr Funktionen implementiert sein. Eine Vertex-Verarbeitungs-Einheit 406 ist eine programmierbare Ausführungs-Einheit, welche konfiguriert ist, Vertex-Schattierungs-Programme auszuführen, welche Vertex-Daten, wie mittels der Vertex-Schattierungs-Programme spezifiziert ist, aufhellen (lighting) bzw. beleuchten und transformieren. Zum Beispiel kann die Vertex-Verarbeitungs-Einheit 406 programmiert sein, die Vertex-Daten von einer Objekt-basierten Koordinaten-Repräsentation (Objekt-Raum) auf ein alternativ basiertes Koordinaten-System zu transformieren, wie etwa einen Welt-Raum oder normalisierte-Geräte-Koordinaten-(NDC)-Raum.
  • Die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 ist eine programmierbare Ausführungs-Einheit, welche konfiguriert ist, Tessellations-Schattierungs-Programme auszuführen. Die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 verarbeitet Vertizes, welche mittels der Vertex-Verarbeitungs-Einheit 406 erzeugt sind, und kann konfiguriert sein, Grafik-Primitive zu erzeugen, welche als Flecken (patches) und andere Flecken-Attribute bekannt sind. In einigen Ausführungsformen kann die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 auch Topologie-Konfiguration durchführen, die Vertizes zu indizieren, einschließlich Vertizes, welche mit Flecken assoziiert sind, und Textur-Koordinaten entsprechend den Vertizes berechnen. Die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 kann auch konfiguriert sein, Geometrie-Schattierungs-Programme auszuführen, um dadurch Grafik-Primitive zu transformieren. Vertizes sind gruppiert, um Grafik-Primitive zur Verarbeitung zu konstruieren, wobei Grafik-Primitive Dreiecke, Linien-Segmente, Punkte und dergleichen umfassen. Zum Beispiel kann die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 programmiert sein, um die Grafik-Primitiven in eine oder mehr neue Grafik-Primitive zu unterteilen und Parameter zu berechnen, wie etwa Ebene-Gleichung-Koeffizienten, welche benutzt werden, um die neuen Grafik-Primitiven zu rastern. In einigen Ausführungsformen kann die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 auch Elemente in dem Geometrie-Strom hinzufügen oder entfernen. Die Tessellations- und Geometrie-Verarbeitungs-Einheit 408 gibt die Parameter und Vertizes, welche neue Grafik-Primitive spezifizieren, an eine Darstellungsfeld- bzw. Sichtfenster-(viewport) -Skalierungs-, Aussondern-(cull) und Abschneide-(cllp)-Einheit 412 aus.
  • Die Sichtfenster-Skalierungs-, Aussondern- und Abschneide-Einheit 412 empfängt geometrische Daten, welche ein Objekt betreffen, und führt eine Darstellungs-Feld bzw. Sichtfenster-Transformierte auf den geometrischen Daten aus, um Koordinaten für die Vertizes des Objekts in einem zweidimensionalen Schirm-Raum zu erzeugen. Eine Darstellungs-Feld-Verarbeitungs-Einheit innerhalb der Darstellungs-Feld-Skalierungs-, Aussonderungs- und Abschneide-Einheit 412 kann konfiguriert sein, die Darstellungs-Feld-Transformierte durchzuführen, wobei der Schnapp-Abstand (snap spacing) basierend auf der Darstellungs-Feld-Auflösung variiert. Eine gewisse Auflösung (z.B. Breite und Höhe in Pixeln), welche im Allgemeinen einem zweidimensionalen Gitter oder Raum entspricht, ist für die Darstellungs-Feld-Transformierte spezifiziert. Die Koordinaten der Vertizes des Objekts in dem zweidimensionalen Raum haben Werte, welche dieser Auflösung entsprechen. Somit können für eine Auflösung von 320×240 Pixeln horizontale Koordinaten für Vertizes eines Objektes von 0 bis 320 rangieren und vertikale Koordinaten können von 0 bis 240 rangieren. Für andere Auflösungen können Koordinaten verschiedene Bereiche haben.
  • Berechnen für die Darstellungs-Feld-Transformierte umfasst typischerweise einiges Runden. Das heißt, Koordinaten, welche von der Darstellungs-Feld-Transformierten resultieren, haben einen gewissen Betrag von Rundung angewendet, was bedeutet, dass die Ergebnisse der Berechnungen zum Erzeugen der Schirm-Raum-Vertizes auf eine gewisse Genauigkeit gerundet sind. Die Darstellungs-Feld-Transformierte „schnappt“ (snaps) auch Koordinaten für die Objekt-Vertizes auf ein spezifiziertes Teil-Pixel-Gitter. Mit anderen Worten sind die Schirm-Raum-Positionen für die Vertizes des Objekts, auf welches eine Darstellungs-Feld-Transformierte angewendet worden war, mit einem Gitter ausgerichtet, wobei die Zellen (oder „Teil-Pixel“) des Gitters eine Größe haben, welche gleich einem spezifizierten Anteil eines Pixels ist (z.B. alle Zellen in dem Gitter können eine große Größe gleich einem 1/4 oder einem 1/64 eines Pixels haben). Der Einrast- bzw. Einschnapp-(snap)-Abstand steuert die Präzision, mit welcher Vertizes relativ zu der Auflösung des Darstellungs-Felds eingeschnappt bzw. eingerastet werden. Der Einschnapp-Abstand ist die Dimension (Höhe oder Breite) der Zellen in dem Gitter und ist als ein Anteil eines Pixels spezifiziert. Das „Einschnappen“ bewirkt, dass die Koordinaten eines Objekts mit dem Teil-Pixel-Gitter ausgerichtet werden. Die Ergebnisse der Darstellungs-Feld-Transformierten umfassen die Wirkungen des Einschnappens und des Rundens und umfassen im Allgemeinen Schirm-Raum-Koordinaten für jeden Vertex jedes Objekts, ausgerichtet an das Teil-Pixel-Gitter.
  • Die Darstellungs-Feld-Skalierungs-, Aussonderungs- und Abschneide-Einheit 412 führt ein Abschneiden, Aussondern und Darstellungs-Feld-Skalierung durch und gibt verarbeitete Grafik-Primitive an eine Primitive-Aufsetz-Einheit 414 aus. Die Primitive-Aufsetz-Einheit 414 berechnet die Kante-Gleichung-Koeffizienten für jede Kante jeder Primitiven (z.B. Start-Werte, Delta_x, Delta_y, die Kante-Steigung, etc.). Wenn ein Einschnappen benutzt wird, kann eine Kante mittels zweier der eingestellten (d.h. eingeschnappten) Vertizes einer Primitive definiert werden.
  • Die Aufsetz-Einheit 414 kann konfiguriert sein, Inkonsistenzen zu kompensieren, welche von einem Einschnappen mittels eines Vergrößerns der Primitive um den Fehler-Term und mittels eines Vergrößerns der Begrenzungs-Box um den Fehler-Term resultieren. In einer Ausführungsform bestimmt die Aufsetz-Einheit 414 eine Start-Kachel basierend auf dem oberen am meisten links befindlichen Vertex. Alle Kante-Gleichungen sind auf der Start-Kachel basiert. Bei dem Ausgang der Aufsetz-Einheit 414 sind die Kante-Koeffizienten in fixiertem Punkt und sind genau präzise in allen Fällen. So wird ein erneutes Referenzieren der Kante-Gleichungen bei diesem Punkt nicht die Primitive-Stellung oder -Form verändern. Mit anderen Worten ist von der Aufsetz-Einheit 414 durch die Stromabwärts-Verarbeitungs-Einheit in der Grafik-Verarbeitungs-Pipeline konservative Rasterung konsistent.
  • Der Fehler-Term, welcher in die Koeffizienten für die Kante-Gleichungen inkorporiert ist, kann das Vergrößern und auch ein Halb-Pixel-Verschieben berücksichtigen, was benötigt ist, um zu erreichen, dass die zentrale Pixel-Probe wie ein Eck-Punkt jedes Pixels aussieht. Man bemerke, dass die Halb-Pixel-Verschiebung entweder mittels eines Aufblasens der Kanten um ½ Pixel oder mittels eines Durchführens einer Verschiebung von der Mitte zu der Ecke durchgeführt werden kann. Eo+Ex ( starting_tilex_16×16+/-errorX ) +Ey ( starting_tileX_16×16+/- errorY )
    Figure DE102013114090B4_0004
    Das Vorzeichen des Fehler-Terms ist durch die Kante-Orientierung und -Richtung bestimmt. Tabelle 1 oben zeigt die Konfiguration zum Bestimmen des Vorzeichens.
  • Für konservative Rasterung sind alle Kanten einer Primitive inklusive, was bedeutet, dass, wenn die Kante exakt auf dem Proben-Punkt liegt, der Proben-Punkt auf der Primitive ist. Irgendeine Logik, welche in der Aufsetz-Einheit 414 existiert, um die linken/oberen Kanten inklusive und die rechten/unteren exklusiv zu machen, kann fähig sein, deaktiviert zu werden. Die Begrenzungs-Box, welche mittels der Aufsetz-Einheit 414 berechnet ist, ist inklusive im Sinne der Kanten, die Begrenzungs-Box kann jedoch um den absoluten Wert der Fehler-Terme vergrößert werden. Wenn die Begrenzungs-Box-Seiten auf den nächsten bzw. nahesten Proben-Punkt eingeschnappt werden, welcher innerhalb der Begrenzungs-Box liegt, muss dieses Schrumpfen der Begrenzungs-Box deaktiviert werden. Die Aufsetz-Einheit 414 kann konfiguriert sein, die Begrenzungs-Box-Dimensionen mit 8 Anteils-Bits zu berechnen und welche auf 4 Anteils-Bits bei der Ausgabe der Aufsetz-Einheit 414 abgeschnitten sind (truncated). Das Abschneiden kann linke und obere Seiten der Begrenzungs-Box nach unten begrenzen (floor) und rechte und untere Seite nach oben begrenzen (ceiling), wenn auf 4 Anteils-Bits trunkiert wird.
  • Null-Fläche-Primitive
  • Eine Technik, um Null-Fläche-Primitive zu rastern, kann eingesetzt werden, optional in dem Kontext der Aufsetz-Einheit 414. Anfänglich wird eine Primitive, welche eine Null-Fläche resultierend von collinearen Vertizes hat, identifiziert. Ein Minimum-Vertex und ein Maximum-Vertex der Primitive werden bestimmt, um die Primitive als eine Linie zu definieren. Ferner können Attribute entlang der Linie interpoliert werden.
  • Nur als ein Beispiel können Null-Fläche-Primitive zu einem Punkt oder Linie führen. Sie können aufgrund eines Einschnappens oder einer Ungenauigkeit stromaufwärts auftreten. Null-Fläche-Primitive kann mittels Aufsetzen verarbeitet werden. Somit können Null-Fläche-Primitive als ein Punkt oder eine Linie behandelt werden. Obwohl die Primitive vergrößert wird (z.B. um zumindest 0,5 Pixel) startet die Aufsetz-Einheit 414 mit einer Linie. Die Aufsetz-Einheit 414 kann konfiguriert sein, von einer Dreieck-Primitive auf eine Linie oder einen Punkt-Modus zu ändern, nachdem die Fläche der Primitive berechnet ist. Wenn alle drei Vertizes kollokiert sind, wird ein Punkt gezeichnet, und wenn zwei Vertizes kollokiert sind, wird eine Linie gezeichnet. Wenn keiner der drei Vertizes kollokiert ist, aber noch eine Null-Fläche, sind die zwei Vertizes der Linie die zwei, welche auf der Begrenzungs-Box liegen.
  • Der Rasterer 416 empfängt die Schirm-Raum-Koordinaten für Vertizes eines Objektes und die Kante-Gleichung-Koeffizienten von der Primitive-Aufsetz-Einheit 414. Somit können die Kante-Gleichung-Koeffizienten, welche mittels des Rasterers 416 empfangen sind, diejenigen sein, welche modifiziert sind, um die Primitive zu vergrößern. Der Rasterer 416 nimmt Primitive und Kante-Gleichungen von der Aufsetz-Einheit und evaluiert die Kante-Gleichungen, welche mittels der Primitive-Aufsetz-Einheit 414 bereitgestellt sind, um Abdeckung von Proben oder Pixeln für das Objekt zu bestimmen. Der Rasterer 416 abtast-konvertiert die neuen Grafik-Primitiven und gibt Fragmente und Abdeckungs-Daten an Fragment-Verarbeitungs-Einheit 460 aus. Zusätzlich kann der Rasterer 416 konfiguriert sein, z-Aussondern (z culling) und andere z-basierte Optimierungen durchzuführen. In einer Ausführungsform kann der Rasterer 416 als ein grober Rasterer implementiert sein, welcher grobe Abdeckungs-Informationen berechnet, und ein feiner Rasterer, welcher Abdeckungs-Daten bei einer Teil-Pixel-Granularität berechnet.
  • Konservative Tiefe
  • In einigen Fällen ist es wünschenswert, eine konservative Tiefe zu haben (z.B. für Z-Aussondern, konservative Kompression, etc.). Initial ist ein Z-Anker für ein Dreieck oder eine Kachel von Pixeln identifiziert. Es kann z.B. pro Pixel einen Anker berechnet mittels Aufsetzens geben, oder optional kann von diesem pro-Primitive-Anker ein feines Raster einen pro-Kachel-Anker berechnen. Der Z-Anker wird dann um einen vorbestimmten Anteil des Pixels verschoben, um den Z-Anker bei einer Ecke des Pixels zu platzieren. Optional könnte die Anker-Verschiebung entweder in Aufsetzen (pro Primitive) oder in feinem Raster (pro Kachel) angewendet werden. Der Z-Anker, welcher bei der Ecke des Pixels platziert ist, wird dann evaluiert, um einen Maximum-Z-Wert oder einen Minimum-Z-Wert für das Pixel bereitzustellen.
  • Nur als ein Beispiel kann eine konservative Tiefe dadurch erreicht werden, dass die Z-Steigungs-Richtung bestimmt wird und dass Z bei der Minimum- oder Maximum-Ecke einer Kachel evaluiert wird. Wenn Z basierend auf einer Ebenen-Gleichung berechnet wird, z.B. wenn Z berechnet ist als: Z = Z0+ dz/dx * delta_x + dz/dy * delta_y
    Figure DE102013114090B4_0005
    wo Delta_x und Delta_y Proben-Positionen beschreiben, kann eine Evaluierung von Z bei der Minimum- oder Maximum-Ecke dadurch erreicht werden, dass der Z-Anker (Z0) um ½ eines Pixels zu dem Minimum- oder Maximum-Z verschoben wird, zum Beispiel Z0+ dz/dx * 0 ,5 + dz/dy * -0 ,5 ,
    Figure DE102013114090B4_0006
    um das Maximum-Z pro Pixel zu berechnen, wenn Z mit X ansteigt und mit y abfällt.
  • Die Fragment-Verarbeitungs-Einheit 422 ist eine programmierbare Ausführungs-Einheit, welche konfiguriert ist, Fragment-Schattierungs-Programme auszuführen, was Fragmente, welche von dem Rasterer 416 empfangen sind, transformiert wie mittels der Fragment-Schattierungs-Programme spezifiziert ist. Zum Beispiel kann die Fragment-Verarbeitungs-Einheit 422 programmiert sein, Operationen durchzuführen, wie etwa perspektivische Korrektur, Textur-Abbildung, Schattierung, Mischung bzw. Vermischen (blending) und dergleichen, um schattierte Fragmente zu erzeugen, welche an die Raster-Operationen-Einheit 424 ausgegeben werden. Die Fragment-Verarbeitungs-Einheit 422. Fragmente können bei Pixel, Probe oder einer anderen Granularität schattiert werden, abhängig von der programmierten Abtast-Rate.
  • Die Raster-Operationen-Einheit 424 ist eine Verarbeitungs-Einheit, welche Raster-Operationen durchführt, wie etwa Stencil, z-Test, Mischen, und dergleichen und gibt Pixel-Daten als verarbeitete Grafik-Daten zur Speicherung in Grafik-Speicher aus. Die verarbeiteten Grafik-Daten können in Speicher gespeichert werden, zur Anzeige oder für weitere Verarbeitung. In einigen Ausführungsformen der vorliegenden Erfindung ist Raster-Operationen-Einheit 424 konfiguriert, z- oder Farb-Daten zu komprimieren, welche an Speicher geschrieben sind, und z- oder Farb-Daten zu dekomprimieren, welche von Speicher gelesen sind.
  • 4B illustriert ein anderes Flussdiagramm eines Verfahrens 430 zum Einstellen von Vertex-Positionen in Übereinstimmung mit einer Ausführungsform. Die in Verfahren 430 gezeigten Schritte können mittels eines Anwendungs-Programms, wie etwa eines Vertex-Schattierers, durchgeführt werden, welcher mittels eines Grafik-Prozessors ausgeführt ist. Die im Verfahren 430 gezeigten Schritte können mittels einer Verarbeitungs-Einheit innerhalb eines Grafik-Prozessors durchgeführt werden, wie etwa die Darstellungs-Feld-Skalierungs-, Aussonderungs-, und Abschneide-Einheit 412. Bei Schritt 435 empfängt ein Anwendungs-Programm oder eine Verarbeitungs-Einheit Darstellungs-Feld-Dimensionen. Bei Schritt 440 bestimmt das Verfahren, ob die Darstellungs-Feld-Dimensionen vermindert sind, derart, dass die Einschnapp-Präzision geändert werden sollte, und, wenn dem so ist, wird bei Schritt 445 die Einschnapp-Abstand-Präzision (snap spacing precision) erhöht. Anderenfalls bestimmt das Verfahren bei Schritt 450, ob die Darstellungs-Feld-Dimensionen derart erhöht sind, dass die Einschnapp-Präzision geändert werden sollte, und, wenn dem so ist, wird bei Schritt 445 die Einschnapp-Abstands-Präzision vermindert. Anderenfalls bleibt der Einschnapp-Abstand ungeändert.
  • Bei Schritt 460 werden die Primitive-Vertex-Positionen auf ein Teil-Pixel-Gitter gemäß dem Darstellungs-Feld-abhängigen Einschnapp-Abstand eingestellt, um eingeschnappte Vertex-Positionen zu erzeugen. Bei Schritt 465 werden die Primitiven, welche mittels der eingeschnappten Vertex-Positionen definiert sind, gerastert.
  • 5 illustriert eine Parallel-Verarbeitungs-Einheit (PPU) 500 gemäß einer Ausführungsform. Während ein Parallel-Prozessor hierin als ein Beispiel der PPU 500 bereitgestellt ist, sollte es deutlich bemerkt sein, dass solch ein Prozessor nur für illustrative Zwecke ausgeführt ist und dass irgendein Prozessor eingesetzt werden kann, denselben zu ergänzen und/oder zu ersetzen. In einer Ausführungsform ist die PPU 500 konfiguriert, eine Mehrzahl von Threads gleichzeitig in zwei oder mehr Streaming-Mehr-Prozessoren (SMs) 550 auszuführen. Ein Thread (d.h. ein Thread von Ausführung) ist eine Instanziierung eines Satzes von Anweisungen, welche innerhalb eines bestimmten SM 550 ausführen. Jeder SM 550, welcher in größerem Detail im Zusammenhang mit 6 beschrieben ist, kann umfassen, aber ist nicht darauf begrenzt, einen oder mehrere Verarbeitungs-Kerne, eine oder mehrere Lade-/Speicher-Einheiten (LSUs), einen Level-eins-(L1)-Zwischenspeicher, gemeinsam benutzten Speicher und dergleichen.
  • In einer Ausführungsform umfasst die PPU 500 eine Eingabe/Ausgabe-(I/0)-Einheit 505, welche konfiguriert ist, Kommunikationen (z.B. Befehle, Daten, etc.) von einer Zentral-Verarbeitungs-Einheit (CPU) (nicht gezeigt) über den System-Bus 502 zu übermitteln und zu empfangen. Die I/O-Einheit 505 kann eine Peripheral-Component-Interconnect-Express-(PCIe)-Schnittstelle für Kommunikationen über einen PCIe-Bus implementieren. In alternativen Ausführungsformen kann die I/O-Einheit 505 andere Typen von wohl bekannten Bus-Schnittstellen implementieren.
  • Die PPU 500 umfasst auch eine Host-Schnittstelle-Einheit 510, welche die Befehle dekodiert und die Befehle an die Gitter-Management-Einheit 515 oder andere Einheiten der PPU 500 (z.B. Speicher-Schnittstelle 580) übermittelt, wie die Befehle es spezifizieren können. In dem Kontext der Gitter-Management-Einheit 515 ist ein Gitter eine Quantität von Verarbeitungs-Arbeit. Die Host-Schnittstelle-Einheit 510 ist konfiguriert, Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 500 zu führen bzw. zu leiten (route).
  • In einer Ausführungsform ist ein Programm, welches als ein Befehls-Strom kodiert ist, auf einen Puffer mittels der CPU geschrieben. Der Puffer ist Bereich im Speicher, z.B. Speicher 504 oder System-Speicher, welcher sowohl von der CPU als auch der PPU 500 zugreifbar ist (d.h. Lese/Schreibe). Die CPU schreibt den Befehls-Strom auf den Puffer und übermittelt dann einen Zeiger auf den Start des Befehls-Stroms an die PPU 500. Die Host-Schnittstelle-Einheit 510 stellt der Gitter-Management-Einheit (GMU) 515 Zeiger auf einen oder mehrere Ströme bereit. Die GMU 515 wählt einen oder mehrere Ströme aus und ist konfiguriert, die ausgewählten Ströme als einen Pool von anhängigen Gittern zu organisieren. Der Pool von anhängigen Gittern kann neue Gitter umfassen, welche noch nicht zur Ausführung ausgewählt worden sind und Gitter, welche teilweise ausgeführt worden sind und angehalten worden sind.
  • Eine Arbeit-Verteilungs-Einheit 520, welche zwischen der GMU 515 und den SMs 550 gekoppelt ist, handhabt einen Pool von aktiven Gittern, Auswählen und Absetzen von aktiven Gittern zur Ausführung mittels der SMs 550. Anhängige Gitter sind an den aktiven Gitter-Pool mittels der GMU 515 transferiert, wenn ein anhängiges Gitter berechtigt ist, auszuführen, d.h. keine unaufgelösten Daten-Abhängigkeiten hat. Ein aktives Gitter wird auf den anhängigen Pool transferiert, wenn Ausführung des aktiven Gitters mittels einer Abhängigkeit blockiert ist. Wenn Ausführung eines Gitters vollendet ist, wird das Gitter von dem aktiven Gitter-Pool mittels der Arbeits-Verteilungs-Einheit 520 entfernt. Zusätzlich zum Empfangen von Gittern von der Host-Schnittstelle-Einheit 510 und der Arbeits-Verteilungs-Einheit 520 empfängt die GMU 510 auch Gitter, welche dynamisch mittels der SMs 550 während Ausführung eines Gitters erzeugt sind. Diese dynamisch erzeugten Gitter verbinden sich mit den anderen anhängigen Gitter in dem anhängigen Gitter-Pool.
  • In einer Ausführungsform führt die CPU einen Treiber-Kernel aus, welcher eine Anwendungs-Programmier-Schnittstelle (API) implementiert, welche einer oder mehr Anwendungen, welche auf der CPU ausführen, erlaubt, Operationen zur Ausführung auf der PPU 500 zu planen (schedule). Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) umfassen, welche den Treiber-Kernel veranlassen, ein oder mehr Gitter zur Ausführung zu erzeugen. In einer Ausführungsform implementiert die PPU 500 eine SIMD (Einzel-Anweisung, Mehr-Daten)-Architektur, wobei jeder Thread-Block (d.h. Warp) in einem Gitter gleichzeitig auf einem verschiedenen Daten-Satz mittels verschiedener Threads in dem Thread-Block ausgeführt wird. Der Treiber-Kernel definiert Thread-Blocks, welche k bezogene Threads aufweisen, so dass Threads in demselben Thread-Block Daten durch gemeinsam benutzten Speicher austauschen können. In einer Ausführungsform weist ein Thread-Block 32 bezogene Threads auf und ein Gitter ist ein Feld von einem oder mehr Thread-Blocks, welche denselben Strom ausführen und die verschiedenen Thread-Blöcke können Daten durch einen globalen Speicher austauschen.
  • In einer Ausführungsform weist die PPU 500 X SMs 550(X) auf. Zum Beispiel kann die PPU 100 15 distinkte SMs 550 aufweisen. Jeder SM 550 ist Mehrprozess-gestützt (multi-threaded) und konfiguriert, eine Mehrzahl von Threads (z.B. 32 Threads) von einem bestimmten Thread-Block simultan auszuführen. Jeder der SMs 550 ist mit einem Level-zwei-(L2)-Zwischenspeicher 565 über eine Kreuzschiene 560 (oder einen anderen Typ von Zwischenverbindung-Netzwerk) verbunden.
  • Der L2-Zwischenspeicher 565 ist mit einer oder mit mehr Speicher-Schnittstellen 580 verbunden. Speicher-Schnittstellen 580 implementieren 16-, 32-, 64-, 128-Bit-Daten-Busse, oder dergleichen, für einen Hochgeschwindigkeits-Datentransfer. In einer Ausführungsform weist die PPU 500 U Speicher-Schnittstellen 580(U) auf, wobei jede Speicher-Schnittstelle 580(U) mit einem entsprechenden Speicher-Gerät 504(U) verbunden ist. Zum Beispiel kann PPU 500 mit bis zu sechs Speicher-Geräten 504 verbunden sein, wie etwa Grafik-Doppel-Datenrate, Version 5, synchron-dynamisch-willkürlicher-Zugriff-Speicher (synchronous dynamic random access memory) (GDDR5, SDRAM).
  • In einer Ausführungsform implementiert die PPU 500 eine Mehr-Level-Speicher-Hierarchie. Der Speicher 504 ist außerhalb des Chips (off-chip) in SDRAM lokalisiert, gekoppelt mit der PPU 500. Daten von dem Speicher 504 können in dem L2-Zwischenspeicher 565 geholt und gespeichert werden, welcher Auf-Chip lokalisiert ist und zwischen den verschiedenen SMs 550 gemeinsam benutzt ist. In einer Ausführungsform implementiert jeder der SMs 550 auch einen L1-Zwischenspeicher. Der L1-Zwischenspeicher ist privater Speicher, welcher für einen bestimmten SM 550 dediziert ist. Jeder der L1-Zwischenspeicher ist mit dem gemeinsam benutzten L2-Zwischenspeicher 565 gekoppelt. Daten von dem L2-Zwischenspeicher 565 können in jedem der L1-Zwischenspeicher geholt und gespeichert werden zum Verarbeiten in den funktionellen Einheiten der SMs 550.
  • In einer Ausführungsform weist die PPU 500 eine Grafik-Verarbeitungs-Einheit (GPU) auf. Die PPU 500 ist konfiguriert, Befehle zu empfangen, welche Schattierungs-Programme zum Verarbeiten von Grafik-Daten spezifizieren. Grafik-Daten können als ein Satz von Primitiven, wie etwa Punkte, Linien, Dreiecke, Quader, Dreiecks-Streifen, und dergleichen definiert sein. Typischerweise umfasst eine Primitive Daten, welche eine Anzahl von Vertizes für die Primitive spezifizieren (z.B. ein Modell-Raum-Koordinaten-System) sowie Attribute, welche mit jedem Vertex der Primitive assoziiert sind. Die PPU 500 kann konfiguriert sein, die Grafik-Primitiven zu verarbeiten, um einen Frame-Puffer zu erzeugen (d.h. Pixel-Daten für jedes der Pixel der Anzeige). Der Treiber-Kernel implementiert eine Grafik-Verarbeitungs-Pipeline, wie etwa die Grafik-Verarbeitungs-Pipeline, welche durch OpenGL API definiert ist.
  • Eine Anwendung schreibt Modell-Daten für eine Szene (d.h. eine Sammlung von Vertizes und Attributen) an Speicher. Die Modell-Daten definieren jedes der Objekte, welche auf einer Anzeige sichtbar sein kann. Die Anwendung macht dann einen API-Aufruf an den Treiber-Kernel, welcher die Modell-Daten anfragt, welche zu rendern und anzuzeigen sind. Der Treiber-Kernel liest die Modell-Daten und schreibt Befehle an den Puffer, um ein oder mehr Operationen durchzuführen, um die Modell-Daten zu verarbeiten. Die Befehle können verschiedene Schattierungs-Programme einschließlich eines oder mehrerer von einem Vertex-Schattierer, Punkt- (hull)-Schattierer, Geometrie-Schattierer, Pixel-Schattierer, etc. kodieren.
  • Die GMU 515 kann einen oder mehrere SMs 550 konfigurieren, um die Funktionen von einer oder mehreren der Verarbeitungs-Einheiten durchzuführen, welche in 4A gezeigt sind, z.B. eine Vertex-Verarbeitungs-Einheit, eine Tessellations-Verarbeitungs-Einheit, eine Geometrie-Verarbeitungs-Einheit, eine Fragment-Verarbeitungs-Einheit. Die Funktionen von Darstellungs-Feld-Skalierung-, Aussonderung-, und Abschneide-Verarbeitungs-Einheit, grobem Rasterer, feinem Rasterer und Raster-Operationen-Einheit können auch mittels anderer Verarbeitungs-Maschinen innerhalb einer GMU 515 durchgeführt werden.
  • Zum Beispiel kann die GMU 515 einen oder mehrere SMs 550 konfigurieren, um ein Vertex-Schattierungs-Programm auszuführen, welches eine Anzahl von Vertizes verarbeitet, welche mittels der Modell-Daten definiert sind. In einer Ausführungsform kann die GMU 515 verschiedene SMs 550 konfigurieren, verschiedene Schattierungs-Programme gleichzeitig auszuführen. Zum Beispiel kann eine erste Untermenge von SMs 550 konfiguriert sein, ein Vertex-Schattierungs-Programm auszuführen, während eine zweite Untermenge von SMs 550 konfiguriert sein kann, ein Pixel-Schattierungs-Programm auszuführen. Die erste Untermenge von SMs 550 verarbeitet Vertex-Daten, um verarbeitete Vertex-Daten zu erzeugen, und schreibt die verarbeiteten Vertex-Daten an den L2-Zwischenspeicher 565 und/oder den Speicher 504. Nachdem die prozessierten Vertex-Daten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Schirmraum transformiert sind), um Fragment-Daten zu erzeugen, führt die zweite Untermenge von SMs 550 einen Pixel-Schattierer aus, um verarbeitete Fragment-Daten zu erzeugen, welche dann mit anderen verarbeiteten Fragment-Daten gemischt (blended) werden und auf den Frame-Puffer in Speicher 504 geschrieben werden. Das Vertex-Schattierungs-Programm und das Pixel-Schattierungs-Programm können gleichzeitig ausführen, können verschiedene Daten von derselben Szene in einer Pipeline-Weise prozessieren, bis alle der Modell-Daten für die Szene an den Frame-Puffer gerendert worden sind. Dann werden die Inhalte des Frame-Puffers zu einer Anzeige-Steuerung zur Anzeige auf einem Anzeige-Gerät übermittelt.
  • Die PPU 500 kann in einem Schreibtisch-Computer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z.B. ein drahtloses, handgehaltenes Gerät), persönlicher digitaler Assistent (PDA), eine Digitalkamera, einem handgehaltenen elektronischen Gerät und dergleichen umfasst sein. In einer Ausführungsform ist die PPU 500 auf einem einzelnen Halbleiter-Substrat verkörpert. In einer anderen Ausführungsform ist die PPU 500 in einem System-auf-einem-Chip (SoC) zusammen mit einer oder mehr anderen Logik-Einheiten umfasst, wie etwa eine Reduced-Instruction-Set-Computer (RISC)-CPU, eine Speicher-Management-Einheit (MMU), ein Digital-zu-Analog-Konverter (DAC), und dergleichen.
  • In einer Ausführungsform kann die PPU 500 auf einer Grafik-Karte umfasst sein, welche ein oder mehr Speicher-Geräte 504 umfasst, wie etwa GDDR5 SDRAM. Die Grafik-Karte kann konfiguriert sein, mit einem PCIe-Fach auf einer Mutter-Platine eines Schreibtisch-Computers eine Schnittstelle zu bilden, welcher z.B. einen Northbridge-Chipsatz und einen Southbridge-Chipsatz umfasst. In noch einer anderen Ausführungsform kann die PPU 500 eine integrierte-Grafik-Verarbeitungs-Einheit (iGPU) sein, welche in dem Chipsatz (d.h. Northbridge) der Mutter-Platine umfasst ist.
  • 6 illustriert einen Streaming-Mehr-Prozessor 550 von 5 gemäß einer Ausführungsform. Wie in 6 gezeigt ist, umfasst der SM 550 einen Anweisungs-Zwischenspeicher 605, eine oder mehr Planer-Einheiten 610, eine Register-Datei 620, ein oder mehr Verarbeitungs-Kerne 650, eine oder mehr Doppel-Präzisions-Einheiten (DPUs) 651, eine oder mehr Spezial-FunktionsEinheiten (SFUs) 652, eine oder mehr Lade/Speicher-Einheiten (LSUs) 653, ein Zwischenverbindungs-Netzwerk 680, einen gemeinsam benutzten Speicher/L1-Zwischenspeicher 670, und eine oder mehr Textur-Einheiten 690.
  • Wie oben beschrieben ist, setzt die Arbeits-Verteilungs-Einheit 520 aktive Gitter zur Ausführung auf einer oder mehr SMs 550 der PPU 500 ab (dispatches). Die Planer-Einheit 610 empfängt die Gitter von der Arbeit-Verteilungs-Einheit 520 und managed ein Anweisungs-Planen für einen oder mehr Thread-Blocks jedes aktiven Gitters. Die Planer-Einheit 610 plant Threads zur Ausführung in Gruppen von parallelen Threads, wobei jede Gruppe ein Warp genannt ist. In einer Ausführungsform umfasst jeder Warp 32 Threads. Die Planer-Einheit 610 kann eine Mehrzahl von verschiedenen Thread-Blocks managen, Allokieren der Thread-Blocks an Warps zur Ausführung und dann Planen von Anweisungen von der Mehrzahl von verschiedenen Warps auf den verschiedenen funktionalen Einheiten (d.h. Kerne 650, DPUs 651, SFUs 652, und LSUs 653) während jedes Takt-Zyklus.
  • In einer Ausführungsform umfasst jede Planer-Einheit 610 eine oder mehr Anweisungs-Absetz-Einheiten 615. Jede Absetz-Einheit 615 ist konfiguriert, Anweisungen an eine oder mehr der funktionalen Einheiten zu übermitteln. In der in 6 gezeigten Ausführungsform umfasst die Planer-Einheit 610 zwei Absetz-Einheiten 615, welche ermöglichen, dass zwei verschiedene Anweisungen von demselben Warp während jedes Takt-Zyklus abgesetzt werden. In alternativen Ausführungsformen kann jede Planer-Einheit 610 eine einzelne Absetz-Einheit 615 oder zusätzliche Absetz-Einheiten 615 umfassen.
  • Jeder SM 650 umfasst eine Register-Datei 620, welche einen Satz von Registern für die funktionalen Einheiten des SM 650 bereitstellt. In einer Ausführungsform ist die Register-Datei 620 zwischen jeder der funktionalen Einheiten derartig geteilt, dass jeder funktionalen Einheit ein dedizierter Teil der Register-Datei 620 allokiert ist. In einer anderen Ausführungsform ist die Register-Datei 620 zwischen den verschiedenen Warps, welche mittels des SM 550 ausgeführt sind, geteilt. Die Register-Datei 620 stellt temporären Speicher für Operanden bereit, welche mit den Daten-Pfaden der funktionalen Einheiten verbunden sind.
  • Jeder SM 550 weist L Verarbeitungs-Kerne 650 auf. In einer Ausführungsform umfasst der SM 550 eine große Zahl (z.B. 192, etc.) von distinkten Verarbeitungs-Kernen 650. Jeder Kern 650 ist eine vollständig in einer Pipeline angeordnete (fully-pipelined), Einfach-Präzisions-Verarbeitungs-Einheit, welche eine Fließpunkt-Arithmetik-Logik-Einheit und eine Ganzzahl-Arithmetik-Logik-Einheit umfasst. In einer Ausführungsform implementiert die Fließpunkt-Arithmetik-Logik-Einheit den IEEE 754-2008-Standard für Fließpunkt-Arithmetik. Jeder SM 550 weist auch M DPUs 651 auf, welche Doppel-Präzisions-Fließpunkt-Arithmetik implementieren, N SFUs 652, welche spezielle Funktionen durchführen (z.B. Kopiere Rechteck, Pixel-Misch-Operationen, und dergleichen) und P LSUs 653, welche Lade- und Speicher-Operationen zwischen dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 und der Register-Datei 620 implementieren. In einer Ausführungsform umfasst der SM 550 64 DPUs 651, 32 SFUs 652, und 32 LSUs 653.
  • Jeder SM 550 umfasst ein Zwischenverbindungs-Netzwerk 680, welches jede der funktionalen Einheiten mit der Register-Datei 620 und dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 680 eine Kreuzschiene, welche konfiguriert sein kann, um irgendeine der funktionalen Einheiten mit irgendeinem der Register in der Register-Datei 620 oder den Speicher-Stellen in dem gemeinsam benutzten Speicher/L1-Zwischenspeicher 670 zu verbinden.
  • In einer Ausführungsform ist der SM 550 innerhalb einer GPU implementiert. In solch einer Ausführungsform weist der SM 550 J Textur-Einheiten 690 auf. Die Textur-Einheiten 690 sind konfiguriert, Textur-Karten (d.h. ein 2D-Feld von Texels) von dem Speicher 504 zu laden und die Textur-Karten abzutasten, um abgetastete Textur-Werte zur Benutzung in Schattierungs-Programmen zu erzeugen. Die Textur-Einheiten 690 implementieren Textur-Operationen, wie etwa Anti-Aliasing-Operationen unter Benutzung von Mip-Maps (d.h. Textur-Karten von variierendem Detail-Level). In einer Ausführungsform umfasst der SM 550 16 Textur-Einheiten 690.
  • Die PPU 500, welche oben beschrieben ist, kann konfiguriert sein, hochparallele Berechnungen viel schneller als konventionelle CPUs durchzuführen. Parallel-Berechnung hat Vorteile in Grafik-Verarbeitung, Daten-Kompression, Biometrik, Stream-Verarbeitungs-Algorithmen und dergleichen.
  • 7 illustriert ein exemplarisches System 700, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert sein kann. Wie gezeigt ist, ist ein System 700 bereitgestellt, welches zumindest einen Zentral-Prozessor 701 umfasst, welcher mit einem Kommunikations-Bus 702 verbunden ist. Der Kommunikations-Bus 702 kann unter Benutzung irgendeines geeigneten Protokolls implementiert werden, wie etwa PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), Hyper-Transport, oder irgendein anderes Bus- oder Punkt-zu-Punkt-Kommunikation-Protokoll(e). Das System 700 umfasst auch einen Hauptspeicher 704. Steuer-Logik (Software) und Daten sind in dem Hauptspeicher 704 gespeichert, welcher die Form eines Speichers mit willkürlichem Zugriff (RAM) annehmen kann.
  • Das System 700 umfasst auch Eingabe-Geräte 712, einen Grafik-Prozessor 706 und eine Anzeige 708, d.h. einen konventionellen CRT (KathodenStrahl-Röhre), LCD (Flüssigkristall-Anzeige), LED (Licht emittierende Diode), Plasma-Anzeige oder dergleichen. Benutzer-Eingabe kann von den Eingabe-Geräten 712 empfangen werden, z.B. Tastatur, Maus, Berührfeld, Mikrofon, und dergleichen. In einer Ausführungsform kann der Grafik-Prozessor 706 eine Mehrzahl von Schattierungs-Modulen, ein Raster-Modul, etc. umfassen. Jedes der vorangehenden Module kann sogar auf einer einzelnen Halbleiter-Plattform situiert sein, um eine Grafik-Verarbeitungs-Einheit (GPU) zu bilden.
  • In der vorliegenden Beschreibung bezieht sich eine einzelne Halbleiter-Plattform auf eine einzelne unitäre Halbleiter-basierte integrierte Schaltung oder Chip. Es sollte bemerkt sein, dass der Ausdruck einzelne Halbleiter-Plattform sich auch auf Mehr-Chip-Module mit einer erhöhten Konnektivität beziehen kann, welche Auf-Chip-Operation simulieren, und welche wesentliche Verbesserungen über ein Benutzen einer konventionellen Zentral-Verarbeitungs-Einheit (CPU) und Bus-Implementierung machen. Natürlich können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiter-Plattformen nach den Wünschen des Benutzers situiert sein.
  • Das System 700 kann auch einen sekundären Speicher 710 umfassen. Der sekundäre Speicher 710 umfasst z.B. ein Festplatte-Laufwerk und/oder ein entfernbares Speicher-Laufwerk, welches ein Floppydisk-Laufwerk repräsentiert, ein Magnetband-Laufwerk, ein Kompaktdisk-Laufwerk, digitale versatile Disk-(DVD)-Laufwerk, Aufzeichnungs-Laufwerk, Universal-Serial-Bus-(USB)-Flash-Speicher. Das entfernbare Speicher-Laufwerk liest von und/oder schreibt auf eine entfernbare Speicher-Einheit in einer wohl bekannten Weise.
  • Computer-Programme oder Computer-Steuerlogik-Algorithmen können in dem Hauptspeicher 704 und/oder dem sekundären Speicher 710 gespeichert sein. Solche Computer-Programme, wenn ausgeführt, befähigen das System 700, verschiedene Funktionen durchzuführen. Zum Beispiel kann ein Compiler-Programm, welches konfiguriert ist ein Schattierungs-Programm zu untersuchen und Attribut-Puffer-Kombinieren zu aktivieren oder zu deaktivieren in dem Hauptspeicher 704 gespeichert sein. Das Compiler-Programm kann mittels des Zentral-Prozessors 701 oder des Grafik-Prozessors 706 ausgeführt sein. Der Hauptspeicher 704, Speicherung 710 und/oder irgendein anderer Speicher sind mögliche Beispiele von Computer-lesbaren Medien.
  • In einer Ausführungsform kann die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren in dem Kontext des Zentral-Prozessors 701, Grafik-Prozessors 706, und integrierte Schaltung (nicht gezeigt) implementiert sein, welche befähigt ist von zumindest einem Teil der Fähigkeiten von sowohl dem Zentral-Prozessor 701 als auch dem Grafik-Prozessor 706, ein Chip-Satz (d.h. eine Gruppe von integrierte Schaltungen, welche ausgelegt sind, als eine Einheit zum Durchführen betreffender Funktionen zu arbeiten und verkauft zu werden, etc.), und/oder irgendeine andere integrierte Schaltung für diesen Zweck.
  • Noch weiter kann die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren in dem Zusammenhang eines Allgemein-Computer-Systems, eines Schaltungsplatte-Systems, eine Spielkonsole-Systems, welches für Unterhaltungs-Zwecke dediziert ist, eines Anwendungs-spezifischen Systems, und/oder irgendeines anderen gewünschten Systems implementiert sein. Zum Beispiel kann das System 700 die Form eines Schreibtisch-Computers, Laptop-Computers, Servers, Arbeitsstation, Spielkonsole, eingebettetes System und/oder irgendeinen anderen Typ von Logik annehmen. Noch weiter kann das System 600 die Form von verschiedenen anderen Geräten annehmen, einschließlich, aber nicht darauf beschränkt, ein persönlicher-digitaler-Assistenten-(PDA)-Gerät, ein mobiles Telefongerät, ein Fernseher, etc.
  • Ferner kann, während es nicht gezeigt ist, das System 700 mit einem Netzwerk (z.B. ein Telekommunikations-Netzwerk, Lokalbereichs-Netzwerk (LAN), drahtloses Netzwerk, Fernbereichs-Netzwerk (WAN) wie etwa das Internet, Peer-to-Peer-Netzwerk, Kabel-Netzwerk, oder dergleichen) für Kommunikations-Prozesse gekoppelt sein.

Claims (16)

  1. Verfahren zum Rastern einer Primitiven, aufweisend: Bestimmen einer Kante-Gleichung für jede Kante einer Primitiven, wobei die Kante-Gleichung Koeffizienten hat, welche die Kante der Primitive definieren; Verschieben jeder Kante der Primitive, um die Primitive zu vergrößern, indem Koeffizienten der Kante-Gleichung, welche die Kante definieren, um einen Fehler-Term modifiziert werden, welcher ein vorbestimmter Betrag ist; und Bestimmen von Pixeln, welche die Primitive schneiden, unter Benutzung der vergrößerten Primitive, wobei die Koeffizienten jeder Kante-Gleichung von Vertizes der Primitive berechnet sind, welche auf eine fixe Zahl von Anteils-Bits eingeschnappt worden sind, und wobei der vorbestimmte Betrag eine Funktion eines Abstands ist, um welchen die Kante der Primitiven eingeschnappt worden ist, wobei die Kante Kraft dessen eingeschnappt ist, dass die Kante mittels der eingeschnappten Vertizes definiert ist.
  2. Verfahren gemäß Anspruch 1, ferner aufweisend: zusätzliches Verschieben jeder Kante der Primitive, um die Primitive weiter zu vergrößern, indem Koeffizienten der Kante-Gleichung, welche die Kante definieren, um einen zweiten vorbestimmten Betrag modifiziert werden.
  3. Verfahren gemäß Anspruch 2, wobei die Pixel, welche die Primitive schneiden, unter Benutzung der vergrößerten Primitive bestimmt sind.
  4. Verfahren gemäß Anspruch 2, wobei Modifizieren von Koeffizienten der Kante-Gleichung, welche die Kante definieren, um den zweiten vorbestimmten Betrag ein Modifizieren jedes Koeffizienten um denselben zweiten vorbestimmten Betrag umfasst.
  5. Verfahren gemäß Anspruch 2, wobei der zweite vorbestimmte Betrag, um welchen die Koeffizienten modifiziert werden, ein vorbestimmter Anteil einer Größe eines Pixels ist.
  6. Verfahren gemäß Anspruch 5, wobei der zweite vorbestimmte Betrag, um welchen die Koeffizienten modifiziert werden, eine Hälfte der Größe des Pixels ist.
  7. Verfahren gemäß Anspruch 2, wobei der vorbestimmte Betrag kleiner als der zweite vorbestimmte Betrag ist.
  8. Verfahren gemäß Anspruch 1, wobei Modifizieren von Koeffizienten der Kante-Gleichung, welche die Kante definiert, um den Fehler-Term, welcher der vorbestimmte Betrag ist, ein Modifizieren jedes um denselben Fehler-Term umfasst .
  9. Verfahren gemäß Anspruch 1, wobei der vorbestimmte Betrag eine Hälfte des Abstandes ist, um welchen jede Kante der Primitive eingeschnappt worden ist.
  10. Verfahren gemäß Anspruch 1, wobei, wenn der vorbestimmte Betrag eine Potenz von 2 ist, dann ein Modifizieren von Koeffizienten der Kante-Gleichung um den Fehler-Term ein Verschieben von Koeffizienten der Kante-Gleichung basierend auf dem vorbestimmten Betrag umfasst.
  11. Verfahren gemäß Anspruch 1, ferner aufweisend: Bestimmen einer Begrenzungs-Box für die Kanten der Primitive.
  12. Verfahren gemäß Anspruch 11, ferner aufweisend: Verschieben jeder Kante der Begrenzungs-Box, um die Begrenzungs-Box zu vergrößern.
  13. Verfahren gemäß Anspruch 12, wobei jede Kante der Begrenzungs-Box verschoben ist mittels: Modifizierens jeder Kante der Begrenzungs-Box um den Fehler-Term, welcher der vorbestimmte Betrag ist.
  14. Verfahren gemäß Anspruch 12, wobei die Pixel, welche die Primitive schneiden, ferner unter Benutzung der vergrößerten Begrenzungs-Box bestimmt sind.
  15. Nicht-transitorisches Computer-lesbares Speichermedium, welches Anweisungen speichert, welche, wenn mittels eines Prozessors ausgeführt, ein Verfahren nach einem der Ansprüche 1 bis 14 durchführen, um eine Primitive zu rastern.
  16. System, aufweisend: einen Prozessor, welcher zur Ausführung der Aktionen nach einem der Ansprüche 1 bis 14 konfiguriert ist.
DE102013114090.4A 2013-03-15 2013-12-16 Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms Active DE102013114090B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/844,093 2013-03-15
US13/844,093 US9633469B2 (en) 2013-03-15 2013-03-15 Conservative rasterization of primitives using an error term

Publications (2)

Publication Number Publication Date
DE102013114090A1 DE102013114090A1 (de) 2014-09-18
DE102013114090B4 true DE102013114090B4 (de) 2022-05-05

Family

ID=51418667

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013114090.4A Active DE102013114090B4 (de) 2013-03-15 2013-12-16 Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms

Country Status (4)

Country Link
US (1) US9633469B2 (de)
CN (1) CN104050626B (de)
DE (1) DE102013114090B4 (de)
TW (1) TWI552109B (de)

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218679B2 (en) * 2012-10-08 2015-12-22 Intel Corporation Reduced bitcount polygon rasterization
US9478066B2 (en) 2013-03-14 2016-10-25 Nvidia Corporation Consistent vertex snapping for variable resolution rendering
GB2524121B (en) 2014-06-17 2016-03-02 Imagination Tech Ltd Assigning primitives to tiles in a graphics processing system
GB2532495B (en) * 2014-11-21 2018-05-02 Advanced Risc Mach Ltd Graphics processing systems
GB2540983B (en) * 2015-08-03 2017-11-29 Advanced Risc Mach Ltd Graphics processing
US20170132833A1 (en) * 2015-11-10 2017-05-11 Intel Corporation Programmable per pixel sample placement using conservative rasterization
US10089788B2 (en) * 2016-05-25 2018-10-02 Google Llc Light-field viewpoint and pixel culling for a head mounted display device
US10019836B2 (en) * 2016-05-27 2018-07-10 Intel Corporation Planar depth representations for block compression
US10572966B2 (en) 2017-04-01 2020-02-25 Intel Corporation Write out stage generated bounding volumes
US10424097B2 (en) 2017-04-01 2019-09-24 Intel Corporation Predictive viewport renderer and foveated color compressor
US10628907B2 (en) 2017-04-01 2020-04-21 Intel Corporation Multi-resolution smoothing
US10157493B2 (en) 2017-04-01 2018-12-18 Intel Corporation Adaptive multisampling based on vertex attributes
US10591971B2 (en) 2017-04-01 2020-03-17 Intel Corporation Adaptive multi-resolution for graphics
US10089230B1 (en) 2017-04-01 2018-10-02 Intel Corporation Resource-specific flushes and invalidations of cache and memory fabric structures
US10242494B2 (en) 2017-04-01 2019-03-26 Intel Corporation Conditional shader for graphics
US10489915B2 (en) 2017-04-01 2019-11-26 Intel Corporation Decouple multi-layer render fequency
US10572258B2 (en) 2017-04-01 2020-02-25 Intel Corporation Transitionary pre-emption for virtual reality related contexts
US10706612B2 (en) 2017-04-01 2020-07-07 Intel Corporation Tile-based immediate mode rendering with early hierarchical-z
US10453241B2 (en) 2017-04-01 2019-10-22 Intel Corporation Multi-resolution image plane rendering within an improved graphics processor microarchitecture
US10223773B2 (en) 2017-04-01 2019-03-05 Intel Corporation On demand MSAA resolve during lens correction and/or other post-processing phases
US10152822B2 (en) 2017-04-01 2018-12-11 Intel Corporation Motion biased foveated renderer
US10395623B2 (en) 2017-04-01 2019-08-27 Intel Corporation Handling surface level coherency without reliance on fencing
US10235735B2 (en) 2017-04-10 2019-03-19 Intel Corporation Graphics processor with tiled compute kernels
US10460415B2 (en) 2017-04-10 2019-10-29 Intel Corporation Contextual configuration adjuster for graphics
US10319064B2 (en) 2017-04-10 2019-06-11 Intel Corporation Graphics anti-aliasing resolve with stencil mask
US10497340B2 (en) 2017-04-10 2019-12-03 Intel Corporation Beam scanning image processing within an improved graphics processor microarchitecture
US10373365B2 (en) 2017-04-10 2019-08-06 Intel Corporation Topology shader technology
US10235794B2 (en) 2017-04-10 2019-03-19 Intel Corporation Multi-sample stereo renderer
US11106274B2 (en) 2017-04-10 2021-08-31 Intel Corporation Adjusting graphics rendering based on facial expression
US10204394B2 (en) 2017-04-10 2019-02-12 Intel Corporation Multi-frame renderer
US11030713B2 (en) 2017-04-10 2021-06-08 Intel Corporation Extended local memory including compressed on-chip vertex data
US10204393B2 (en) 2017-04-10 2019-02-12 Intel Corporation Pre-pass surface analysis to achieve adaptive anti-aliasing modes
US10109078B1 (en) 2017-04-10 2018-10-23 Intel Corporation Controlling coarse pixel size from a stencil buffer
US10152632B2 (en) 2017-04-10 2018-12-11 Intel Corporation Dynamic brightness and resolution control in virtual environments
US10725929B2 (en) 2017-04-10 2020-07-28 Intel Corporation Graphics memory extended with nonvolatile memory
GB2561557B (en) * 2017-04-13 2020-08-12 Advanced Risc Mach Ltd Graphics processing method and apparatus in which modified edge positions are used in rasterisation
US10430147B2 (en) 2017-04-17 2019-10-01 Intel Corporation Collaborative multi-user virtual reality
US10719902B2 (en) 2017-04-17 2020-07-21 Intel Corporation Thread serialization, distributed parallel programming, and runtime extensions of parallel computing platform
US10846918B2 (en) 2017-04-17 2020-11-24 Intel Corporation Stereoscopic rendering with compression
US10896657B2 (en) 2017-04-17 2021-01-19 Intel Corporation Graphics with adaptive temporal adjustments
US10401954B2 (en) 2017-04-17 2019-09-03 Intel Corporation Sensory enhanced augmented reality and virtual reality device
US10290141B2 (en) 2017-04-17 2019-05-14 Intel Corporation Cloud based distributed single game calculation of shared computational work for multiple cloud gaming client devices
US10521876B2 (en) 2017-04-17 2019-12-31 Intel Corporation Deferred geometry rasterization technology
US10452552B2 (en) 2017-04-17 2019-10-22 Intel Corporation Memory-based dependency tracking and cache pre-fetch hardware for multi-resolution shading
US10467796B2 (en) 2017-04-17 2019-11-05 Intel Corporation Graphics system with additional context
US10672175B2 (en) 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics
US10347039B2 (en) 2017-04-17 2019-07-09 Intel Corporation Physically based shading via fixed-functionality shader libraries
US10192351B2 (en) 2017-04-17 2019-01-29 Intel Corporation Anti-aliasing adaptive shader with pixel tile coverage raster rule system, apparatus and method
US10242486B2 (en) 2017-04-17 2019-03-26 Intel Corporation Augmented reality and virtual reality feedback enhancement system, apparatus and method
US10643374B2 (en) 2017-04-24 2020-05-05 Intel Corporation Positional only shading pipeline (POSH) geometry data processing with coarse Z buffer
US10728492B2 (en) 2017-04-24 2020-07-28 Intel Corporation Synergistic temporal anti-aliasing and coarse pixel shading technology
US10347357B2 (en) 2017-04-24 2019-07-09 Intel Corporation Post-packaging environment recovery of graphics on-die memory
US10109039B1 (en) 2017-04-24 2018-10-23 Intel Corporation Display engine surface blending and adaptive texel to pixel ratio sample rate system, apparatus and method
US10251011B2 (en) 2017-04-24 2019-04-02 Intel Corporation Augmented reality virtual reality ray tracing sensory enhancement system, apparatus and method
US10242496B2 (en) 2017-04-24 2019-03-26 Intel Corporation Adaptive sub-patches system, apparatus and method
US10402933B2 (en) 2017-04-24 2019-09-03 Intel Corporation Adaptive smart grid-client device computation distribution with grid guide optimization
US11113790B2 (en) 2018-04-12 2021-09-07 Nvidia Corporation Adding greater realism to a computer-generated image by smoothing jagged edges
GB2602686B (en) * 2021-06-25 2022-12-28 Imagination Tech Ltd Efficient convolution operations

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040246251A1 (en) 2003-03-27 2004-12-09 Simon Fenney Tiling system for 3D rendered graphics

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0604685A1 (de) * 1992-12-28 1994-07-06 Océ-Nederland B.V. Methode zur Modifizierung des Fettdruckens von Buchstaben
US6057855A (en) * 1997-07-02 2000-05-02 Hewlett-Packard Company Method and apparatus for providing polygon pixel sub-sample information using incremental means
US6317525B1 (en) * 1998-02-20 2001-11-13 Ati Technologies, Inc. Method and apparatus for full scene anti-aliasing
US6636215B1 (en) * 1998-07-22 2003-10-21 Nvidia Corporation Hardware-assisted z-pyramid creation for host-based occlusion culling
US20030122850A1 (en) * 2001-12-28 2003-07-03 Satyaki Koneru Method and apparatus for determining bins to be updated for polygons, including triangles
US7382368B1 (en) * 2004-06-28 2008-06-03 Nvidia Corporation Planar z representation for z compression
US8203564B2 (en) * 2007-02-16 2012-06-19 Qualcomm Incorporated Efficient 2-D and 3-D graphics processing
US9947084B2 (en) 2013-03-08 2018-04-17 Nvidia Corporation Multiresolution consistent rasterization
US9478066B2 (en) 2013-03-14 2016-10-25 Nvidia Corporation Consistent vertex snapping for variable resolution rendering

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040246251A1 (en) 2003-03-27 2004-12-09 Simon Fenney Tiling system for 3D rendered graphics

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
AKENINE-MÖLLER, T. [et al.]: Conservative and Tiled Rasterization Using a Modified Triangle Setup. Autorenskript aus dem Jahr 2005, verfügbar im Internet unter der URLhttp://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.230.3034 ; [recherchiert am 12.11.2014].
HASSELGREN, J.: Performance Improvements for the Rasterization Pipeline. Thesis, Department of Computer Science, Lund University, 2009, S. i-xii, 1-18 und 47-61.
HERTEL, S. [et al.]: A Hybrid GPU Rendering Pipeline for Alias-Free Hard Shadows. Eurographics 2009 Areas Paper, verfügbar am 14.7.2012 im Internet unter der URLhttp://web.archive.org/web/20120714064601/http://wwwcg.in.tum.de/fileadmin/user_upload/Lehrstuehle/Lehrstuhl_XV/Research/Publications/2009/eg_area09_shadows.pdf ;[recherchiert am 13.11.2014].
LAINE, S. [et al.]: High-Performance Software Rasterization on GPUs. Proceedings of the ACM SIGGRAPH Symposium on High Performance Graphics, 2011, S. 79-88.

Also Published As

Publication number Publication date
US20140267238A1 (en) 2014-09-18
DE102013114090A1 (de) 2014-09-18
CN104050626A (zh) 2014-09-17
TW201439968A (zh) 2014-10-16
CN104050626B (zh) 2018-01-05
US9633469B2 (en) 2017-04-25
TWI552109B (zh) 2016-10-01

Similar Documents

Publication Publication Date Title
DE102013114090B4 (de) Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms
US9747661B2 (en) Consistent vertex snapping for variable resolution rendering
DE102013114279B4 (de) Oberflächenverarbeitung mit Mehrfachabtastung unter Verwendung einer einzelnen Abtastung
US9355483B2 (en) Variable fragment shading with surface recasting
DE102013222685B4 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
US9754407B2 (en) System, method, and computer program product for shading using a dynamic object-space grid
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
US20160049000A1 (en) System, method, and computer program product for performing object-space shading
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
US9230363B2 (en) System, method, and computer program product for using compression with programmable sample locations
US9659399B2 (en) System, method, and computer program product for passing attribute structures between shader stages in a graphics pipeline
US20150178961A1 (en) System, method, and computer program product for angular subdivision of quadratic bezier curves
US9230362B2 (en) System, method, and computer program product for using compression with programmable sample locations
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
US9269179B2 (en) System, method, and computer program product for generating primitive specific attributes
US9905037B2 (en) System, method, and computer program product for rejecting small primitives
DE102017109472A1 (de) Stereo-mehrfach-projektion implementiert unter verwendung einer graphikverarbeitungs-pipeline
US9721381B2 (en) System, method, and computer program product for discarding pixel samples
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE102019115130A1 (de) Vorrichtung und Verfahren für konservatives morphologisches Anti-Aliasing mit Mehrfachabtastung
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE102013114286B4 (de) Oberflächenverarbeitung mit Mehrfachabtastung unter Verwendung von Abtastuntergruppen
DE102021120604A1 (de) Dynamische bildglättung basierend auf netzwerkbedingungen
DE102020113945A1 (de) Systeme und verfahren zum vermeiden doppelter verarbeitung während der erzeugung einer prozeduralen textur

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

Representative=s name: DILG HAEUSLER SCHINDELMANN PATENTANWALTSGESELL, DE

R083 Amendment of/additions to inventor(s)
R016 Response to examination communication
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final