DE102015112303A1 - Control a scan mask from a fragment shader - Google Patents

Control a scan mask from a fragment shader Download PDF

Info

Publication number
DE102015112303A1
DE102015112303A1 DE102015112303.7A DE102015112303A DE102015112303A1 DE 102015112303 A1 DE102015112303 A1 DE 102015112303A1 DE 102015112303 A DE102015112303 A DE 102015112303A DE 102015112303 A1 DE102015112303 A1 DE 102015112303A1
Authority
DE
Germany
Prior art keywords
fragment
mask
unit
coverage information
pixel
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
DE102015112303.7A
Other languages
German (de)
Inventor
Jeffrey Alan Bolz
Eric Brian Lum
Rui Manuel Bastos
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
Priority claimed from US14/810,178 external-priority patent/US9978171B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102015112303A1 publication Critical patent/DE102015112303A1/en
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/50Lighting effects
    • G06T15/80Shading

Landscapes

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

Abstract

Es sind ein Verfahren, ein System und ein Computerprogrammprodukt zur Steuerung einer Abtastmaske aus einer Fragmentschattierungseinheit offenbart. Das Verfahren beinhaltet Schritte des Erzeugens eines Fragments für jedes Pixel, das zumindest teilweise von einer Grundform abgedeckt ist, und des Ermittelns einer Abdeckungsinformation für jedes Fragment, das der Grundform entspricht. Anschließend beinhaltet das Verfahren für das Fragment die Schritte des Erzeugens einer Abtastmaske durch eine Fragmentschattierungseinheit, des Ersetzens der Abdeckungsinformation für das Fragment durch die Abtastmaske, und des Schreibens eines Ergebnisses, das von der Fragmentschattierungseinheit erzeugt ist, in einen Speicher auf der Grundlage der Abtastmaske. Das Verfahren kann in einer Parallelverarbeitungseinheit eingerichtet werden, die ausgebildet ist, zumindest teilweise eine Grafikverarbeitungs-Pipeline zu implementieren.A method, system and computer program product for controlling a scanning mask from a fragment shading unit are disclosed. The method includes steps of generating a fragment for each pixel that is at least partially covered by a basic shape and determining coverage information for each fragment that corresponds to the basic shape. Thereafter, the method for the fragment includes the steps of generating a scanning mask by a fragment shading unit, replacing the covering information for the fragment with the scanning mask, and writing a result generated by the fragment shading unit into a memory based on the scanning mask. The method may be implemented in a parallel processing unit configured to at least partially implement a graphics processing pipeline.

Description

BEANSPRUCHUNG EINER PRIORITÄTCLAIM OF PRIORITY

Diese Anmeldung beansprucht die Priorität der vorläufigen US-Anmeldung mit der Nummer 62/030,497 (Anwaltsaktenzeichen NVIDP1073+) mit dem Titel „Steuerung einer Abtastmaske aus einem Fragmentschattierungsprogramm”, die am 29. Juli 2014 eingereicht wurde, und deren gesamte Inhalt hiermit durch Bezugnahme mit eingeschlossen ist.This application claims the benefit of US Provisional Application No. 62 / 030,497 (attorney docket NVIDP1073 +) entitled "Scanning Mask Control from a Fragment Shading Program", filed Jul. 29, 2014, the entire contents of which are hereby incorporated by reference is.

GEBIET DER ERFINDUNGFIELD OF THE INVENTION

Die vorliegende Erfindung betrifft die Grafikverarbeitung und betrifft insbesondere eine Steuerung einer Abtastmaske, die während der Rastereinteilung von Grundformen erzeugt wird.The present invention relates to graphics processing, and more particularly to control of a scan mask generated during rasterization of primitives.

HINTERGRUNDBACKGROUND

Viele Anwendungen, etwa Spiele und geschäftliche Bürosoftware, sind so gestaltet, dass sie eine Grafik zur Anzeige auf Computersystemen erzeugen. Die Grafik kann eine zweidimensionale oder dreidimensionale Grafik enthalten. Die Grafik kann durch Software erzeugt werden, die in einer konventionellen zentralen Recheneinheit (CPU) ausgeführt wird. Alternativ kann die Grafik durch Hardware erzeugt werden, die in einer spezialisierten Co-Verarbeitungseinheit eingerichtet ist, etwa einer grafischen Verarbeitungseinheit (GPU), oder durch eine gewisse Kombination aus Hardware und Software, die von der CPU und/oder der GPU ausgeführt wird. Um die Programmierung derartiger Anwendungen einfacher zu gestalten, wurden spezielle grafische Anwendungsprogrammierschnittstellen (APIs), etwa DirectX und OpenGL unter anderem, geschaffen, um eine Abstraktion zwischen der Funktion der Erzeugung von Grafik und der Hardware zu schaffen, die zur Einrichtung einer derartigen Funktionsfähigkeit verwendet wird.Many applications, such as games and business office software, are designed to produce graphics for display on computer systems. The graphic may contain a two-dimensional or three-dimensional graphic. The graphics can be generated by software running in a conventional central processing unit (CPU). Alternatively, the graphics may be generated by hardware implemented in a specialized co-processing unit, such as a graphical processing unit (GPU), or by some combination of hardware and software executed by the CPU and / or the GPU. To simplify the programming of such applications, special Graphical Application Programming Interfaces (APIs), such as DirectX and OpenGL, among others, have been created to provide an abstraction between the graphics generation function and the hardware used to establish such functionality ,

Eine API kann eine abstrakte Grafikerzeugungs-Pipeline spezifizieren, die unterschiedliche Stufen bei der Erzeugung von Grafik definiert. Beispielsweise kann eine Grafikerzeugungs-Pipeline, die durch die OpenGL-API angegeben ist, eine Vertex-Schattierungsstufe, eine Geometrie-Schattierungsstufe, eine Rasterstufe und eine Fragmentschattierungsstufe umfassen. Die Grafikerzeugungs-Pipeline empfängt grafische Grundformen, die durch die Anwendung spezifiziert sind, und verarbeitet diese Grundformen in jeder der Stufen der Grafikverarbeitungs-Pipeline, um Pixeldaten für die Anzeige auf einer Anzeigeeinrichtung zu erzeugen. Die Rasterstufe beschreibt den Vorgang der Transformation einer Grundform, etwa eines Dreiecks, in eine Reihe von Fragmenten zur Verarbeitung durch eine Fragmentschattierungsstufe. Anders ausgedrückt, die Grundform, die durch mehrere Vertices bzw. Eckpunkte angegeben ist, wird mit dem Pixel (oder Sub-Abtastungen der Pixel) geschnitten, die für einen speziellen Bildschirmbereich angegeben sind, und es werden Attributwerte, die der Grundform zugeordnet sind, über die Grundform hinweg für jedes der Pixel (oder Sub-Abtastungen der Pixel) interpoliert.An API may specify an abstract graphics generation pipeline that defines different levels in the generation of graphics. For example, a graphics generation pipeline specified by the OpenGL API may include a vertex shading level, a geometry shading level, a raster level, and a fragment shading level. The graphics generation pipeline receives basic graphic shapes specified by the application and processes these primitives in each of the stages of the graphics processing pipeline to produce pixel data for display on a display device. The raster level describes the process of transforming a basic shape, such as a triangle, into a series of fragments for processing by a fragment shading level. In other words, the basic shape indicated by a plurality of vertices is intersected with the pixel (or sub-samples of the pixels) indicated for a particular screen area, and attribute values associated with the basic shape are overlapped interpolated the basic shape for each of the pixels (or sub-samples of the pixels).

Wenn Bildfehlerbehebungstechniken eingerichtet sind, kann auch eine Abdeckungsinformation, die angibt, welche Sub-Abtastungen eines Pixels von einem Grundelement abgedeckt sind, ebenfalls während der Rastereinteilung erzeugt werden. Typischerweise wird diese Abdeckungsinformation als eine Maske angegeben. Die Maske kann einem speziellen Fragment der Grundform entsprechen und jedes Element in der Maske kann einer speziellen Sub-Abtastung des Pixels entsprechen. Wenn beispielsweise ein spezielles Pixel 16 Sub-Abtastungen enthält, dann kann die Maske 16 Bits enthalten, die anzeigen, ob jede der Sub-Abtastungen in diesem Pixel von der Grundform abgedeckt ist. In gewissen Algorithmen kann es erwünscht sein, die Abdeckungsinformation, die einem gegebenen Fragment zugeordnet ist, zu ändern. Jedoch ist eine konventionelle Hardware gegebenenfalls nicht ausgebildet, die Abdeckungsinformation, die während der Rasterstufe erzeugt wird, in beliebiger Weise zu aktualisieren. Daher gibt es einen Bedarf zur Behebung dieser Probleme und/oder anderer Probleme, die mit dem Stand der Technik einhergehen.When image defect removal techniques are established, coverage information indicating which sub-samples of a pixel are covered by a primitive may also be generated during the rasterization. Typically, this coverage information is given as a mask. The mask may correspond to a particular fragment of the primitive, and each element in the mask may correspond to a particular sub-sample of the pixel. For example, if a particular pixel contains 16 sub-samples, then the mask may contain 16 bits indicating whether each of the sub-samples in that pixel is covered by the basic form. In certain algorithms, it may be desirable to change the coverage information associated with a given fragment. However, conventional hardware may not be configured to update the coverage information generated during the rasterization in any manner. Therefore, there is a need to remedy these problems and / or other problems associated with the prior art.

ÜBERBLICKOVERVIEW

Es sind ein Verfahren, ein System und ein Computerprogrammprodukt zur Steuerung einer Abtastmaske aus einer Fragmentschattierungseinheit offenbart. Das Verfahren umfasst die Schritte des Erzeugens eines Fragments für jedes Pixel, das zumindest teilweise abgedeckt ist durch eine Grundform und die Ermittlung von Abdeckungsinformation für das Fragment, das der Grundform entspricht. Anschließend umfasst das Verfahren für jedes Fragment die Schritte des Erzeugens einer Abtastmaske durch eine Fragmentschattierungseinheit, des Ersetzens der Abdeckungsinformation für das Fragment durch die Abtastmaske und des Schreibens eines Ergebnisses, das von der Fragmentschattierungseinheit erzeugt wird, in einen Speicher auf der Grundlage der Abtastmaske. Das Verfahren kann in einer Parallelverarbeitungseinheit eingerichtet werden, die ausgebildet ist, zumindest teilweise eine Grafikverarbeitungs-Pipeline einzurichten.A method, system and computer program product for controlling a scanning mask from a fragment shading unit are disclosed. The method comprises the steps of generating a fragment for each pixel which is at least partially covered by a basic form and the determination of coverage information for the fragment corresponding to the basic form. Then, for each fragment, the method includes the steps of generating a sample mask by a fragment shader unit, replacing the masking information for the fragment with the sample mask, and writing a result generated by the fragment shading unit into a memory based on the sample mask. The method may be implemented in a parallel processing unit configured to at least partially set up a graphics processing pipeline.

KURZE BESCHREIBUNG DER ZEICHNUNGENBRIEF DESCRIPTION OF THE DRAWINGS

1 zeigt ein Flussdiagramm eines Verfahrens zur Steuerung einer Abtastmaske aus einem Fragmentschattierungsprogramm gemäß einer Ausführungsform; 1 shows a flowchart of a method for controlling a sampling mask from a Fragment shading program according to an embodiment;

2 zeigt eine Parallelverarbeitungseinheit gemäß einer Ausführungsform; 2 shows a parallel processing unit according to an embodiment;

3A zeigt einen allgemeinen Verarbeitungs-Cluster der Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform; 3A shows a general processing cluster of the parallel processing unit 2 according to an embodiment;

3B zeigt eine Partitionseinheit der Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform; 3B shows a partition unit of the parallel processing unit 2 according to an embodiment;

4 zeigt einen Datenstrom-Multiprozessor aus 3A gemäß einer Ausführungsform; 4 shows a data stream multiprocessor 3A according to an embodiment;

5 zeigt ein System-auf-Chip mit der Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform; 5 shows a system-on-chip with the parallel processing unit 2 according to an embodiment;

6 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, die durch die Parallelverarbeitungseinheit aus 2 gemäß einer Ausführungsform eingerichtet ist; 6 Figure 4 is a conceptual view of a graphics processing pipeline constructed by the parallel processing unit 2 is arranged according to an embodiment;

7A zeigt eine Grundform gemäß einer Ausführungsform; 7A shows a basic form according to an embodiment;

7B zeigt die Abdeckungsinformation für eine Fragment gemäß einer Ausführungsform; 7B shows the coverage information for a fragment according to an embodiment;

8 zeigt eine Funktionsweise zur Verarbeitung einer Grundform gemäß einer Ausführungsform; und 8th shows an operation for processing a basic form according to an embodiment; and

9 zeigt ein anschauliches System, in welchem die diversen Architekturen und/oder Funktionen der diversen vorhergehenden Ausführungsformen eingerichtet werden können. 9 FIG. 10 illustrates a vivid system in which the various architectures and / or functions of the various previous embodiments may be implemented.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

Eine üblicherweise verwendete Grafik-API ist Microsoft® DirectX, die die Direct3D-API zur Erzeugung dreidimensionale Grafik und die Direct2D-API zur Erzeugung zweidimensionaler Grafik enthält. Direct3D kann ein Grafikerzeugungsziel zur Speicherung von Farbdaten für die Anzeige von durch Computer erzeugter Grafik geschaffen werden. Ein „Bilderzeugungsziel” in D3D bezeichnet einen Puffer (das heißt den zugewiesenen Bereich an Speicher), in welchem Bilddaten für eine Szene gespeichert sind. Eine Mehrfachabtastungs-Bildfehlerbehebung (MSAA) kann unter Anwendung eines Bilderzeugungsziels eingerichtet werden, das mehrere Farbabtastungen pro Pixel speichert. Die mehreren Farbabtastungen für ein Pixel werden dann zusammengeführt, um die endgültige Pixelfarbe für ein Pixel zu erzeugen. Jedoch kann die Auflösung einer MSAA (das heißt, die Anzahl an Abtastungen pro Pixel) aufgrund der Größe des in der Grafik-Hardware verfügbaren Speichers beschränkt sein.A graphics API is commonly used Microsoft ® DirectX, which includes Direct3D API for creating three-dimensional graphics and the Direct2D API to produce two-dimensional graphics. Direct3D may provide a graphics generation target for storing color data for display of computer generated graphics. An "image forming destination" in D3D denotes a buffer (that is, the allocated area of memory) in which image data for a scene is stored. Multiple Scanning Image Errors (MSAA) can be set up using an imaging target that stores multiple color scans per pixel. The multiple color scans for a pixel are then merged to produce the final pixel color for a pixel. However, the resolution of an MSAA (that is, the number of samples per pixel) may be limited due to the size of the memory available in the graphics hardware.

Microsoft® Direct3G-Version 11.1 (im Weiteren als D3G11 bezeichnet) enthält eine neue Funktion, die als zielunabhängige Rastereinteilung (TIR) bezeichnet ist. D3D11 TIR ermöglicht es, dass mehrere Rasterabtastungen während der Bilderzeugung verwendet werden, wobei lediglich eine einzige Farbabtastung in dem Bilderzeugungsziel gespeichert wird. Eine Pixel-Schattierungseinheit kann ausgebildet sein, die Abdeckungsinformation, die den mehreren Rasterabtastungen zugeordnet ist, zu verarbeiten, um den einzelnen Farbabtastwert, der in dem Bilderzeugungsziel gespeichert ist, zu erzeugen. D3D11 TIR ermöglicht es, dass eine Vektorgrafik, die unter Verwendung von Direct2D gezeichnet ist, mit GPU-Beschleunigung verarbeiten wird, anstatt dass diese vollständig von einer CPU erzeugt wird. Jedoch besteht ein Nachteil von D3D11 TIR darin, das Tiefen- und Schablonenprüfung deaktiviert werden müssen, wenn MSAA mit einem Nicht-Mehrfachabtastungs-Farbpuffer verwendet wird.Microsoft ® Direct3G version 11.1 (hereafter referred to as D3G11) contains a new feature that is called targeted independent grid spacing (TIR). D3D11 TIR allows multiple raster scans to be used during image generation, with only a single color scan being stored in the rendering target. A pixel shader unit may be configured to process the coverage information associated with the plurality of raster scans to produce the single color sample stored in the imaging destination. D3D11 TIR allows a vector graphic drawn using Direct2D to handle GPU acceleration instead of being completely generated by a CPU. However, a disadvantage of D3D11 TIR is that depth and template checking must be disabled when MSAA is used with a non-multicolor color buffer.

Obwohl die Pixel-Schattierungseinheit die Abdeckungsinformation für eine Grundform, die während der Rastereinteilung erzeugt wird, erhält, ist die Pixel-Schattierungseinheit lediglich ausgebildet, die Abdeckungsinformation so zu verarbeiten, dass sie einen einzigen Farbwert zur Ausgabe an das Bilderzeugungsziel erzeugt. Der einzelne Farbwert kann zumindest teilweise auf einer Anzahl an gesetzten Bits in der Abdeckungsinformation beruhen. Obwohl die Pixel-Schattierungseinheit die Abdeckungsinformation als Eingabe empfängt, wird die Abdeckungsinformation, die während der Rastereinteilung erzeugt wird, nicht modifiziert. Stattdessen wird die Abdeckungsinformation lediglich verwendet, um den Farbwert der einzelnen Abtastung einzustellen, der von der Pixel-Schattierungseinheit ausgegeben und in dem Bilderzeugungsziel gespeichert wird.Although the pixel shading unit obtains the coverage information for a basic shape generated during the rasterization, the pixel shading unit is merely configured to process the coverage information to produce a single color value for output to the imaging destination. The single color value may be based, at least in part, on a number of set bits in the coverage information. Although the pixel shading unit receives the coverage information as input, the coverage information generated during the rasterization is not modified. Instead, the coverage information is merely used to set the color value of the single sample output from the pixel shading unit and stored in the imaging target.

Eine weitere üblicherweise verwendete Grafik-API ist OpenGL®, die ebenfalls Funktionen zur Erzeugung dreidimensionaler und zweidimensionaler Grafik enthält. OpenGL® implementiert ebenfalls MSAA durch Erzeugung von Abdeckungsinformation während der Rasterung einer Grundform. Die Abdeckungsinformation wird einer Fragmentschattierungseinheit zugeleitet. In OpenGL® kann die Fragmentschattierungseinheit einen Wert in ein Ausgabe-Array, gl_SampleMask, zu schreiben, wodurch die Fragmentschattierungseinheit in die Lage versetzt wird, die während der Rastereinteilung erzeugte Abdeckungsinformation zu modifizieren. Wie in der OpenGL®-Spezifizierung beschrieben ist, geht die Abdeckung für das Fragment in die logische UND-Verknüpfung der Abdeckungsinformation mit dem Wert über, der in das gl_SampleMask geschrieben ist. Das Setzen eines Bits in der gl_SampleMask auf null (0) bewirkt, dass die entsprechende Abtastung zum Zwecke der MSAA als nicht abgedeckt betrachtet wird. Das Setzen eines Bits in dem gl_SampleMask auf eins (1) wird jedoch niemals bewirken, dass eine Abtastung, die von der ursprünglichen Grundform nicht bedeckt ist, zum Zwecke der MSAA als abgedeckt erachtet wird. Obwohl somit der Wert verwendet werden kann, der in das gl_SampleMask-Ausgabe-Array geschrieben wird, das durch OpenGL® spezifiziert ist, um eine Abdeckungsmaske zu modifizieren, kann der in das gl_SampleMask-Ausgabe-Array geschriebene Wert nicht verwendet werden, um die während der Rastereinteilung erzeugte Abdeckungsinformation zu überschreiben.Another commonly used graphics API is OpenGL® , which also includes functions for creating three-dimensional and two-dimensional graphics. OpenGL ® also implemented MSAA by generating coverage information during the screening of a basic form. The coverage information is supplied to a fragment shading unit. In OpenGL ® is the fragment shader can write a value into an output array, gl_SampleMask, whereby the fragment shading unit is able to modify the coverage information generated during the grid division. As described in the OpenGL® specification, the coverage for the fragment transitions to the logical AND of the coverage information with the value written to the gl_SampleMask is. Setting a bit in the gl_SampleMask to zero (0) causes the corresponding sample to be considered uncovered for MSAA purposes. However, setting a bit in the gl_SampleMask to one (1) will never cause a scan that is not covered by the original primitive to be considered covered for MSAA purposes. Thus, although the value can be used, which is written in the gl_SampleMask output array, which is specified by OpenGL ® to modify a resist mask, the value written to the gl_SampleMask output array value can not be used during overwrite the coverage information generated by the rasterization.

Weder D3D11 TIR noch die Funktion, die von dem OpenGL®-gl_SampleMask-Ausgabe-Array ermöglicht wird, ermöglicht es einer Fragmentschattierungseinheit, das Überschreiben von Abdeckungsinformation für mehrere Abtastungen eines während der Rastereinteilung erzeugten Pixels vollständig zu steuern. Insbesondere kann die Fragmentschattierungseinheit eine spezielle Abtastung, die als abgedeckt anstatt als nicht abgedeckt anzugeben ist, nicht ändern. Gewisse Algorithmen, die diese Funktion erfordern, können daher nicht unter Verwendung einer konventionellen Grafikbeschleunigungs-Hardware eingerichtet werden.Neither D3D11 TIR nor the function, which is made possible by the OpenGL ® -gl_SampleMask output array allows a fragment shader, the overwriting of coverage information for multiple scans of a pixel generated during the pitch as to completely control. In particular, the fragment shading unit may not change a particular sample that is to be reported as covered rather than uncovered. Certain algorithms that require this feature therefore can not be set up using conventional graphics acceleration hardware.

1 zeigt ein Flussdiagramm eines Verfahrens 100 zur Steuerung einer Abtastmaske aus einem Fragmentschattierungsprogramm gemäß einer Ausführungsform. Im Schritt 110 wird ein Fragment für jedes Pixel, das zumindest teilweise von einer Grundform während einer Rasterstufe einer Grafikverarbeitungs-Pipeline abgedeckt ist, erzeugt. Die Rasterstufe beschreibt einen Vorgang zur Umwandlung einer grafischen Grundform, die in einem Vektorformat (d. h. über mehrere Vertices bzw. Eckpunkte) angegeben ist, in ein Rasterformat (d. h. mehrere Pixel oder Fragmente). Die Rasterstufe erzeugt ein einzelnes Fragment für jedes von der Grundform abgedecktes Pixel. 1 shows a flowchart of a method 100 for controlling a scanning mask from a fragment shader program according to an embodiment. In step 110 For example, a fragment is generated for each pixel that is at least partially covered by a primitive shape during a rasterization step of a graphics processing pipeline. The raster level describes a process of converting a basic graphic shape specified in a vector format (ie, over several vertices or vertices) into a raster format (ie, multiple pixels or fragments). The rasterizer generates a single fragment for each pixel covered by the primitive.

Ein Prozessor, etwa eine GPU, kann zumindest einen Teil der Grafikverarbeitungs-Pipeline einrichten. In einer Ausführungsform wird die Rasterstufe der Grafikverarbeitungs-Pipeline durch eine Hardwareeinheit mit festgelegter Funktion eingerichtet, die ausgebildet ist, eine Grundform zu empfangen und ein oder mehrere Fragmente zur Verarbeitung durch eine oder mehrere weitere Stufen der Grafikverarbeitungs-Pipeline auszugeben. In einer weiteren Ausführungsform wird die Rasterstufe der Grafikverarbeitungs-Pipeline durch einen programmierbaren Datenstrom-Multiprozessor, der in einer GPU enthalten ist, eingerichtet.A processor, such as a GPU, can set up at least part of the graphics processing pipeline. In one embodiment, the rasterization stage of the graphics processing pipeline is implemented by a fixed function hardware unit configured to receive a basic form and output one or more fragments for processing by one or more further stages of the graphics processing pipeline. In another embodiment, the rasterization level of the graphics processing pipeline is established by a programmable data stream multiprocessor included in a GPU.

Eine Grundform kann als eine Ansammlung von Vertices bzw. Eckpunkten definiert sein, wobei jeder Eckpunkt eine Koordinate im dreidimensionalen Raum sowie ein oder mehrere Vertex-Attribute, etwa Farbe, eine oder mehrere Texturkoordinaten, einen Normalenvektor und dergleichen aufweist. Die Rasterstufe der Grafikverarbeitungs-Pipeline kann Daten, die eine Grundform definieren, von einer vorhergehenden Stufe der Grafikverarbeitungs-Pipeline empfangen, die in der GPU oder durch Software eingerichtet ist, die von einer CPU ausgeführt wird. Ein Fragment kann ein oder mehrere interpolierte Attribute sowie eine Abdeckungsinformation in Bezug auf mehrere Abtastungen, die mit einem speziellen Pixel verknüpft sind, enthalten. Die die Grundformen definierenden Daten und die Fragmente können in Datenstrukturen gespeichert werden.A basic shape may be defined as a collection of vertices, each vertex having a coordinate in three-dimensional space and one or more vertex attributes, such as color, one or more texture coordinates, a normal vector, and the like. The rasterization stage of the graphics processing pipeline may receive data defining a primitive form from a previous stage of the graphics processing pipeline established in the GPU or by software executed by a CPU. A fragment may include one or more interpolated attributes as well as coverage information related to multiple scans associated with a particular pixel. The data defining the basic shapes and the fragments can be stored in data structures.

Im Schritt 120 wird Abdeckungsinformation für jedes Fragment, das der Grundform entspricht, während der Rasterstufe der Grafikverarbeitungs-Pipeline ermittelt. Die Abdeckungsinformation kann eine Maske sein, die angibt, ob eine Abtastposition, die zu dem Pixel gehört, von der Grundform abgedeckt wird. Eine Abtastposition wird als abgedeckt ermittelt, wenn ein Strahl ausgehend von einer Kameraposition, der durch die Abtastposition läuft, durch eine geschlossene Oberfläche tritt, die durch die Ränder der Grundform definiert ist. Anders ausgedrückt, eine Abtastposition wird als abgedeckt bestimmt, wenn die Abtastposition, die auf einer Betrachtungsebene liegt, innerhalb einer projizierten Version der Grundform auf die Betrachtungsebene liegt.In step 120 Coverage information is determined for each fragment corresponding to the basic shape during the rasterization stage of the graphics processing pipeline. The coverage information may be a mask indicating whether a scanning position associated with the pixel is covered by the basic shape. A scan position is determined to be occluded when a beam passes from a camera position passing through the scan position through a closed surface defined by the edges of the primitive. In other words, a sampling position is determined to be covered when the sampling position lying on a viewing plane is within a projected version of the basic shape on the viewing plane.

In einer Ausführungsform kann eine Hardwareeinheit mit festgelegter Funktion eine Reihe von Logikeinheiten aufweisen, wobei jede Logikeinheit ausgebildet ist, eine Abtastposition in zweidimensionalen Koordinaten relativ zu einer Position für ein Pixel zu berechnen. Jede Logikeinheit kann dann die Koordinate für die Abtastposition mit den projizierten Eckpunkten der Grundform vergleichen, um zu ermitteln, ob diese Abtastposition abgedeckt oder nicht abgedeckt ist. Die Abdeckungsinformation für jede der Abtastungen kann in einer Maske gesammelt werden.In one embodiment, a fixed function hardware unit may comprise a series of logic units, each logic unit configured to calculate a sample position in two-dimensional coordinates relative to a position for a pixel. Each logic unit may then compare the scan position coordinate with the projected vertices of the primitive to determine if that scan position is covered or uncovered. The coverage information for each of the samples may be collected in a mask.

Im Schritt 130 wird für jedes Fragment, das der Grundform entspricht, eine Abtastmaske durch eine Fragmentschattierungseinheit während einer Fragmentschattierungsstufe der Grafikverarbeitungs-Pipeline erzeugt. Die Abtastmaske kann der Anzahl an Abtastpositionen, die mit einem Pixel verknüpft sind, entsprechen. Wenn beispielsweise die Abdeckungsinformation eine 16-Bit-Maske umfasst, die den 16 Abtastpositionen entspricht, dann kann die Abtastmaske ebenfalls eine 16-Bit-Maske umfassen, wobei jedes Bit in der Abtastmaske einer anderen Abtastposition für das Pixel entspricht.In step 130 For each fragment corresponding to the basic shape, a scanning mask is generated by a fragment shading unit during a fragment shading stage of the graphics processing pipeline. The scan mask may correspond to the number of scan positions associated with a pixel. For example, if the coverage information comprises a 16-bit mask corresponding to the 16 sample positions, then the sample mask may also comprise a 16-bit mask, with each bit in the sample mask corresponding to a different sample position for the pixel.

In einer Ausführungsform wird die Fragmentschattierungsstufe durch einen programmierbaren Datenstrom-Multiprozessor, der in einer GPU enthalten ist, eingerichtet. Der datenstromerzeugende Multiprozessor bzw. Datenstrom-Multiprozessor kann ausgebildet sein, eine Fragmentschattierungseinheit (d. h. ein Programm, das zur Verarbeitung von Fragmenten ausgebildet ist) auszuführen. Eine andere Instanz der Fragmentschattierungseinheit (d. h. ein Fragmentschattierung-Strang bzw. Thread) kann für jedes Fragment ausgeführt werden, das während der Rasterstufe der Grafikverarbeitungs-Pipeline erzeugt wird. In one embodiment, the fragment shading level is established by a programmable data stream multiprocessor included in a GPU. The data stream generating multiprocessor may be configured to execute a fragment shading unit (ie, a program adapted to process fragments). Another instance of the fragment shading unit (ie, a fragment shading thread) may be executed for each fragment that is generated during the rasterization stage of the graphics processing pipeline.

Die Fragmentschattierungseinheit kann Befehle enthalten, die von der GPU ausgeführt werden, die bewirken, dass die Abtastmaske erzeugt und in einem Speicher der GPU (beispielsweise ein Register, DRAM, usw.) gespeichert wird. Unterschiedliche Algorithmen geben vor, wie die Abtastmaske erzeugt wird. Wenn beispielsweise ein Algorithmus die Verwendung einer konservativen Rastereinteilung erfordert, können alle Bits der Abtastmaske gesetzt werden, wenn eine beliebige Abtastposition, die zu dem Fragment gehört, abgedeckt ist, wie dies während der Rasterstufe der Grafikverarbeitungs-Pipeline ermittelt wird. In einem weiteren Beispiel kann in einem Algorithmus, der zu einer Pfadbilderzeugung gehört, eine Abdeckungsinformation, die einer speziellen Abtastposition zugeordnet ist, in weitere Abtastpositionen der Abtastmaske kopiert werden. In einer Ausführungsform wird der Wert der Abtastmaske zumindest teilweise durch die Abdeckungsinformation bestimmt, die während der Rasterstufe der Grafikverarbeitungs-Pipeline erzeugt wird. In einer weiteren Ausführungsform kann der Wert der Abtastmaske vollständig unabhängig von der Abdeckungsinformation ermittelt werden. Beispielsweise kann die Abtastmaske eine beliebige Position in einem Farbpuffer mit mehreren Abtastungen repräsentieren, in den die Ausgabe der Fragmentschattierungseinheit geschrieben werden sollte.The fragment shader unit may include instructions executed by the GPU that cause the sample mask to be generated and stored in a memory of the GPU (eg, a register, DRAM, etc.). Different algorithms dictate how the sample mask is generated. For example, if an algorithm requires the use of conservative rasterization, all bits of the sample mask may be set if any sample position associated with the fragment is covered, as determined during the rasterization stage of the graphics processing pipeline. In another example, in an algorithm associated with path imaging, coverage information associated with a particular sample position may be copied to additional sample positions of the sample mask. In one embodiment, the value of the sampling mask is determined, at least in part, by the coverage information generated during the rasterization stage of the graphics processing pipeline. In another embodiment, the value of the sampling mask may be determined completely independently of the coverage information. For example, the sample mask may represent any position in a multi-sample color buffer into which the output of the fragment shading unit should be written.

Im Schritt 140 wird für jedes Fragment, das der Grundform entspricht, die Abdeckungsinformation für das Fragment, die während einer Rasterstufe der Grafikverarbeitungs-Pipeline erzeugt wird, durch die Abtastmaske ersetzt. In einer Ausführungsform kann die Abdeckungsinformation durch die Abtastmaske überschrieben werden. In einer weiteren Ausführungsform kann die Abdeckungsinformation so modifiziert werden, dass sie angibt, dass das Fragment vollständig abgedeckt ist (das heißt, alle Bits der Abdeckungsinformation sind auf 1 gesetzt), und es wird eine Bit-weise vorzunehmende UND-Operation angewendet, um die modifizierte Abdeckungsinformation mit der Abtastmaske zusammenzuführen.In step 140 For each fragment that corresponds to the basic shape, the coverage information for the fragment that is generated during a rasterization step of the graphics processing pipeline is replaced with the scan mask. In one embodiment, the coverage information may be overwritten by the scanning mask. In another embodiment, the coverage information may be modified to indicate that the fragment is completely occluded (that is, all bits of the coverage information are set to 1), and a bitwise AND operation is used to resolve the merge modified coverage information with the scan mask.

Im Schritt 150 wird für jedes Fragment, das der Grundform entspricht, ein Ergebnis, das während der Stufe der Fragmentierungsschattierung der Grafikverarbeitungs-Pipeline erzeugt wird, in einen Speicher auf der Grundlage der Abtastmaske geschrieben. In einer Ausführungsform umfasst der Speicher einen Bildblockpuffer, der einen Farbpuffer enthält. Der Farbpuffer kann auf Speicher verweisen, der zugewiesen ist, um einen oder mehrere Farbwerte pro Pixel zu speichern. Der Bildblockpuffer kann ferner einen Tiefen-Puffer und/oder einen Schablonenpuffer zur Speicherung entsprechend von Tiefen-Werten und/oder Schablonenwerten aufweisen, die jeder Abtastposition für jedes Pixel einer zu erzeugenden Oberfläche zugeordnet sind. Eine Auflösung des Farbpuffers kann die gleiche sein oder kann sich unterscheiden von einer Auflösung des Tiefen-Puffers und des Schablonenpuffers.In step 150 For example, for each fragment corresponding to the basic shape, a result generated during the fragmentation shading stage of the graphics processing pipeline is written to a memory based on the sampling mask. In one embodiment, the memory comprises a frame buffer containing a color buffer. The color buffer may refer to memory allocated to store one or more color values per pixel. The image block buffer may further comprise a depth buffer and / or a template buffer for storing according to depth values and / or template values associated with each sample position for each pixel of a surface to be generated. A resolution of the color buffer may be the same or different from a resolution of the depth buffer and the template buffer.

Es wird nun weitere anschauliche Information angegeben im Hinblick auf diverse optionale Architekturen und Eigenschaften, mit denen die vorhergehende Plattform entsprechend den Wünschen des Anwenders eingerichtet werden kann oder auch nicht. Es sollte jedoch unbedingt beachtet werden, dass die folgende Information zu anschaulichen Zwecken angegeben ist und in keiner Weise als einschränkend betrachtet werden sollte. Jegliches folgendes Merkmal kann optional mit oder ohne Ausschluss anderer Merkmale, die beschrieben sind, eingeführt werden.Further illustrative information will now be given regarding various optional architectures and features with which the previous platform may or may not be set up according to the wishes of the user. It should be noted, however, that the following information is presented for illustrative purposes and should not be construed as limiting in any way. Any following feature may optionally be introduced with or without the exclusion of other features described.

2 zeigt eine Parallelverarbeitungseinheit (PPU) 200 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 200 ein Prozessor mit mehreren Strängen bzw. Threads, der in einer oder mehreren integrierten Schaltungseinrichtungen eingerichtet ist. Die PPU 200 ist eine Bearbeitungszeit verbergende Architektur, die so gestaltet ist, dass eine große Anzahl an Strängen parallel abgearbeitet wird. Ein Strang bzw. ein Thread (d. h. ein Strang zur Ausführung) ist eine Instantiierung einer Gruppe von Befehlen, die ausgebildet sind, von der PPU 200 ausgeführt zu werden. In einer Ausführungsform ist die PPU 200 eine Graphikverarbeitungseinheit (GPU), die ausgebildet ist, eine grafische Bilderzeugungs-Pipeline zur Verarbeitung dreidimensionaler (3D) Grafikdaten einzurichten, um zweidimensionale (2D Bilddaten zur Anzeige auf einer Anzeigeeinrichtung, etwa einer Flüssigkristallanzeige-(LCD-)Einrichtung zu erzeugen. In anderen Ausführungsformen kann die PPU 200 zum Ausführen von Berechnungen für Allgemeinzwecke eingesetzt werden. Obwohl ein einzelner anschaulicher paralleler Prozessor hierin aus anschaulichen Zwecken vorgesehen ist, ist unbedingt zu beachten, dass ein derartiger Prozessor lediglich aus anschaulichen Zwecken hierin angegeben ist, und dass ein beliebiger Prozessor eingesetzt werden kann, um diesen zu ergänzen und/oder zu ersetzen. 2 shows a parallel processing unit (PPU) 200 according to one embodiment. In one embodiment, the PPU 200 a multi-stranded processor configured in one or more integrated circuit devices. The PPU 200 is a processing-hiding architecture designed to handle a large number of strands in parallel. A thread (ie, a thread for execution) is an instantiation of a set of instructions formed by the PPU 200 to be executed. In one embodiment, the PPU 200 a graphics processing unit (GPU) adapted to set up a graphic imaging pipeline for processing three-dimensional (3D) graphics data to produce two-dimensional (2D image data for display on a display device, such as a liquid crystal display (LCD) device.) In other embodiments can the PPU 200 to perform calculations for general purposes. While a single illustrative parallel processor is provided herein for illustrative purposes, it is to be understood that such processor is provided herein for illustrative purposes only, and that any processor may be employed to supplement and / or replace it.

Wie in 2 gezeigt ist, umfasst die PPU 200 eine Eingabe/Ausgabe-(I/O-)Einheit 205, eine Host-Schnittstelleneinheit 210, eine Frontseiteneinheit 215, eine Disponiereinheit 220, eine Arbeitsverteilungseinheit 225, einen Netzknoten 230, eine Kreuzverbindungseinheit (Xbar) 270, einen oder mehrere allgemeine Verarbeitungs-Cluster (GPCs) 250 und eine oder mehrere Partitionseinheiten 280. Die PPU 200 kann mit einem Host-Prozessor oder anderen peripheren Einrichtungen über einen Systembus 202 verbunden sein. Die PPU 200 kann ferner mit einem lokalen Speicher verbunden sein, der eine Reihe von Speichereinrichtungen 204 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl dynamischer Speichereinrichtungen mit wahlfreiem Zugriff (DRAM) aufweisen. As in 2 shown includes the PPU 200 an input / output (I / O) unit 205 , a host interface unit 210 , a front-end unit 215 , a scheduler 220 , a work distribution unit 225 , a network node 230 , a cross connection unit (Xbar) 270 , one or more general processing clusters (GPCs) 250 and one or more partition units 280 , The PPU 200 can work with a host processor or other peripheral devices via a system bus 202 be connected. The PPU 200 may also be connected to a local memory which includes a number of memory devices 204 includes. In one embodiment, the local memory may include a number of dynamic random access memory (DRAM) memory devices.

Die I/O-Einheit 205 ist ausgebildet, Kommunikationsereignisse (d. h. Befehle, Daten, usw.) von einem Host-Prozessor (nicht gezeigt) über den Systembus 202 zu senden und zu empfangen. Die I/O-Einheit 205 kann mit dem Host-Prozessor direkt über den Systembus 202 oder über eine oder mehrere dazwischen geschaltete Einrichtungen, etwa eine Speicherbrücke, kommunizieren. In einer Ausführungsform richtet die I/O-Einheit 205 eine periphere Komponenten-Verbindung-Express-(PCIe)Schnittstelle zur Kommunikation über einen PCIe-Bus ein. In alternativen Ausführungsformen kann die I/O-Einheit 205 andere Arten von gut bekannten Schnittstellen zur Kommunikation mit externen Geräten einrichten.The I / O unit 205 is configured to receive communication events (ie, instructions, data, etc.) from a host processor (not shown) over the system bus 202 to send and receive. The I / O unit 205 can with the host processor directly over the system bus 202 or communicate via one or more intervening devices, such as a memory bridge. In one embodiment, the I / O unit is directed 205 a Peripheral Component Connection Express (PCIe) interface for communication over a PCIe bus. In alternative embodiments, the I / O unit 205 set up other types of well-known interfaces for communicating with external devices.

Die I/O-Einheit 205 ist mit einer Host-Schnittstelleneinheit 210 gekoppelt, die Pakete dekodiert, die über den Systembus 202 empfangen werden. In einer Ausführungsform repräsentieren die Pakete Befehle, die ausgebildet sind, die PPU 200 zu veranlassen, diverse Operationen auszuführen. Die Host-Schnittstelleneinheit 210 sendet die dekodierten Befehle zu diversen anderen Einheiten der PPU 200, wie dies durch die Befehle angegeben ist. Beispielsweise können einige Befehle zu der Frontseiteneinheit 215 übertragen werden. Andere Befehle können zu dem Netzknoten 230 oder anderen Einheiten der PPU 200, etwa eine oder mehrere Kopiereinheiten, einen Video-Kodierer, einen Video-Dekodierer, eine Leistungsverwaltungseinheit, usw. (nicht explizit gezeigt) übertragen werden. Anders ausgedrückt, die Host-Schnittstelleneinheit 210 ist ausgebildet, Kommunikationsereignisse zwischen und unter diversen Logikeinheiten der PPU 200 weiterzuleiten.The I / O unit 205 is with a host interface unit 210 coupled, the packets are decoded via the system bus 202 be received. In one embodiment, the packets represent commands that are formed, the PPU 200 to cause to perform various operations. The host interface unit 210 sends the decoded commands to various other units of the PPU 200 as indicated by the commands. For example, some commands may be to the front panel unit 215 be transmitted. Other commands may be to the network node 230 or other units of the PPU 200 , about one or more copy units, a video encoder, a video decoder, a power management unit, etc. (not explicitly shown). In other words, the host interface unit 210 is trained to communicate events between and among various logical units of the PPU 200 forward.

In einer Ausführungsform dekodiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der Arbeitsaufträge an die PPU 200 zur Verarbeitung bereitstellt. Eine Arbeitsaufgabe bzw. Arbeitslast kann eine Reihe von Befehlen und von diesen Befehlen zu verarbeitende Daten umfassen. Der Puffer ist ein Gebiet in einem Speicher, auf das sowohl von dem Host-Prozessor als auch von der PPU 200 zugegriffen werden kann. Beispielsweise kann die Host-Schnittstelleneinheit 210 ausgebildet sein, auf den Puffer in einem Systemspeicher, der mit dem Systembus 202 verbunden ist, über Speicheranforderungen zuzugreifen, die über den Systembus 202 von der I/O-Einheit 205 gesendet werden. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 200. Die Host-Schnittstelleneinheit 210 versorgt die Frontseiteneinheit 215 mit Zeigern auf einen oder mehrere Befehlsströme. Die Frontseiteneinheit 215 verwaltet den einen oder die mehreren Ströme, indem Befehle aus den Strömen eingelesen und Befehle zu den diversen Einheiten der PPU 200 weitergeleitet werden.In one embodiment, a program executed by the host processor decodes an instruction stream in a buffer that commits jobs to the PPU 200 for processing. A workload may comprise a series of commands and data to be processed by these commands. The buffer is an area in memory shared by both the host processor and the PPU 200 can be accessed. For example, the host interface unit 210 be trained on the buffer in a system memory connected to the system bus 202 is connected to access memory requests over the system bus 202 from the I / O unit 205 be sent. In one embodiment, the host processor writes the instruction stream into the buffer and then sends a pointer to the beginning of the instruction stream to the PPU 200 , The host interface unit 210 provides the front panel unit 215 with pointers to one or more command streams. The front side unit 215 manages the one or more streams by reading instructions from the streams and commands to the various units of the PPU 200 to get redirected.

Die Frontseiteneinheit 215 ist mit einer Disponiereinheit 220 verbunden, die die diversen GPCs 250 konfiguriert, um Aufgaben zu verarbeiten, die durch den einen oder mehrere Ströme definiert sind. Die Disponiereinheit 220 ist ausgebildet, Zustandsinformation in Bezug auf die diversen Aufgaben, die von der Disponiereinheit 220 verwaltet werden, zu überwachen. Der Zustand kann anzeigen, welchem GPC 250 eine Aufgabe zugeordnet ist, ob die Aufgabe aktiv oder nicht aktiv ist, eine Prioritätsebene, die der Aufgabe zugeordnet ist, usw. Die Disponiereinheit 220 verwaltet die Ausführung mehrerer Aufgaben in dem einen oder den mehreren GPCs 250.The front side unit 215 is with a scheduler 220 connected to the various GPCs 250 configured to process tasks defined by the one or more streams. The scheduler 220 is trained to state information regarding the various tasks performed by the scheduler 220 be managed to monitor. The state can indicate which GPC 250 a task is assigned, whether the task is active or not active, a priority level assigned to the task, etc. The scheduler 220 manages the execution of multiple tasks in the one or more GPCs 250 ,

Die Disponiereinheit 220 ist mit einer Arbeitsverteilungseinheit 225 verbunden, die ausgebildet ist, Aufgaben zur Ausführung in den GPCs 250 auszugeben. Die Arbeitsverteilungseinheit 225 kann eine Reihe von disponierten Aufgaben, die aus der Disponiereinheit 220 empfangen werden, verfolgen. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 225 eine Ansammlung anhängiger Aufgaben und eine Ansammlung aktiver Aufgaben für jeden der GPCs 250. Die Ansammlung anhängiger Aufgaben kann eine Reihe von Abschnitten (beispielsweise 16 Abschnitte) beinhalten, die Aufgaben enthalten, die so zugewiesen sind, dass sie von einem gewissen GPC 250 zu verarbeiten sind. Die Ansammlung aktiver Aufgaben kann eine Reihe von Abschnitten (beispielsweise 4 Abschnitte) für Aufgaben beinhalten, die gerade von den GPCs 250 aktiv verarbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe beendet, dann wird diese Aufgabe aus der Ansammlung aktiver Aufgaben für den GPC 250 herausgenommen und eine der anderen Aufgaben aus der Ansammlung anhängiger Aufgaben wird ausgewählt und wird für die Ausführung in dem GPC 250 disponiert. Wenn eine aktive Aufgabe in dem GPC 250 unbearbeitet bleibt, etwa wenn darauf gewartet wird, dass eine Datenabhängigkeit aufgelöst wird, dann kann die aktive Aufgabe aus dem GPC 250 herausgenommen und wieder in die Ansammlung anhängiger Aufgaben zurückgeführt werden, während eine weitere Aufgabe in der Ansammlung anhängiger Aufgaben ausgewählt und für die Ausführung in dem GPC 250 disponiert wird.The scheduler 220 is with a work distribution unit 225 which is trained to perform tasks in the GPCs 250 issue. The work distribution unit 225 can be a set of scheduled tasks coming from the scheduler 220 be received, track. In one embodiment, the work distribution unit manages 225 a collection of pending tasks and a collection of active tasks for each of the GPCs 250 , The collection of pending tasks may include a number of sections (eg, 16 sections) that contain tasks assigned to be by some GPC 250 to be processed. The collection of active tasks may include a series of sections (for example, 4 sections) for tasks currently being performed by the GPCs 250 actively processed. If a GPC 250 Completing the execution of a task then this task becomes the accumulation of active tasks for the GPC 250 One of the other tasks from the collection of pending tasks is selected and will be used for execution in the GPC 250 scheduled. If an active task in the GPC 250 is left unprocessed, for example, when it is waiting for a data dependency to be resolved, then the active task can be retrieved from the GPC 250 taken out and back into the collection pending tasks are selected while another task is selected in the collection of pending tasks and for execution in the GPC 250 is scheduled.

Die Arbeitsverteilungseinheit 225 kommuniziert mit dem einen oder den mehreren GPCs 250 über eine Xbar 270. Die Xbar 270 ist ein Verbindungsnetzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 verbindet. Beispielsweise kann die Xbar 270 ausgebildet sein, die Arbeitsverteilungseinheit 225 mit einem speziellen GPC 250 zu koppeln. Obwohl dies nicht explizit gezeigt ist, sind eine oder mehrere andere Einheiten der PPU 200 mit der Host-Einheit 210 verbunden. Die anderen Einheiten können ebenfalls mit der Xbar 270 über einen Netzknoten 230 verbunden sein.The work distribution unit 225 communicates with the one or more GPCs 250 about an Xbar 270 , The Xbar 270 is a connection network that many of the units of PPU 200 with other units of PPU 200 combines. For example, the Xbar 270 be formed, the work distribution unit 225 with a special GPC 250 to pair. Although not explicitly shown, one or more other units are the PPU 200 with the host unit 210 connected. The other units can also use the Xbar 270 via a network node 230 be connected.

Die Aufgaben werden von der Disponiereinheit 220 verwaltet und an einen GPC 250 durch die Arbeitsverteilungseinheit 225 ausgegeben. Der GPC 250 ist ausgebildet, die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 benutzt werden, an einen anderen GPC 250 über die Xbar 270 weitergeleitet oder in dem Speicher 204 gespeichert werden. Die Ergebnisse können in den Speicher 204 über die Partitionseinheiten 280 geschrieben werden, die eine Speicherschnittstelle zum Auslesen und Schreiben von Daten in/aus dem Speicher 204 einrichten. In einer Ausführungsform umfasst die PPU 200 eine Anzahl U an Partitionseinheiten 280, die gleich ist der Anzahl separater und unterscheidbarer Speichereinrichtungen 204, die mit der PPU 200 verbunden sind. Eine Partitionseinheit 280 wird nachfolgend detaillierter in Verbindung mit 3B beschrieben.The tasks are performed by the scheduler 220 managed and sent to a GPC 250 through the work distribution unit 225 output. The GPC 250 is trained to process the task and produce results. The results may differ from other tasks within the GPC 250 be used to another GPC 250 about the Xbar 270 forwarded or in the memory 204 get saved. The results can be stored in memory 204 about the partition units 280 which is a memory interface for reading and writing data to / from memory 204 set up. In one embodiment, the PPU includes 200 a number U of partition units 280 which is equal to the number of separate and distinguishable memory devices 204 that with the PPU 200 are connected. A partition unit 280 will be described in more detail below in connection with 3B described.

In einer Ausführungsform führt ein Host-Prozessor einen Treiber-Systemkern aus, der eine Anwendungsprogrammierschnittstelle (API) einrichtet, die es einer oder mehreren Anwendungen ermöglicht, die in dem Host-Prozessor ausgeführt werden, Operationen zur Ausführung in der PPU 200 zu disponieren. Eine Anwendung kann Befehle (d. h. API-Aufrufe) erzeugen, die den Treiber-Systemkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiber-Systemkern gibt Aufgaben an einen oder mehrere Ströme, die von der PPU 200 verarbeitet werden, aus. Jede Aufgabe kann eine oder mehrere Gruppen zugehöriger Stränge umfassen, was hierin als eine Stranggruppe bezeichnet wird. Ein Strang-Block kann auf mehrere Gruppen von Strängen, die Befehle enthalten, um die Aufgabe auszuführen, verweisen. Stränge in der gleichen Gruppe aus Strängen können Daten über einen gemeinsam benutzten Speicher austauschen. In einer Ausführungsform umfasst eine Gruppe aus Strängen 32 zugehörige Stränge.In one embodiment, a host processor executes a driver kernel that establishes an application programming interface (API) that enables one or more applications executing in the host processor to perform operations in the PPU 200 to dispose of. An application may generate commands (ie, API calls) that cause the driver kernel to perform one or more tasks for execution by the PPU 200 to create. The driver kernel issues tasks to one or more streams from the PPU 200 to be processed. Each task may include one or more groups of associated strands, referred to herein as a strand group. A strand block may refer to multiple sets of threads containing instructions to perform the task. Strings in the same set of strands can exchange data about a shared memory. In one embodiment, a group of strands comprises 32 associated strands.

3A zeigt einen GPC 250 der PPU 200 aus 2 gemäß einer Ausführungsform. Wie in 3A gezeigt ist, enthält jeder GPC 250 eine Anzahl von Hardware-Einheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform enthält jeder GPC 250 einen Pipeline-Verwalter 310, eine Vor-Rasteroperationseinheit (PROP) 315, eine Rastereinheit 325, eine Arbeitsverteilung-Kreuzungsverbindungseinheit (WDX) 380, eine Speicherverwaltungseinheit (MMU) 390 und einen oder mehrere Textur-Verarbeitungs-Cluster (TPCs) 320. Zu beachten ist, dass der GPC 250 aus 3A andere Hardware-Einheiten anstelle oder zusätzlich zu den in 3A gezeigten Einheiten aufweisen kann. 3A shows a GPC 250 the PPU 200 out 2 according to one embodiment. As in 3A is shown, each contains GPC 250 a number of hardware units for processing tasks. In one embodiment, each contains GPC 250 a pipeline manager 310 , a pre-raster operation unit (PROP) 315 , a grid unit 325 , a work distribution intersection connection unit (WDX) 380 , a storage management unit (MMU) 390 and one or more texture processing clusters (TPCs) 320 , It should be noted that the GPC 250 out 3A other hardware units instead of or in addition to those in 3A may have shown units.

In einer Ausführungsform wird die Arbeitsweise des GPC 250 durch den Pipeline-Verwalter 310 gesteuert. Der Pipeline-Verwalter 310 verwaltet die Konfiguration des einen oder der mehreren TPCs 320 zur Verarbeitung von Aufgaben, die dem GPC 250 zugewiesen sind. In einer Ausführungsform kann der Pipeline-Verwalter 310 zumindest einen der einen oder mehreren TPCs 320 so konfigurieren, dass zumindest ein Teil einer grafischen Bilderzeugungs-Pipeline eingerichtet wird. Beispielsweise kann ein TPC 320 konfiguriert werden, um ein Vertex-Schattierungsprogramm in dem programmierbaren Datenstrom-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Verwalter 310 kann ferner konfiguriert werden, um Pakete, die aus der Arbeitsverteilungseinheit 225 erhalten werden, zu geeigneten Logikeinheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete zu Hardware-Einheiten mit festgelegter Funktion in der PROP 315 und/oder einer Rastereinheit 325 weitergeleitet werden, während andere Pakete den TPCs 320 zur Verarbeitung durch die Grundformen-Einheit 335 oder den SM 340 weitergeleitet werden können.In one embodiment, the operation of the GPC 250 through the pipeline manager 310 controlled. The pipeline manager 310 manages the configuration of the one or more TPCs 320 for processing tasks assigned to the GPC 250 are assigned. In one embodiment, the pipeline manager 310 at least one of the one or more TPCs 320 configure to set up at least part of a graphical imaging pipeline. For example, a TPC 320 configured to use a vertex shader in the Programmable Stream Multiprocessor (SM). 340 perform. The pipeline manager 310 can also be configured to receive packets from the work distribution unit 225 be obtained to appropriate logic units within the GPC 250 forward. For example, some packages may become hardware units with a set function in the PROP 315 and / or a grid unit 325 while other packets are forwarded to the TPCs 320 for processing by the basic form unit 335 or the SM 340 can be forwarded.

Die PROP-Einheit 315 ist ausgebildet, Daten, die von der Rastereinheit 325 und den TPCs 320 erzeugt werden, an eine Rasteroperations-(ROP-)Einheit in der Partitionseinheit 280 weiterzuleiten, die nachfolgend detaillierter beschrieben ist. Die PROP-Einheit 315 kann ferner ausgebildet sein, Optimierungen für die Farbmischung durchzuführen, Pixeldaten zu verwalten, Adressenübersetzungen auszuführen, und dergleichen.The PROP unit 315 is designed to receive data from the grid unit 325 and the TPCs 320 to a raster operation (ROP) unit in the partition unit 280 to forward, which is described in more detail below. The PROP unit 315 Further, it may be configured to perform optimizations for color mixing, to manage pixel data, to perform address translations, and the like.

Die Rastereinheit 325 enthält eine Reihe von Hardware-Einheiten mit festgelegter Funktion, die ausgebildet sind, diverse Rasteroperationen auszuführen. In einer Ausführungsform umfasst die Rastereinheit 325 eine Einricht-Einheit, eine Grob-Rastereinheit, eine Aussonderungseinheit, eine Schneideeinheit, eine Fein-Rastereinheit und eine Kachel-Verbindungseinheit. Die Einricht-Einheit empfängt transformierte Eckpunkte und erzeugt Ebenengleichungen, die der durch die Eckpunkte definierten geometrischen Grundform zugeordnet sind. Die Ebenengleichungen werden zu der Grob-Rastereinheit übertragen, um Abdeckungsinformation (beispielsweise eine x, y-Abdeckungsmaske für eine Kachel) für die Grundform zu erzeugen. Die Ausgabe der Grob-Rastereinheit kann zu der Aussonderungseinheit übertragen werden, in der Fragmente, die der Grundform zugeordnet sind und einen z-Test nicht bestehen, ausgesondert werden, und können zu einer Schneideeinheit übertragen werden, in der Fragmente, die außerhalb eines Betrachtungsgebiets liegen, abgeschnitten werden. Diese Fragmente, die nach der Aussonderung und dem Abscheiden noch vorhanden sind, können zu einer Fein-Rastereinheit weitergegeben werden, die Attribute für die Pixelfragmente auf der Grundlage der Ebenengleichungen erzeugt, die von der Einricht-Einrichtung erzeugt wurden. Die Ausgabe der Rastereinheit 380 umfasst Fragmente, die beispielsweise von einer Fragmentschattierungseinheit, die in einem TPC 320 eingerichtet ist, zu verarbeiten sind.The grid unit 325 contains a set of fixed function hardware units designed to perform various raster operations. In one embodiment, the grid unit comprises 325 a set-up unit, a coarse grid unit, a reject unit, a cutter unit, a fine grid unit, and a tile connection unit. The setup unit receives transformed vertices and creates plane equations associated with the geometric primitive defined by the vertices. The Level equations are transferred to the coarse rasterizer to generate coverage information (eg, a x, y coverage mask for a tile) for the primitive. The output of the coarse rasterizer unit may be transmitted to the rejection unit, in which fragments which are assigned to the basic form and do not pass a z-test, are discarded, and may be transmitted to a slicing unit, in which fragments which are outside a viewing area to be cut off. These fragments, which are still present after disposal and deposition, may be passed to a fine rasterizer that generates attributes for the pixel fragments based on the level equations created by the setup device. The output of the grid unit 380 includes fragments derived, for example, from a fragment shading unit present in a TPC 320 is set up to be processed.

Jeder TPC 320, der in dem GPC 250 enthalten ist, umfasst eine M-Kanal-Steuerung (MPC) 330, eine Grundform-Einheit 335, einen SM 340 und eine oder mehrere Textureinheiten 345. Die MPC 330 steuert die Funktionsweise des TPC 320, wobei Pakete, die aus dem Pipeline-Verwalter 310 empfangen werden, an die geeigneten Einheiten in dem TPC 320 weitergeleitet werden. Beispielsweise können Pakete, die einem Eckpunkt zugeordnet sind, zu der Grundform-Einheit 335 geleitet werden, die ausgebildet ist, Vertex-Attribute, die zu dem Eckpunkt gehören, aus dem Speicher 204 abzuholen. Im Gegensatz dazu können Pakete, die zu einem Schattierungsprogramm gehören, zu dem SM 340 gesendet werden.Every TPC 320 who is in the GPC 250 includes an M-channel controller (MPC) 330 , a basic form unit 335 , a SM 340 and one or more texture units 345 , The MPC 330 controls the functioning of the TPC 320 , where are packets from the pipeline manager 310 to the appropriate units in the TPC 320 to get redirected. For example, packets associated with a vertex may become the primitive unit 335 which is configured to extract vertex attributes belonging to the vertex from the memory 204 pick. In contrast, packets belonging to a shader program may be part of the SM 340 be sent.

In einer Ausführungsform sind die Textureinheiten 345 ausgebildet, Texturkarten (beispielsweise ein 2D-Array an Texel) aus dem Speicher 204 zu laden und die Texturkarten abzutasten, um abgetastete Texturwerte zur Verwendung in Schattierungsprogrammen zu erzeugen, die von dem SM 340 ausgeführt werden. Die Textureinheiten 345 implementieren Texturoperationen, etwa Filteroperationen unter Anwendung von mip-Karten (d. h. Texturkarten mit unterschiedlichen Stufen an Detail). In einer Ausführungsform umfasst jeder TPC 320 vier (4) Textureinheiten 345.In one embodiment, the texture units are 345 formed, texture maps (for example, a 2D array of Texel) from the memory 204 and to scan the texture maps to produce sampled texture values for use in shader programs generated by the SM 340 be executed. The texture units 345 implement texture operations, such as filter operations using mip maps (ie texture maps with different levels of detail). In one embodiment, each TPC comprises 320 four (4) texture units 345 ,

Der SM 340 umfasst einen programmierbaren Datenstrom-Prozessor, der ausgebildet ist, Aufgaben auszuführen, die durch eine Reihe von Strängen repräsentiert sind. Jeder SM 340 ist mehrsträngig und ausgebildet, mehrere Stränge (beispielsweise 32 Stränge) aus einer speziellen Gruppe aus Strängen gleichzeitig auszuführen. In einer Ausführungsform implementiert der SM 340 eine SIMD-(einzelner Befehl, mehrere Daten)Architektur, in der jeder Strang in einer Gruppe aus Strängen (d. h. einer Stranggruppe) ausgebildet ist, einen anderen Datensatz auf der Grundlage der gleichen Gruppe aus Befehlen zu verarbeiten. Alle Stränge in der Gruppe aus Strängen führen die gleichen Befehle aus. In einer weiteren Ausführungsform implementiert der SM 340 eine SIMT-(einzelner Befehl, mehrere Stränge)Architektur, in der jeder Strang in einer Gruppe aus Strängen ausgebildet ist, einen anderen Datensatz auf der Grundlage der gleichen Gruppe an Befehlen zu verarbeiten, wobei jedoch individuelle Stränge in der Gruppe aus Strängen die Möglichkeit haben, während der Ausführung zu divergieren. Anders ausgedrückt, wenn ein Befehl für die Gruppe aus Strängen zur Ausführung ausgegeben wird, können einige Stränge in der Gruppe aus Strängen aktiv sein, wodurch der Befehl ausgeführt wird, während andere Stränge in der Gruppe aus Strängen inaktiv sein können, wodurch eine keine-Operation (NOP) anstelle der Ausführung des Befehls vorgenommen wird. Der SM 340 kann in Verbindung mit 4 im Folgenden detaillierter beschrieben werden.The SM 340 includes a programmable data stream processor configured to perform tasks represented by a series of threads. Every SM 340 is multi-stranded and designed to execute multiple strands (for example 32 strands) from a particular group of strands simultaneously. In one embodiment, the SM implements 340 an SIMD (Single Command, Multiple Data) architecture in which each thread in a group of threads (ie, a thread group) is configured to process another record based on the same set of commands. All strands in the set of strands execute the same commands. In another embodiment, the SM implements 340 a SIMT (Single Instruction, Multiple Strings) architecture in which each strand in a group of strands is configured to process a different set of data based on the same set of instructions, but individual strands in the set of strands have the possibility to diverge during execution. In other words, when an instruction for the set of strands is issued for execution, some strands in the set of strands may be active, thereby executing the instruction, while other strands in the set of strands may be inactive, thus making a no-operation (NOP) instead of executing the command. The SM 340 Can in conjunction with 4 will be described in more detail below.

Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitionseinheit 280 bereit. Die MMU 390 kann eine Übersetzung virtueller Adressen in physikalische Adressen, einen Speicherschutz und eine Verteilung von Speicheranforderungen ermöglichen. In einer Ausführungsform stellt die MMU 390 einen oder mehrere Translations-Nebenschaupuffer-Puffer (TLBs) zur Verbesserung der Übersetzung von virtuellen Adressen in physikalische Adressen in dem Speicher 204 bereit.The MMU 390 provides an interface between the GPC 250 and the partition unit 280 ready. The MMU 390 can enable translation of virtual addresses into physical addresses, memory protection and distribution of memory requests. In one embodiment, the MMU 390 one or more translation look-by buffer (TLBs) to improve the translation of virtual addresses into physical addresses in the memory 204 ready.

3B zeigt eine Partitionseinheit 280 der PPU 200 aus 2 gemäß einer Ausführungsform. Wie in 3B gezeigt ist, umfasst die Partitionseinheit 280 eine Rasteroperations-(ROP-)Einheit 350, einen Cache-Speicher der Ebene zwei (L2) 360, eine Speicherschnittstelle 370 und eine L2-Kreuz-Verbindungseinheit (Xbar) 365. Die Speicherschnittstelle 370 ist mit dem Speicher 204 verbunden. Die Speicherschnittstelle 270 kann 16, 32, 64, 128-Bit-Datenbusse oder dergleichen für einen Hochgeschwindigkeitsdatentransfer einrichten. In einer Ausführungsform umfasst die PPU 200 U Schnittstellen 370, d. h. eine Speicherschnittstelle 370 pro Partitionseinheit 280, wobei jede Partitionseinheit 280 mit einer entsprechenden Speichereinrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu U Speichereinrichtungen 204 verbunden sein, etwa einem synchronen dynamischen Speicher mit wahlfreiem Zugriff für Grafik mit doppelter Datenrate der Version 5 (GDDR5 SDRAM). In einer Ausführungsform implementiert die Speicherschnittstelle 370 eine DRAM-Schnittstelle und U ist gleich 6. 3B shows a partition unit 280 the PPU 200 out 2 according to one embodiment. As in 3B shown includes the partition unit 280 a raster operation (ROP) unit 350 , a level two cache (L2) 360 , a storage interface 370 and an L2 cross connection unit (Xbar) 365 , The storage interface 370 is with the store 204 connected. The storage interface 270 can set up 16, 32, 64, 128-bit data buses or the like for high-speed data transfer. In one embodiment, the PPU includes 200 U interfaces 370 ie a memory interface 370 per partition unit 280 where each partition unit 280 with a corresponding memory device 204 connected is. For example, the PPU 200 with up to U memory devices 204 For example, a synchronous dynamic random access memory for double-data rate version 5 (GDDR5 SDRAM) graphics may be connected. In one embodiment, the memory interface implements 370 a DRAM interface and U equals 6.

In einer Ausführungsform implementiert die PPU 200 eine mehr Ebenen-Speicherhierarchie. Der Speicher 204 ist als SDRAM außerhalb des Chips angeordnet und ist mit der PPU 200 verbunden. Daten aus dem Speicher 204 können abgeholt und in dem L2-Cache-Speicher 360 gespeichert werden, der auf dem Chip angeordnet ist und von den diversen GPCs 250 gemeinsam genutzt wird. Wie gezeigt, umfasst jede Partitionseinheit 280 einen Teil des L2-Cache-Speichers 360, der einer entsprechenden Speichereinrichtung 204 zugeordnet ist. Cache-Speicher niedrigerer Ebene können in diversen Einheiten innerhalb der GPCs 250 eingerichtet werden. Beispielsweise kann jeder der SMs 340 einen Cache-Speicher der Ebene eins (L1) einrichten. Der L1-Cache-Speicher ist ein privater Speicher, der einem speziellen SM 340 zugeordnet ist. Daten aus dem L2-Cache-Speicher 360 können abgeholt und in jedem der L1-Cache-Speicher zur Verarbeitung in den Funktionseinheiten der SMs 340 gespeichert werden. Der L2-Cache-Speicher 360 ist mit der Speicherschnittstelle 370 und der Xbar 270 verbunden.In one embodiment, the PPU implements 200 a more level memory hierarchy. The memory 204 is arranged as SDRAM off-chip and is connected to the PPU 200 connected. dates from the store 204 can be picked up and in the L2 cache 360 stored on the chip and from the various GPCs 250 shared. As shown, each partition unit comprises 280 a part of the L2 cache 360 , the corresponding storage device 204 assigned. Lower level caches can be found in various units within the GPCs 250 be set up. For example, each of the SMs 340 set up a level one cache (L1). The L1 cache is a private store dedicated to a special SM 340 assigned. Data from the L2 cache 360 can be fetched and stored in each of the L1 caches for processing in the functional units of the SMs 340 get saved. The L2 cache 360 is with the memory interface 370 and the Xbar 270 connected.

Die ROP-Einheit 350 umfasst einen ROP-Verwalter 355, eine Farb-ROP-(CROP-)Einheit 352 und eine Z-ROP-(ZROP-)Einheit 354. Die CROP-Einheit 352 führt Rasteroperationen in Bezug auf Pixelfarbe, etwa Farbkomprimierung, Pixelmischung und dergleichen aus. Die ZROP-Einheit 354 implementiert eine Tiefen-Prüfung in Verbindung mit der Rastereinheit 325. Die ZROP-Einheit 354 empfängt eine Tiefe für eine Abtastposition, die zu einem Pixelfragment gehört, von der Aussonderungseinheit der Rastereinheit 325. Die ZROP-Einheit 354 prüft die Tiefe im Vergleich zu einer entsprechenden Tiefe in einem Tiefen-Puffer für eine Abtastposition, die zu dem Fragment gehört. Wenn das Fragment den Tiefen-Test für die Abtastposition besteht, dann aktualisiert die ZROP-Einheit 354 den Tiefen-Puffer und sendet ein Ergebnis des Tiefen-Tests an die Rastereinheit 325. Der ROP-Verwalter 355 steuert die Arbeitsweise der ROP-Einheit 350. Zu beachten ist, dass die Anzahl an Partitionseinheiten 280 unterschiedlich sein kann im Vergleich zu der Anzahl an GPCs 250, und daher kann jede ROP-Einheit 350 mit jedem der GPCs 250 verbunden sein. Daher verfolgt der ROP-Verwalter 355 Pakete, die aus den unterschiedlichen GPCs 250 empfangen werden, und ermittelt, zu welchem GPC 250 ein Ergebnis, das von der ROP-Einheit 350 erzeugt wurde, weiterzuleiten ist. Die CROP-Einheit 352 und die ZROP-Einheit 354 sind mit dem L2-Cache-Speicher 360 über eine L2-Xbar 365 verbunden.The ROP unit 350 includes a ROP manager 355 , a color ROP (CROP) unit 352 and a Z-ROP (ZROP) unit 354 , The CROP unit 352 performs raster operations related to pixel color, such as color compression, pixel blending and the like. The ZROP unit 354 implements a depth check in conjunction with the grid unit 325 , The ZROP unit 354 receives a depth for a sample position associated with a pixel fragment from the discard unit of the rasterizer 325 , The ZROP unit 354 checks the depth versus a corresponding depth in a depth buffer for a sample position associated with the fragment. If the fragment passes the depth test for the sample position, then the ZROP unit updates 354 the depth buffer and sends a result of the depth test to the grid unit 325 , The ROP administrator 355 Controls the operation of the ROP unit 350 , It should be noted that the number of partition units 280 may be different compared to the number of GPCs 250 , and therefore any ROP unit can 350 with each of the GPCs 250 be connected. Therefore, the ROP administrator is following 355 Packages coming from the different GPCs 250 and determines which GPC 250 a result from the ROP unit 350 was generated, is to be forwarded. The CROP unit 352 and the ZROP unit 354 are with the L2 cache 360 over an L2-Xbar 365 connected.

4 zeigt den Datenstrom-Multiprozessor 340 aus 3A gemäß einer Ausführungsform. Wie in 4 gezeigt ist, umfasst der SM 340 einen Befehls-Cache-Speicher 405, eine oder mehrere Disponiereinheiten 410, eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade/Speicher-Einheiten (LSUs) 454, ein Verbindungsnetzwerk 480 und einen gemeinsam genutzten Speicher/L1-Cache-Speicher 470. 4 shows the data stream multiprocessor 340 out 3A according to one embodiment. As in 4 is shown, the SM includes 340 an instruction cache 405 , one or more scheduler units 410 , a register file 420 , one or more processing cores 450 , one or more special function units (SFUs) 452 , one or more load / store units (LSUs) 454 , a connection network 480 and a shared memory / L1 cache 470 ,

Wie zuvor beschrieben ist, gibt die Arbeitsverteilungseinheit 225 Aufgaben zur Ausführung in den GPCs 250 der PPU 200 aus. Die Aufgaben werden einem speziellen TPC 320 innerhalb eines GPC 250 zugeordnet, und wenn die Aufgabe mit einem Schattierungsprogramm verknüpft ist, kann die Aufgabe einem SM 340 zugewiesen werden. Die Disponiereinheit 410 empfängt die Aufgaben aus der Arbeitsverteilungseinheit 225 und verwaltet die Befehlsdisponierung für eine oder mehrere Gruppen an Strängen (d. h. Stranggruppen), die dem SM 340 zugewiesen sind. Die Disponiereinheit 410 disponiert Stränge zur Ausführung in Gruppen paralleler Stränge, wobei jede Gruppe als eine Stranggruppe bezeichnet wird. In einer Ausführungsform enthält jede Stranggruppe 32 Stränge. Die Disponiereinheit 410 kann mehrere unterschiedliche Stranggruppen verwalten, die Stranggruppen zur Ausführung disponieren und dann Befehle aus den mehreren unterschiedlichen Stranggruppen an die diversen Funktionseinheiten (d. h. Kerne 350, SFUs 352 und LSUs 354) während jedes Taktzyklus ausgeben.As described above, the work distribution unit indicates 225 Tasks to execute in the GPCs 250 the PPU 200 out. The tasks become a special TPC 320 within a GPC 250 and if the task is associated with a shader, the task can be assigned to an SM 340 be assigned to. The scheduler 410 receives the tasks from the work distribution unit 225 and manages command dispatching for one or more groups on strands (ie, thread groups) associated with the SM 340 are assigned. The scheduler 410 schedules strands to execute in groups of parallel strands, each group being called a strand group. In one embodiment, each strand group contains 32 Strands. The scheduler 410 can manage several different thread groups that dispose thread groups for execution and then commands from the several different thread groups to the various functional units (ie cores 350 , SFUs 352 and LSUs 354 ) during each clock cycle.

In einer Ausführungsform umfasst jede Disponiereinheit 410 eine oder mehrere Befehlsausgabeeinheiten 415. Jede Ausgabeeinheit 415 ist ausgebildet, Befehle zu einer oder mehreren der Funktionseinheiten zu senden. In der in 4 gezeigten Ausführungsform umfasst die Disponiereinheit 410 zwei Ausgabeeinheiten 415, die es möglich machen, dass zwei unterschiedliche Befehle aus der gleichen Stranggruppe während jedes Taktzyklus ausgegeben werden. In alternativen Ausführungsformen kann jede Disponiereinheit 410 eine einzelne Ausgabeeinheit 415 oder zusätzliche Ausgabeeinheiten 415 aufweisen.In one embodiment, each scheduler unit comprises 410 one or more command output units 415 , Each output unit 415 is configured to send commands to one or more of the functional units. In the in 4 the embodiment shown comprises the scheduler 410 two output units 415 that allow two different commands from the same thread group to be issued during each clock cycle. In alternative embodiments, each scheduler may 410 a single output unit 415 or additional output units 415 exhibit.

Jeder SM 340 enthält eine Registerdatei 420, die eine Gruppe aus Registern für die Funktionseinheiten des SM 340 bereitstellt. In einer Ausführungsform ist die Registerdatei 420 auf jede der Funktionseinheiten derart aufgeteilt, dass jeder Funktionseinheit ein spezieller Teil der Registerdatei 420 zugeordnet ist. In einer weiteren Ausführungsform ist die Registerdatei 420 zwischen den unterschiedlichen Stranggruppen, die von dem SM 340 ausgeführt werden, aufgeteilt. Die Registerdatei 420 stellt temporären Speicherplatz für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten verbunden sind.Every SM 340 contains a register file 420 containing a group of registers for the functional units of the SM 340 provides. In one embodiment, the register file is 420 divided into each of the functional units such that each functional unit is a special part of the register file 420 assigned. In another embodiment, the register file is 420 between the different strand groups used by the SM 340 be executed, split. The register file 420 provides temporary storage for operands associated with the data paths of the functional units.

Jeder SM 340 umfasst L Verarbeitungskerne 450. In einer Ausführungsform umfasst der SM 340 eine große Anzahl (beispielsweise 192, usw.) separater Verarbeitungskerne 450. Jeder Kern 450 kann eine vollständig als Pipeline eingerichtete Verarbeitungseinheit mit einfacher Genauigkeit aufweisen, die eine Gleitkomma-Arithmetik-Logikeinheit und eine Ganzzahl-Arithmetik-Logikeinheit aufweist. Der Kern 450 kann ferner eine Verarbeitungseinheit mit doppelter Genauigkeit mit einer Fließkomma-Arithmetik-Logikeinheit aufweisen. In einer Ausführungsform implementiert die Gleitkomma-Arithmetik-Logikeinheit den IEEE 754-2008-Standard für Gleitkommaarithmetik. Jeder SM 340 umfasst ferner M SFUs 452, die spezielle Funktionen ausführen (beispielsweise Pixel-Vereinigungsoperationen, und dergleichen), und N LSUs 454, die Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher/L1-Cache-Speicher 470 und der Registerdatei 420 implementieren. In einer Ausführungsform umfasst der SM 340 192 Kerne 450, 32 SFUs 452 und 32 LSUs 454.Every SM 340 includes L processing cores 450 , In an embodiment, the SM comprises 340 a large number (e.g., 192, etc.) of separate processing cores 450 , Every core 450 may comprise a fully pipelined single precision processing unit having a floating point arithmetic logic unit and an integer arithmetic logic unit. The core 450 Furthermore, a double-precision processing unit may be provided with a floating point Arithmetic logic unit. In one embodiment, the floating point arithmetic logic unit implements the IEEE 754-2008 standard for floating point arithmetic. Every SM 340 also includes M SFUs 452 performing special functions (for example, pixel merging operations, and the like) and N LSUs 454 , the load and store operations between the shared memory / L1 cache 470 and the register file 420 to implement. In an embodiment, the SM comprises 340 192 cores 450 , 32 SFUs 452 and 32 LSUs 454 ,

Jeder SM 340 enthält ein Verbindungsnetzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 und dem gemeinsam genutzten Speicher/L1-Cache-Speicher 470 verbindet. In einer Ausführungsform ist das Verbindungsnetzwerk 480 eine Kreuzverbindungseinheit, die ausgebildet sein kann, jegliche der Funktionseinheiten mit einem beliebeigen Register in der Registerdatei 420 oder den Speicherstellen in dem gemeinsam genutzten Speicher/L1-Cache-Speicher 470 zu verbinden.Every SM 340 contains a connection network 480 containing each of the functional units with the register file 420 and the shared memory / L1 cache 470 combines. In one embodiment, the interconnect network is 480 a cross connect unit that may be configured to include any of the functional units with any register in the register file 420 or the locations in the shared memory / L1 cache 470 connect to.

Der gemeinsam genutzte Speicher/L1-Cache-Speicher 470 ist ein Array eines chipinternen Speichers, der in einer Ausführungsform als gemeinsam genutzter Speicher oder ein L1-Cache-Speicher oder als eine Kombination von beidem, entsprechend den Anwendungserfordernissen, ausgebildet sein kann. Beispielsweise kann der gemeinsam genutzte Speicher/L1-Cache-Speicher 470 64 kB an Speicherkapazität umfassen. Der gemeinsam genutzte Speicher/L1-Cache-Speicher 470 kann als ein 64 kB eines gemeinsam benutzten Speichers oder eines L1-Cache-Speichers oder einer Kombination von diesem beiden konfiguriert sein, etwa als ein 16 kB eines L1-Cache-Speichers und 48 kB eines gemeinsam benutzten Speichers.The shared memory / L1 cache 470 FIG. 10 is an on-chip memory array that, in one embodiment, may be a shared memory or L1 cache, or a combination of both, according to application requirements. For example, the shared memory / L1 cache 470 64 kB of storage capacity. The shared memory / L1 cache 470 may be configured as a 64 KB of shared memory or an L1 cache, or a combination of both, such as a 16 KB of L1 cache and 48 KB of shared memory.

Die zuvor beschriebene PPU 200 kann so konfiguriert werden, dass sie Berechnungen in äußerst paralleler Weise wesentlich schneller als konventionelle CPUs ausführt. Die parallele Berechnung hat Vorteile in der Grafikverarbeitung, der Datenkomprimierung, in biometrischen Verfahren, in Daten-Stromverarbeitungsalgorithmen, und dergleichen.The previously described PPU 200 can be configured to perform calculations in a very parallel manner much faster than conventional CPUs. The parallel calculation has advantages in graphics processing, data compression, biometric methods, data stream processing algorithms, and the like.

In einer Ausführungsform umfasst die PPU 200 eine grafische Verarbeitungseinheit (GPU). Die PPU 200 ist ausgebildet, Befehle zu empfangen, die Schattierungsprogramme zur Verarbeitung von Grafikdaten angeben. Grafikdaten können als eine Gruppe von Grundformen, etwa Punkte, Linien, Dreiecke, Quadrate, Dreiecksstreifen, und dergleichen definiert sein. Typischerweise enthält eine Grundform Daten, die eine Anzahl von Vertices bzw. Eckpunkten für die Grundform (beispielsweise in einem Modellraum-Koordinatensystem) sowie Attribute, die jedem Eckpunkt der Grundform zugeordnet sind, angeben. Die PPU 200 kann ausgebildet sein, die grafischen Grundformen so zu verarbeiten, dass ein Bildblockpuffer (d. h. Pixeldaten für jedes der Pixel der Anzeige) erzeugt wird.In one embodiment, the PPU includes 200 a graphical processing unit (GPU). The PPU 200 is configured to receive commands indicating shading programs for processing graphics data. Graphics data may be defined as a group of primitives, such as dots, lines, triangles, squares, triangular stripes, and the like. Typically, a primitive contains data indicating a number of vertices for the primitive shape (eg, in a model space coordinate system) as well as attributes associated with each vertex of the primitive shape. The PPU 200 may be configured to process the basic graphic shapes to produce an image block buffer (ie, pixel data for each of the pixels of the display).

Eine Anwendung schreibt Modelldaten für eine Szene (d. h. eine Ansammlung an Eckpunkten und Attributen) in einen Speicher, etwa einen Systemspeicher oder den Speicher 204. Die Modelldaten definieren jedes Objekt, das auf einer Anzeige sichtbar sein kann. Die Anwendung führt dann einen API-Aufruf an dem Treiber-Systemkern durch, der anfordert, dass die Modelldaten als Bild erzeugt und angezeigt werden. Der Treiber-Systemkern liest dann die Modelldaten aus und schreibt Befehle in den einen oder die mehreren Ströme, um Operationen auszuführen, so dass die Modelldaten verarbeitet werden. Die Befehle können unterschiedlichen Schattierungsprogrammen entsprechen, die in den SMs 340 der PPU 200 einzurichten sind, die eine Vertex-Schattierungseinheit und/oder eine Umhüllungs-Schattierungseinheit und/oder eine Domänen-Schattierungseinheit und/oder eine Geometrie-Schattierungseinheit und/oder eine Pixel-Schattierungseinheit enthalten. Beispielsweise können einer oder mehrere der SMs 340 ausgebildet sein, ein Vertex-Schattierungsprogramm auszuführen, das eine Anzahl von Eckpunkten bearbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die unterschiedlichen SMs 340 ausgebildet sein, gleichzeitig unterschiedliche Schattierungsprogramme auszuführen. Beispielsweise kann eine erste Teilgruppe der SMs 340 eingerichtet sein, ein Vertex-Schattierungsprogramm auszuführen, während eine zweite Teilgruppe der SMs 340 ausgebildet sein kann, ein Pixel-Schattierungsprogramm auszuführen. Die erste Teilgruppe der SMs 340 verarbeitet Vertex-Daten, um verarbeitete Vertex-Daten zu erzeugen, und schreibt die verarbeiteten Vertex-Daten in den L2-Cache-Speicher 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertex-Daten in Raster eingeteilt sind (d. h. von den dreidimensionalen Daten in zweidimensionale Daten im Bildschirm-Raum transformiert sind), um Fragmentdaten zu erzeugen, führt die zweite Teilgruppe der SMs 340 eine Pixel-Schattierungseinheit aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten vereinigt und in den Bildblockpuffer im Speicher 204 geschrieben werden. Das Vertex-Schattierungsprogramm und das Pixel-Schattierungsprogramm können gleichzeitig ausgeführt werden, wodurch unterschiedliche Daten aus der gleichen Szene in der Art einer Pipeline verarbeitet werden, bis alle Modelldaten für die Szene in dem Bildblockpuffer als Bild gespeichert sind. Anschließend wird der Inhalt des Bildblockpuffers an eine Anzeigesteuerung zur Anzeige auf einer Anzeigeeinrichtungen übertragen.An application writes model data for a scene (ie, a collection of vertices and attributes) to memory, such as system memory or memory 204 , The model data defines every object that can be visible on a display. The application then makes an API call to the driver kernel requesting that the model data be generated and displayed as an image. The driver kernel then reads the model data and writes instructions to the one or more streams to perform operations so that the model data is processed. The commands may correspond to different shader programs used in the SMs 340 the PPU 200 to be set up, which include a vertex shading unit and / or a wrap shading unit and / or a domain shading unit and / or a geometry shading unit and / or a pixel shading unit. For example, one or more of the SMs 340 be configured to execute a vertex shading program that processes a number of vertices defined by the model data. In one embodiment, the different SMs 340 be configured to run simultaneously different shading programs. For example, a first subset of the SMs 340 be configured to execute a vertex shader while a second subset of the SMs 340 may be configured to execute a pixel shader program. The first subgroup of SMs 340 Processes vertex data to produce processed vertex data and writes the processed vertex data into the L2 cache 360 and / or the memory 204 , After the processed vertex data is divided into rasters (ie transformed from the three-dimensional data into two-dimensional data in screen space) to generate fragment data, the second subset of the SMs 340 a pixel shader unit to generate processed fragment data which is then merged with other processed fragment data and stored in the image block buffer in memory 204 to be written. The vertex shader and the pixel shader may be executed concurrently, thereby processing different data from the same scene in the manner of a pipeline until all model data for the scene is stored in the frame buffer as an image. Subsequently, the content of the image block buffer is transmitted to a display controller for display on a display device.

Die PPU 200 kann in einem Tisch-Computer, einem tragbaren Computer, einem Tablett-Computer, einem intelligenten Telefon (beispielsweise ein drahtloses Handgerät), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einer elektronischen Handeinrichtung und dergleichen enthalten sein. In einer Ausführungsform ist die PPU 200 auf einem einzigen Halbleitersubstrat ausgebildet. In einer weiteren Ausführungsform ist die PPU 200 in einem System-auf-einem-Chip (SoC) zusammen mit einer oder mehreren anderen Logikeinheiten enthalten, etwa einer CPU eines Computers mit reduziertem Befehlssatz (RISC), einer Speicherverwaltungseinheit (MMU), einem Digital-Analog-Wandler (DAC), und dergleichen. The PPU 200 may be included in a desktop computer, a portable computer, a tablet computer, a smart phone (eg, a wireless handset), a personal digital assistant (PDA), a digital camera, an electronic handset, and the like. In one embodiment, the PPU 200 formed on a single semiconductor substrate. In another embodiment, the PPU 200 in a system-on-a-chip (SoC) along with one or more other logic units, such as a CPU of a reduced instruction set computer (RISC), a memory management unit (MMU), a digital-to-analog converter (DAC), and like.

In einer Ausführungsform kann die PPU 200 in einer Grafikkarte enthalten sein, die eine oder mehrere Speichereinrichtungen 204, etwa GDDR5 SDRAM, enthält. Die Grafikkarte kann ausgebildet sein, mit einem PCIe-Einschub auf einer Hautplatine eines Tisch-Computers in Verbindung zu treten, der beispielsweise einen Nordbrücken-Chipsatz und einen Südbrücken-Chipsatz aufweist. In einer noch weiteren Ausführungsform kann die PPU 200 eine integrierte Graphikverarbeitungseinheit (iGPU) sein, die in dem Chipsatz (d. h. Nordbrücke) der Hauptplatine enthalten ist.In one embodiment, the PPU 200 to be included in a video card containing one or more memory devices 204 , such as GDDR5 SDRAM. The graphics card may be configured to interface with a PCIe slot on a skin board of a desktop computer having, for example, a northbridge chipset and a southbridge chipset. In yet another embodiment, the PPU 200 an integrated graphics processing unit (iGPU) included in the chipset (ie, north bridge) of the motherboard.

5 zeigt ein System-auf-Chip (SoC) 500 mit der PPU 200 aus 2 gemäß einer Ausführungsform. Wie in 5 gezeigt ist, umfasst das SoC 500 eine CPU 550 und eine PPU 200, wie zuvor beschrieben. Das SoC 500 kann ferner einen Systembus 202 aufweisen, der eine Kommunikation zwischen den diversen Komponenten des SoC 500 ermöglicht. Speicheranforderungen, die von der CPU 550 und der PPU 200 erzeugt werden, können über eine System-MMU 590 weitergeleitet werden, die von den mehreren Komponenten des SoC 500 gemeinsam verwendet wird. Das SoC 500 kann ferner eine Speicherschnittstelle 595 aufweisen, die mit einer oder mehrere Speichereinrichtungen 204 verbunden ist. Die Speicherschnittstelle 595 kann beispielsweise eine DRAM-Schnittstelle einrichten. 5 shows a system-on-chip (SoC) 500 with the PPU 200 out 2 according to one embodiment. As in 5 shown includes the SoC 500 a CPU 550 and a PPU 200 , Like previously described. The SoC 500 may also be a system bus 202 exhibit a communication between the various components of the SoC 500 allows. Memory requirements by the CPU 550 and the PPU 200 can be generated via a system MMU 590 be redirected by the several components of the SoC 500 is shared. The SoC 500 may further include a memory interface 595 have, with one or more storage devices 204 connected is. The storage interface 595 For example, you can set up a DRAM interface.

Obwohl dies nicht explizit gezeigt ist, kann das SoC 500 andere Komponenten zusätzlich zu den in 5 gezeigten Komponenten aufweisen. Beispielsweise kann das SoC 500 mehrere PPUs 200 (beispielsweise vier PPUs 200), einen Video-Kodierer/Dekodierer und einen drahtlosen Breitband-Sender/Empfänger sowie andere Komponenten aufweisen. In einer Ausführungsform kann das SoC 500 mit dem Speicher 204 in einer Gehäuse-auf-Gehäuse-(PoP-)Konfiguration enthalten sein.Although not explicitly shown, the SoC 500 other components in addition to those in 5 have shown components. For example, the SoC 500 several PPUs 200 (For example, four PPUs 200 ), a video encoder / decoder, and a broadband wireless transceiver and other components. In one embodiment, the SoC 500 with the memory 204 be contained in a housing-to-housing (PoP) configuration.

6 ist eine konzeptionelle Ansicht einer Grafikverarbeitungs-Pipeline 600, die von der PPU 200 aus 2 gemäß einer Ausführungsform eingerichtet ist. Die Grafikverarbeitungs-Pipeline 600 ist ein abstraktes Flussdiagramm der Verarbeitungsschritte, die eingerichtet sind, um 2D-computererzeugte Bilder aus geometrischen 3D-Daten zu erzeugen. Wie gut bekannt ist, können Pipeline-Architekturen Operationen mit langer Verarbeitungszeit effizienter ausführen, indem die Operation in mehrere Stufen aufgeteilt wird, wobei der Ausgang jeder Stufe mit dem Eingang der nächsten folgenden Stufe verbunden ist. Somit empfängt die Grafikverarbeitungs-Pipeline 600 Eingangsdaten 601, die von einer Stufe zu der nächsten Stufe der Grafikverarbeitungs-Pipeline 600 übertragen werden, um Ausgangsdaten 602 zu erzeugen. In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 600 eine Grafikverarbeitungs-Pipeline repräsentieren, die durch die OpenGL®-API definiert ist. 6 is a conceptual view of a graphics processing pipeline 600 that of the PPU 200 out 2 is arranged according to an embodiment. The graphics processing pipeline 600 Figure 3 is an abstract flowchart of the processing steps configured to generate 2D computer generated images from 3D geometric data. As is well known, pipeline architectures can more efficiently perform long processing time operations by dividing the operation into multiple stages with the output of each stage connected to the input of the next succeeding stage. Thus, the graphics processing pipeline receives 600 input data 601 that move from one stage to the next stage of the graphics processing pipeline 600 be transmitted to output data 602 to create. In one embodiment, the graphics processing pipeline 600 represent a graphics processing pipeline, which is defined by the OpenGL ® API.

Wie in 6 gezeigt ist, umfasst die Grafikverarbeitungs-Pipeline 600 eine Pipeline-Architektur, die eine Anzahl von Stufen beinhaltet. Die Stufen umfassen, ohne einschränkend zu sein, eine Datenvereinigungsstufe 610, eine Vertex-Schattierungsstufe 620, eine Grundform-Vereinigungsstufe 630, eine Geometrie-Schattierungsstufe 640, eine Darstellungsfeld-Skalierungs-, Aussonderungs- und Schneide-(VSCC)Stufe 650, eine Rasterstufe 660, eine Fragmentschattierungsstufe 670 und eine Rasteroperationsstufe 680. In einer Ausführungsform enthalten die Eingangsdaten 601 Befehle, die die Verarbeitungseinheiten so konfigurieren, dass die Stufen der Grafikverarbeitungs-Pipeline 600 und die geometrischen Grundformen (beispielsweise Punkte, Linien, Dreiecke, Quadrate, Dreiecksstreifen oder Fächer, usw.), die von den Stufen zu verarbeiten sind, eingerichtet werden. Die Ausgangsdaten 602 können Pixeldaten (d. h. Farbdaten) aufweisen, die in einen Bildblockpuffer oder in eine andere Art von Oberflächen-Datenstruktur in einem Speicher kopiert werden.As in 6 shown includes the graphics processing pipeline 600 a pipeline architecture that includes a number of stages. The stages include, but are not limited to, a data merging stage 610 , a vertex shading level 620 , a basic form association stage 630 , a geometry shading level 640 , a viewport scaling, screening and cutting (VSCC) step 650 , a raster level 660 , a fragment shading level 670 and a raster operation level 680 , In one embodiment, the input data includes 601 Commands that configure the processing units to control the stages of the graphics processing pipeline 600 and the basic geometric shapes (e.g., points, lines, triangles, squares, triangular stripes or fans, etc.) to be processed by the stages are established. The output data 602 may comprise pixel data (ie, color data) which is copied to a frame buffer or other type of surface data structure in a memory.

Die Datenvereinigungsstufe 610 empfängt die Eingangsdaten 601, die Vertex-Daten für Oberflächen höherer Ordnung, Grundformen oder dergleichen angeben. Die Datenvereinigungsstufe 610 sammelt die Vertex-Daten in einem temporären Speicher oder einer Warteschlange, etwa durch Empfang eines Befehls aus dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher enthält, und durch Auslesen der Vertex-Daten aus dem Puffer. Die Vertex-Daten werden dann an die Vertex-Schattierungsstufe 620 zur Verarbeitung übertragen.The data union level 610 receives the input data 601 specifying vertex data for higher-order surfaces, primitives, or the like. The data union level 610 collects the vertex data in a temporary memory or queue, such as by receiving a command from the host processor containing a pointer to a buffer in memory and reading the vertex data from the buffer. The vertex data is then sent to the vertex shading stage 620 transferred for processing.

Die Vertex-Schattierungsstufe 620 verarbeitet Vertex-Daten durch Ausführen einer Gruppe von Operationen (d. h. eine Vertex-Schattierungseinheit oder ein Vertex-Schattierungsprogramm) einmal für jeden der Eckpunkte. Eckpunkte können beispielsweise als ein 4-Koordinatenvektor (d. h. < x, y, z, w >), die mit einem oder mehreren Vertex-Attributen (beispielsweise Farbe, Texturkoordinaten, Oberflächennormale, usw.) verknüpft sind, angegeben werden. Die Vertex-Schattierungsstufe 620 kann Eigenschaften, etwa Position, Farbe, Texturkoordinaten und dergleichen verarbeiten. Anders ausgedrückt, die Vertex-Schattierungsstufe 620 führt Operationen an den Vertex-Koordinaten oder anderen Vertex-Attributen, die einem Eckpunkt zugeordnet sind, aus. Derartige Operationen beinhalten üblicherweise Beleuchtungsoperationen (d. h. Modifizieren von Farbattributen für einen Eckpunkt) und Transformationsoperationen (d. h. Modifizieren des Koordinatenraums für einen Eckpunkt). Beispielsweise können Eckpunkte unter Verwendung von Koordinaten in einem Objekt-Koordinatenraum angegeben werden, die durch Multiplizieren der Koordinaten mit einer Matrix transformiert werden, die die Koordinaten aus dem Objekt-Koordinatenraum in einen Welt-Raum oder einen normierten-Geräte-Koordinaten-(NCD)Raum überführt. Die Vertex-Schattierungsstufe 620 erzeugt transformierte Vertex-Daten, die der Grundform-Vereinigungsstufe 630 zugeführt werden.The vertex shading level 620 Processes vertex data by performing a group of operations (ie, a vertex shader or a vertex shader) once for each of the vertices. For example, vertices may be represented as a 4-coordinate vector (ie, <x, y, z, w>) associated with one or more vertex attributes ( color, texture coordinates, surface normals, etc.). The vertex shading level 620 can process properties such as position, color, texture coordinates, and the like. In other words, the vertex shading level 620 performs operations on the vertex coordinates or other vertex attributes associated with a vertex. Such operations usually involve lighting operations (ie, modifying color attributes for a vertex) and transform operations (ie, modifying the coordinate space for a vertex). For example, vertices may be specified using coordinates in an object coordinate space that are transformed by multiplying the coordinates by a matrix that converts the coordinates from the object coordinate space to a world space or a normalized device coordinate (NCD). Room transferred. The vertex shading level 620 generates transformed vertex data corresponding to the primitive union stage 630 be supplied.

Die Grundform-Vereinigungsstufe 630 sammelt Eckpunkte, die von der Vertex-Schattierungsstufe 620 ausgegeben werden, und gruppiert die Eckpunkte in geometrischen Grundformen zur Verarbeitung mittels der Geometrie-Schattierungsstufe 640. Beispielsweise kann die Grundformen-Vereinigungsstufe 630 ausgebildet sein, alle drei aufeinanderfolgenden Eckpunkte als eine geometrische Grundform (d. h. ein Dreieck) zur Übertragung zu der Geometrie-Schattierungsstufe 640 zu kopieren. In einigen Ausführungsformen können spezielle Eckpunkte für aufeinanderfolgende geometrische Grundformen wieder verwendet werden (beispielsweise zwei aufeinanderfolgende Dreiecke in einem Dreiecksstreifen können zwei Eckpunkte gemeinsam haben). Die Grundformen-Vereinigungsstufe 630 sendet geometrische Grundformen (d. h. eine Ansammlung zugehöriger Eckpunkte) an die Geometrie-Schattierungsstufe 640.The basic form association stage 630 collects vertices that come from the vertex shading level 620 and group the vertices in basic geometric shapes for processing by the geometry shading stage 640 , For example, the primitive merging stage 630 be formed all three consecutive vertices as a basic geometric shape (ie, a triangle) for transmission to the geometry shading stage 640 to copy. In some embodiments, special vertices may be reused for successive basic geometric shapes (eg, two consecutive triangles in a triangle strip may share two vertices). The Basic Shapes Unification Level 630 sends geometric primitives (ie a collection of associated vertices) to the geometry shading stage 640 ,

Die Geometrie-Schattierungsstufe 640 verarbeitet geometrische Grundformen, indem eine Gruppe von Operationen (d. h. eine Geometrie-Schattierungseinheit oder Programm) an den geometrischen Grundformen ausgeführt wird. Kachelbildungsoperationen können eine oder mehrere geometrische Grundformen aus jeder geometrischen Grundform erzeugen. Anders ausgedrückt, die Geometrie-Schattierungsstufe 640 kann jede geometrische Grundform in ein feineres Raster aus zwei oder mehr geometrischen Grundformen unterteilen, um vom Rest der Grafikverarbeitungs-Pipeline 600 verarbeitet zu werden. Die Geometrie-Schattierungsstufe 640 sendet geometrische Grundformen zu der Darstellungsfeld-SCC-Stufe 650.The geometry shading level 640 processes basic geometric shapes by performing a group of operations (ie, a geometry shader or program) on the basic geometric shapes. Tiling operations can generate one or more basic geometric shapes from any basic geometric shape. In other words, the geometry shading level 640 can divide each basic geometric shape into a finer grid of two or more geometric primitives to get from the rest of the graphics processing pipeline 600 to be processed. The geometry shading level 640 sends geometric primitives to the viewport SCC stage 650 ,

Die Darstellungsfeld-SCC-Stufe 650 für die Skalierung des Darstellungsfeldes führt eine Aussonderung und eine Beschneidung der geometrischen Grundformen aus. Jede Oberfläche, die erzeugt wird, ist mit einer abstrakten Kameraposition verknüpft. Die Kameraposition repräsentiert eine Position eines Betrachters, der auf die Szene schaut, und definiert einen Betrachtungskegel, der die Objekte der Szene umschließt. Der Betrachtungskegel kann eine Betrachtungsebene, eine Rückseiteebene und vier Schneideebenen beinhalten. Eine beliebige geometrische Grundform, die vollständig außerhalb des Betrachtungskegels liegt, kann ausgesondert (d. h. verworfen) werden, da die geometrische Grundform nicht zu der endgültigen erzeugten Szene beiträgt. Eine beliebige geometrische Grundform, die teilweise innerhalb des Betrachtungskegels und teilweise außerhalb des Betrachtungskegels liegt, kann beschnitten werden (d. h. in eine neue geometrische Grundform transformiert werden, die von dem Betrachtungskegel umschlossen ist. Ferner können geometrische Grundformen jeweils oft der Grundlage einer Tiefe des Betrachtungskegels skaliert werden. Alle möglicherweise sichtbaren geometrischen Grundformen werden dann der Rasterstufe 660 zugeleitet.The viewport SCC stage 650 For the scaling of the field of view performs a separation and a truncation of the geometric basic forms. Each surface that is created is linked to an abstract camera position. The camera position represents a position of a viewer looking at the scene and defines a viewing cone that encloses the objects of the scene. The viewing cone may include a viewing plane, a back plane, and four cutting planes. Any geometric primitive lying entirely outside the viewing cone may be discarded (ie discarded) because the basic geometric shape does not contribute to the final generated scene. Any geometric primitive lying partially within the viewing cone and partially outside the viewing cone may be trimmed (ie transformed into a new basic geometric shape enclosed by the viewing cone.) In addition, geometric primitives may each be scaled based on the depth of the viewing cone All possibly visible basic geometric shapes then become the raster level 660 fed.

Die Rasterstufe 660 wandelt die geometrischen 3D-Grundformen in 2D-Fragmente um. Die Rasterstufe 660 kann ausgebildet sein, die Eckpunkte der geometrischen Grundformen zu verwenden, um eine Gruppe aus Ebenengleichungen einzurichten, aus denen diverse Attribute interpoliert werden können. Die Rasterstufe 660 kann ferner eine Abdeckungsmaske für mehrere Pixel berechnen, die angibt, ob eine oder mehrere Abtastpositionen für das Pixel die geometrische Grundform schneiden. In einer Ausführungsform kann auch eine z-Prüfung durchgeführt werden, um zu bestimmen, ob die geometrische Grundform von anderen geometrischen Grundformen umschlossen ist, die bereits in ein Raster eingeteilt worden sind. Die Rasterstufe 660 erzeugt Fragmentdaten (d. h. interpolierte Vertex-Attribute, die einer speziellen Abtastposition für jedes abgedeckte Pixel zugeordnet sind), die zu der Fragmentschattierungsstufe 670 übertragen werden.The grid level 660 converts the geometric 3D basic shapes into 2D fragments. The grid level 660 may be configured to use the vertices of the geometric primitives to set up a set of plane equations from which various attributes can be interpolated. The grid level 660 may further calculate a coverage mask for a plurality of pixels indicating whether one or more scan positions for the pixel intersect the geometric primitive. In one embodiment, a z-check may also be performed to determine if the geometric primitive is enclosed by other geometric primitives that have already been divided into a raster. The grid level 660 generates fragment data (ie, interpolated vertex attributes associated with a particular sample position for each covered pixel) corresponding to the fragment shading level 670 be transmitted.

Die Fragmentschattierungsstufe 670 verarbeitet Fragmentdaten, indem eine Gruppe von Operationen (d. h. eine Fragmentschattierungseinheit oder ein Programm) an jedem der Fragmente ausgeführt wird. Die Fragmentschattierungsstufe 670 kann Pixeldaten (d. h. Farbwerte) für das Fragment erzeugen, etwa durch Ausführen von Beleuchtungsoperationen oder Abtastung von Texturkarten unter Anwendung interpolierter Texturkoordinaten für das Fragment. Die Fragmentschattierungsstufe 670 erzeugt Pixeldaten, die der Rasteroperationsstufe 680 zugeleitet werden.The fragment shading level 670 Processes fragment data by executing a group of operations (ie, a fragment shader or a program) on each of the fragments. The fragment shading level 670 may generate pixel data (ie, color values) for the fragment, such as by performing lighting operations or scanning texture maps using interpolated texture coordinates for the fragment. The fragment shading level 670 generates pixel data corresponding to the raster operation level 680 be forwarded.

Die Rasteroperationsstufe 680 kann diverse Operationen an den Pixeldaten ausführen, etwa die Ausführung von Alpha-Prüfungen, Schablonen-Prüfungen, und kann die Pixeldaten mit anderen Pixeldaten, die anderen dem Pixel gehörenden Fragmenten entsprechen, zusammenführen. Wenn die Rasteroperationsstufe 680 die Verarbeitung der Pixeldaten beendet hat (die Ausgangsdaten 602), können die Pixeldaten in ein Bilderzeugungsziel, etwa einen Bildblockpuffer, einen Farbpuffer, oder dergleichen geschrieben werden. The raster operation level 680 may perform various operations on the pixel data, such as performing alpha checks, template checks, and may merge the pixel data with other pixel data corresponding to other pixels belonging to the pixel. If the raster operation level 680 has finished processing the pixel data (the output data 602 ), the pixel data may be written into an image forming target, such as a frame buffer, a color buffer, or the like.

Zu beachten ist, dass eine oder mehrere weitere Stufen in der Grafikverarbeitungs-Pipeline 600 zusätzlich oder anstelle der einen oder mehreren zuvor beschriebenen Stufen vorhanden sein können. Diverse Implementierungen der abstrakten Grafikverarbeitungs-Pipeline können andere Stufen einrichten. Ferner können eine oder mehrere der zuvor beschriebenen Stufen aus der Grafikverarbeitungs-Pipeline in einigen Ausführungsformen, etwa die Geometrie-Schattierungsstufe 640, weggelassen sein. Es werden auch andere Arten von Grafikverarbeitungs-Pipelines als innerhalb des Schutzbereichs der vorliegenden Offenbarung liegend erachtet. Ferner kann eine jegliche Stufe der Grafikverarbeitungs-Pipeline 600 durch eine oder mehrere spezielle Hardware-Einheiten innerhalb eines Grafik-Prozessors eingerichtet sein, etwa der PPU 200. Andere Stufen der Grafikverarbeitungs-Pipeline 600 können durch programmierbare Hardware-Einheiten, etwa den SM 340 der PPU 200 eingerichtet werden.It should be noted that one or more additional stages in the graphics processing pipeline 600 may be present in addition to or instead of the one or more stages described above. Various implementations of the abstract graphics processing pipeline may implement other stages. Further, in some embodiments, one or more of the previously described stages may be out of the graphics processing pipeline, such as the geometry shading stage 640 be omitted. Other types of graphics processing pipelines are also considered to be within the scope of the present disclosure. Furthermore, any stage of the graphics processing pipeline 600 by one or more special hardware units within a graphics processor, such as the PPU 200 , Other stages of the graphics processing pipeline 600 can by programmable hardware units, such as the SM 340 the PPU 200 be set up.

Die Grafikverarbeitungs-Pipeline 600 kann über eine Anwendung, die von einem Host-Prozessor, etwa eine CPU 550, ausgeführt wird, eingerichtet werden. In einer Ausführungsform kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) einrichten, die diverse Funktionen definiert, die von einer Anwendung verwendet werden können, um die grafischen Daten für die Anzeige zu erzeugen. Der Gerätetreiber ist ein Software-Programm, das mehrere Befehle enthält, die die Arbeitsweise der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die es einem Programmierer ermöglicht, spezialisierte Grafikhardware, etwa die PPU 200 so zu verwenden, dass diese grafische Daten erzeugt, ohne dass der Programmierer den speziellen Befehlssatz für die PPU 200 anwenden muss. Die Anwendung kann einen API-Aufruf enthalten, der an den Gerätetreiber für die PPU 200 weitergereicht wird. Der Gerätetreiber interpretiert den API-Aufruf und führt diverse Operationen aus, um auf den API-Aufruf zu reagieren. In einigen Fällen kann der Gerätetreiber Operationen ausführen, indem Befehle in der CPU 550 ausgeführt werden. In anderen Fällen kann der Gerätetreiber Operationen zumindest teilweise ausführen, indem Operationen in der PPU 200 gestartet werden, wobei eine Eingabe/Ausgabe-Schnittstelle zwischen der CPU 550 und der PPU 200 verwendet wird. In einer Ausführungsform ist der Gerätetreiber ausgebildet, die Grafikverarbeitungs-Pipeline 600 unter Verwendung der Hardware der PPU 200 einzurichten.The graphics processing pipeline 600 can have an application that is powered by a host processor, such as a CPU 550 to be set up. In one embodiment, a device driver may implement an application programming interface (API) that defines various functions that may be used by an application to generate the graphical data for display. The device driver is a software program that contains several commands that govern the operation of the PPU 200 Taxes. The API provides an abstraction for a programmer that allows a programmer specialized graphics hardware, such as the PPU 200 so that it generates graphical data without the programmer having to use the special instruction set for the PPU 200 must apply. The application may include an API call to the device driver for the PPU 200 is passed on. The device driver interprets the API call and performs various operations to respond to the API call. In some cases, the device driver may perform operations by placing commands in the CPU 550 be executed. In other cases, the device driver may perform operations at least partially by performing operations in the PPU 200 be started, with an input / output interface between the CPU 550 and the PPU 200 is used. In one embodiment, the device driver is the graphics processing pipeline 600 using the hardware of the PPU 200 to set up.

Es können diverse Programme in der PPU 200 ausgeführt werden, um die diversen Stufen der Grafikverarbeitungs-Pipeline 600 einzurichten. Beispielsweise kann der Gerätetreiber einen Systemkern in der PPU 200 starten, um die Vertex-Schattierungsstufe 620 in einem SM 340 (oder mehreren SMs 340) auszuführen. Der Gerätetreiber (oder der anfängliche Systemkern, der von der PPU 200 ausgeführt wird) kann ferner andere Systemkerne in der PPU 200 starten, um andere Stufen der Grafikverarbeitungs-Pipeline 600 auszuführen, etwa die Geometrie-Schattierungsstufe 640 und die Fragmentschattierungsstufe 670. Des Weiteren können einige der Stufen der Grafikverarbeitungs-Pipeline 600 in einer festgelegten Hardware-Einheit, etwa einer Rastereinheit oder einer Datenvereinigungseinheit, die in der PPU 200 eingerichtet ist, implementiert werden. Zu beachten ist, dass Ergebnisse aus einem Systemkern durch eine oder mehrere dazwischen liegende Hardware-Einheiten mit festgelegter Funktion verarbeitet werden können, bevor sie durch einen nachfolgenden Systemkern in einem SM 340 verarbeitet werden.There may be various programs in the PPU 200 be executed at the various stages of the graphics processing pipeline 600 to set up. For example, the device driver may have a kernel in the PPU 200 start at the vertex shading level 620 in a SM 340 (or multiple SMs 340 ). The device driver (or the initial kernel used by the PPU 200 is executed) can also other system cores in the PPU 200 start to other stages of the graphics processing pipeline 600 perform, such as the geometry shading level 640 and the fragment shading step 670 , Furthermore, some of the stages of the graphics processing pipeline 600 in a fixed hardware unit, such as a rasterizer unit or a data linker unit, in the PPU 200 is set up to be implemented. Note that results from a kernel may be processed by one or more intervening fixed-function hardware units before passing through a subsequent kernel in an SM 340 are processed.

Steuerung einer AbtastmaskeControl of a scanning mask

7A zeigt eine Grundform 720 gemäß einer Ausführungsform. Wie in 7A gezeigt ist, ist die Grundform 720 mehreren Pixel 710 überlagert. Jedes Pixel 710 kann mehreren Abtastpositionen (die durch die Fadenkreuze angegeben sind) zugeordnet sein. In einer Ausführungsform ist jedes Pixel 710 16 Abtastpositionen zugeordnet. In alternativen Ausführungsformen können andere Anzahlen an Abtastpositionen für jedes Pixel festgelegt werden (beispielsweise 4 Abtastpositionen, 64 Abtastpositionen, usw.). Ferner können die Abtastpositionen gleichmäßig im Verhältnis zu den Grenzen des Pixel 710 beabstandet sein. Alternativ können die Abtastpositionen verschoben sein. Wie in 7A gezeigt ist, bedeckt die Grundform 720 zumindest teilweise (d. h. schneidet) fünf der sechzehn Pixel (Pixel 710(5), 710(6), 710(7), 710(10) und 710(11)). 7A shows a basic form 720 according to one embodiment. As in 7A is shown is the basic form 720 several pixels 710 superimposed. Every pixel 710 can be assigned to multiple sampling positions (indicated by the crosshairs). In one embodiment, each pixel is 710 Assigned 16 sample positions. In alternative embodiments, other numbers of sample positions may be specified for each pixel (eg, 4 sample positions, 64 sample positions, etc.). Furthermore, the sampling positions may be even relative to the boundaries of the pixel 710 be spaced. Alternatively, the scanning positions may be shifted. As in 7A is shown, covers the basic shape 720 at least partially (ie, intersects) five of the sixteen pixels (pixels 710 (5) . 710 (6) . 710 (7) . 710 (10) and 710 (11) ).

In einer Ausführungsform umfasst die Rastereinheit 325 Hardware mit festgelegter Funktion zur Einrichtung der Rasterstufe 660 der Grafikverarbeitungs-Pipeline 600. Während der Rastereinteilung empfängt die Rastereinheit 325 Vertex-Daten, die jede Grundform definieren. Die Vertex-Daten können drei Eckpunkte zusammen mit zugehörigen Vertex-Attributen enthalten. Beispielsweise kann jeder Eckpunkt der Grundform 720 durch einen Vier-Komponenten-Vektor angegeben werden, der eine x-Koordinate, eine y-Koordinate, eine z-Koordinate und eine w-Koordinate angibt, die eine Position des Eckpunkts in homogenen Koordinaten repräsentieren. Jeder Eckpunkt kann ferner mit einem Farbwert, Texturkoordinaten (beispielsweise eine s-Koordinate und eine c-Koordinate), einem Normalenvektor und dergleichen verknüpft sein.In one embodiment, the grid unit comprises 325 Hardware with defined function to set up the screen level 660 the graphics processing pipeline 600 , During grid division, the grid unit receives 325 Vertex data that defines each basic form. The vertex data may include three vertices along with associated vertex attributes. For example, each vertex of the basic shape 720 are given by a four-component vector having an x-coordinate, a y-coordinate, a z-coordinate and indicates a w coordinate representing a position of the vertex in homogeneous coordinates. Each vertex may be further associated with a color value, texture coordinates (eg, an s-coordinate and a c-coordinate), a normal vector, and the like.

Die Rastereinheit 325 kann Daten für alle drei Eckpunkte der Grundform 720 empfangen und kann die Vertex-Daten verwenden, um Kantengleichungen für die Grundform aufzustellen. Die Rastereinheit 325 verwendet die Kantengleichungen, um zu bestimmen, welche Pixel 710 die Grundform schneiden. Für jedes schneidende Pixel 710 kann die Rastereinheit ein Fragment erzeugen, das von einer Fragmentschattierungseinheit während der Fragmentschattierungsstufe 670 der Grafikverarbeitungs-Pipeline 600 zu verarbeiten ist. Das Fragment kann einen interpolierten z-Wert (Tiefe) für das Fragment, interpolierte Werte für jedes der Vertex-Attribute und die Abdeckungsinformation enthalten, die angibt, welche Abtastpositionen, die zu dem Pixel 710 gehören, von der Grundform 720 abgedeckt werden.The grid unit 325 can data for all three vertices of the basic shape 720 and can use the vertex data to construct edge equations for the primitive. The grid unit 325 uses the edge equations to determine which pixels 710 to cut the basic shape. For every cutting pixel 710 For example, the rasterizer may generate a fragment from a fragment shader unit during the fragment shading stage 670 the graphics processing pipeline 600 is to be processed. The fragment may include an interpolated z-value (depth) for the fragment, interpolated values for each of the vertex attributes, and the coverage information indicating which sample locations that belong to the pixel 710 belong, of the basic form 720 be covered.

7B zeigt die Abdeckungsinformation 700 für ein Fragment gemäß einer Ausführungsform. Obwohl die Abdeckungsinformation 700 zu anschaulichen Zwecken als ein zweidimensionales Array gezeigt ist, das einer relativen Position der Abtastpositionen für ein Pixel 710 entspricht, ist im Allgemeinen die Abdeckungsinformation 700 ein N-Bit-Wert, wobei jedes Bit einer speziellen Abtastposition des Pixel 710 entspricht. Die Abdeckungsinformation 700 kann während einer Rasterstufe 660 der Grafikverarbeitungs-Pipeline 600 erzeugt werden und kann alternativ als Raster-Abdeckungsinformation bezeichnet werden. 7B shows the coverage information 700 for a fragment according to an embodiment. Although the cover information 700 for illustrative purposes is shown as a two-dimensional array, that is a relative position of the sample positions for a pixel 710 is generally the coverage information 700 an N-bit value, each bit of a particular sample position of the pixel 710 equivalent. The cover information 700 can during a raster stage 660 the graphics processing pipeline 600 and may alternatively be referred to as raster coverage information.

Wie in 7B gezeigt ist, würde ein Fragment, das dem Pixel 710(5) aus 7A entspricht, die Abdeckungsinformation 700 enthalten. Die Abdeckungsinformation 700 enthält 16 Bits. In der Abdeckungsinformation 700 gibt ein Wert „0” an, dass eine Abtastposition von der Grundform 720 nicht bedeckt ist, und ein Wert „1” gibt an, dass eine Abtastposition von der Grundform 720 abgedeckt ist. Da die Grundform 720 vier Abtastpositionen in dem Pixel 710(5) abdeckt, ist die Abdeckungsinformation 700 als 0b0000000001110001 gegeben. Das Fragment, das die Abdeckungsinformation 700 enthält, kann in einem Speicher, etwa einer Registerdatei 420 gespeichert werden, die zu einem SM 340 gehört, der ausgebildet ist, eine Fragmentschattierung auszuführen, wenn die Ausgabe der Rasterstufe 660 unmittelbar verwertet wird, oder die Ausgabe der Rasterstufe 660 kann in dem Speicher 204 für die spätere Verarbeitung gespeichert werden.As in 7B Shown would be a fragment that is the pixel 710 (5) out 7A corresponds to the coverage information 700 contain. The cover information 700 contains 16 bits. In the cover information 700 indicates a value "0" that a sample position of the basic shape 720 is not covered, and a value "1" indicates that a sample position is of the basic shape 720 is covered. Because the basic form 720 four sample positions in the pixel 710 (5) is the cover information 700 given as 0b0000000001110001. The fragment containing the cover information 700 can contain in a memory, such as a register file 420 to be saved, which become a SM 340 which is adapted to perform a fragment shading when the output of the raster level 660 is used immediately, or the output of the raster level 660 can in the store 204 be stored for later processing.

8 zeigt einen Vorgang zur Steuerung einer Abtastmaske aus einem Fragmentschattierungsprogramm gemäß einer Ausführungsform. Wie in 8 gezeigt ist, erzeugt eine Rastereinheit (beispielsweise Rastereinheit 325) ein oder mehrere Fragmente für eine Grundform, etwa die Grundform 720. Eine Fragmentschattierungseinheit, die von einem oder mehreren SMs 340 ausgeführt wird, ist ausgebildet, die Fragmente zu verarbeiten. Die Daten für das Fragment werden an einen speziellen SM 340 weitergeleitet, der zu Verarbeitung dieses Fragments ausgebildet ist. Die Daten beinhalten die Abdeckungsinformation 700, die während der Rasterstufe 660 der Grafikverarbeitungs-Pipeline 600 erzeugt wurde. In einer Ausführungsform wird die Abdeckungsinformation 700 auch der ROP 350 zugeleitet, die ausgebildet ist, die Ausgabe der Fragmentschattierungseinheit mit Werten zu mischen, die in dem Bildblockpuffer gespeichert sind, um einen endgültigen Wert für jedes Pixel zu erzeugen. 8th FIG. 12 shows a process for controlling a scan mask from a fragment shader program according to one embodiment. FIG. As in 8th is shown, generates a raster unit (for example, raster unit 325 ) One or more fragments for a basic form, such as the basic form 720 , A fragment shader that is owned by one or more SMs 340 is executed, is configured to process the fragments. The data for the fragment will be sent to a special SM 340 forwarded, which is designed to process this fragment. The data includes the coverage information 700 that during the grid step 660 the graphics processing pipeline 600 was generated. In one embodiment, the coverage information becomes 700 also the ROP 350 adapted to mix the output of the fragment shading unit with values stored in the image block buffer to produce a final value for each pixel.

Während der Rasteroperationsstufe 680 der Grafikverarbeitungs-Pipeline 600 kann die ROP 350 die Abdeckungsinformation 700, die während der Rasterstufe 660 der Grafikverarbeitungs-Pipeline 600 erzeugt wurde, durch die Abtastmaske ersetzen, die während der Fragmentschattierungsstufe 670 der Grafikverarbeitungs-Pipeline 600 erzeugt wurde. In einer Ausführungsform ist die ROP 350 eingerichtet, die Abdeckungsinformation 700 für ein Fragment erneut zu initialisieren, um anzugeben, dass die Abtastpositionen, die zu dem entsprechenden Pixel gehören, vollständig abgedeckt sind. Anders ausgedrückt, die an die ROP 350 übertragene Abdeckungsinformation 700 wird mit 0xFF (d. h. alle „1”) überschrieben. Eine Bit-weise durchgeführte UND-Operation wird dann ausgeführt, um die modifizierte Abdeckungsinformation 700 mit der durch die Fragmentschattierungseinheit erzeugten Abtastmaske zu kombinieren. Tatsächlich wird die von der Fragmentschattierungseinheit erzeugte Abtastmaske der ROP 350 zugeleitet und ersetzt die Abdeckungsinformation 700, die während der Rasterstufe 660 erzeugt wurde. Es kann jede beliebige Abtastposition in dem Pixel durch die Fragmentschattierungseinheit so gesteuert werden, dass es als abgedeckt oder unabgedeckt angegeben wird. Wichtig dabei ist, dass jede beliebige Abtastposition von der Fragmentschattierungseinheit unabhängig von der Abdeckungsinformation 700 gesteuert werden kann. Damit kann die Fragmentschattierungseinheit die Abtastmaske während der Schattierung beschreiben, um damit die Funktion der ROP 350 während der Rasteroperationsstufe 680 der Grafikverarbeitungs-Pipeline 600 zu steuern.During the raster operation stage 680 the graphics processing pipeline 600 can the ROP 350 the coverage information 700 that during the grid step 660 the graphics processing pipeline 600 was replaced by the scan mask during the fragment shading stage 670 the graphics processing pipeline 600 was generated. In one embodiment, the ROP is 350 set up, the cover information 700 for a fragment to re-initialize to indicate that the sample positions associated with the corresponding pixel are completely covered. In other words, to the ROP 350 transmitted coverage information 700 is overwritten with 0xFF (ie all "1"). A bitwise AND operation is then performed to update the modified coverage information 700 with the sampling mask generated by the fragment shading unit. In fact, the sampling mask generated by the fragment shading unit becomes the ROP 350 and replaces the coverage information 700 that during the grid step 660 was generated. Any sample position in the pixel may be controlled by the fragment shader unit to be considered covered or uncovered. Importantly, any sample position from the fragment shading unit is independent of the coverage information 700 can be controlled. Thus, the fragment shading unit can describe the sample mask during shading to thereby understand the function of the ROP 350 during the raster operation stage 680 the graphics processing pipeline 600 to control.

Zu beachten ist, dass die hierin beschriebene PPU 200 lediglich eine anschauliche Architektur zum Einrichten der Steuerung einer Abtastmaske durch eine Fragmentschattierungseinheit ist. In anderen Ausführungsformen kann beispielsweise die Rasterstufe 660 der Grafikverarbeitungs-Pipeline 600 in einer programmierbaren Einheit, etwa dem SM 340 anstelle einer speziellen Hardware-Einheit, etwa der Rastereinheit 325, eingerichtet werden. Andere Arten von Architekturen, die eine Überdeckungsinformation während der Rastereinteilung einer Grundform erzeugen und anschließend die Abdeckungsinformation durch eine während der Schattierung erzeugte Abtastmaske ersetzen, werden ebenfalls als innerhalb des Schutzbereichs der vorliegenden Offenbarung liegend erachtet.It should be noted that the PPU described herein 200 is merely an illustrative architecture for establishing control of a scanning mask by a fragment shading unit. For example, in other embodiments, the raster level 660 the graphics processing pipeline 600 in a programmable unit, such as the SM 340 instead of a special hardware unit, such as the grid unit 325 to be set up. Other types of architectures that generate coverage information during rasterization of a primitive and then replace the coverage information with a scan mask generated during shading are also considered to be within the scope of the present disclosure.

In einer Ausführungsform ist die PPU 200 kommunizierend mit einem Host-Prozessor, etwa einer CPU, verbunden. Der Host-Prozessor kann mit einem Speicher verbunden sein, der eine Grafikanwendung, ein Betriebssystem, einen Gerätetreiber für die PPU 200, und dergleichen speichert. Der Gerätetreiber kann eine grafische API, etwa die OpenGL-API einrichten. Um die Funktion zum Überschreiben von Abdeckungsinformation aus der Fragmentschattierungseinheit einzurichten, kann der Gerätetreiber auch eine Erweiterung an der grafischen API implementieren. Die Grafikanwendung kann einen Befehl enthalten, der die Erweiterung der grafischen API verwendet, um die PPU 200 so zu konfigurieren, dass die Abtastmaske mittels der Fragmentschattierungseinheit gesteuert wird.In one embodiment, the PPU 200 communicatively connected to a host processor, such as a CPU. The host processor may be connected to a memory including a graphics application, an operating system, a device driver for the PPU 200 , and the like stores. The device driver can set up a graphical API, such as the OpenGL API. To set up the override coverage information function from the fragment shading unit, the device driver may also implement an extension to the graphical API. The graphics application may include a command that uses the graphical API extension to the PPU 200 to configure so that the scanning mask is controlled by the fragment shading unit.

Beispielsweise kann eine API-Erweiterung an der OpenGL®-Spezifikation, die als NV_sample_mask_override_coverage bezeichnet wird, definiert und von dem Gerätetreiber für die PPU 200 eingerichtet werden. Die Erweiterung erlaubt es der Fragmentschattierungseinheit zu steuern, ob das gl_SampleMask-Ausgangs-Array Abtastungen ermöglichen kann, die nicht von der Grundform abgedeckt sind, oder die die frühen Tiefen/Schablonen-Prüfungen nicht erfolgreich bestanden haben, um anzugeben, dass die Abtastung von der Grundform nicht abgedeckt wurde. Die Funktion kann aktiviert werden, indem das gl_SampleMask-Ausgangs-Array mit einer „override_coverage”-Layout-Qualifizierung in einem Befehl in der Grafikanwendung neu deklariert wird, wie folgt:
Layout (override_coverage) out int gl_SampleMask [];
For example, an API extension to the OpenGL ® specification, which is referred to as NV_sample_mask_override_coverage, and defined by the device driver for the PPU 200 be set up. The extension allows the fragment shading unit to control whether the gl_SampleMask output array can enable samples that are not covered by the basic form, or that have failed the early depth / template checks to indicate that the sample is from the sample Basic form was not covered. The function can be activated by redecluding the gl_SampleMask output array with an override_coverage layout qualification in a command in the graphics application, as follows:
Layout (override_coverage) out int gl_SampleMask [];

Sobald die gl_SampleMask-Ausgangs-Array-Variable neu deklariert worden ist, kann dann die Fragmentschattierungseinheit die Abdeckungsinformation außer Kraft setzen, indem ein Wert in die gl_SampleMask-Variable für jedes Fragment geschrieben wird. Wenn die Fragmentschattierungseinheit nicht explizit einen Wert in die gl_SampleMask-Variable schreibt, dann ist die Abtastmaske nicht definiert und die Abdeckungsinformation wird durch die ROP 350 nicht modifiziert.Once the gl_SampleMask output array variable has been re-declared, then the fragment shader unit can override the coverage information by writing a value to the gl_SampleMask variable for each fragment. If the fragment shader does not explicitly write a value to the gl_SampleMask variable, then the sample mask is undefined and the coverage information is passed through the ROP 350 not modified.

Wenn jedoch die Fragmentschattierungseinheit ein spezielles Bit in dem gl_SampleMask-Ausgangs-Array mit 0 beschreibt, dann wird die entsprechende Abtastposition als nicht abgedeckt behandelt, oder wenn die Fragmentschattierungseinheit ein spezielles Bit in dem gl_SampleMask-Ausgangs-Array mit 1 beschreibt, dann wird die entsprechende Abtastposition als abgedeckt behandelt. Die ROP 350 ersetzt dann die Abdeckungsinformation durch die Abtastmaske, die in dem gl_SampleMask-Ausgangs-Array spezifiziert ist. Wenn die Grafikanwendung das gl_SampleMask-Ausgangs-Array unter Anwendung der override_coverage-Layout-Qualifizierung nicht deklariert, dann wird die ROP 350 konfiguriert, um eine Bit-weise erfolgende UND-Operation an der Abdeckungsinformation und dem Wert auszuführen, der in dem gl_SampleMask-Ausgangs-Array gespeichert ist, wenn der Wert in das gl_SampleMask-Ausgangs-Array geschrieben wird, während das Fragment schattiert wird, wie es zuvor durch die OpenGL®-Spezifikation angegeben ist.However, if the fragment shader describes a particular bit in the gl_SampleMask output array with 0, then the corresponding sample position is treated as uncovered, or if the fragment shader describes a particular bit in the gl_SampleMask output array of 1, then the corresponding one Scan position treated as covered. The ROP 350 then replaces the coverage information with the scan mask specified in the gl_SampleMask output array. If the graphics application does not declare the gl_SampleMask output array using the override_coverage layout qualification, then the ROP becomes 350 configured to perform a bitwise AND operation on the coverage information and the value stored in the gl_SampleMask output array when the value is written to the gl_SampleMask output array while the fragment is shaded, such as previously specified by the OpenGL® specification.

In anderen Ausführungsformen kann die NV_sample_mask_override_coverage-Erweiterung an der OpenGL®-API für Architekturen, die sich von der PPU 200 unterscheiden, durch andere Gerätetreiber eingerichtet werden. In noch anderen Ausführungsformen kann eine Erweiterung mit ähnlicher Funktion für andere grafische APIs, etwa der Direct3D-API, definiert werden.In other embodiments, the NV_sample_mask_override_coverage extension to the OpenGL ® API for architectures that from the PPU 200 differ, be set up by other device drivers. In still other embodiments, a similar function extension may be defined for other graphical APIs, such as the Direct3D API.

Zu beachten ist, dass die Fähigkeit zum Ersetzen der Abdeckungsinformation 700 für einen beliebigen Fragmentschattierungsalgorithmus oder eine Anwendung aktiviert werden kann, und nicht auf eine TIR-Anwendung beschränkt ist. Insbesondere ermöglicht die Bereitstellung der Möglichkeit, dass die Abdeckungsinformation 700 durch eine durch die Fragmentschattierungseinheit erzeugte Abtastmaske ersetzt wird, dass eine Anwendung Abtastungen „einschaltet”, die ursprünglich nicht von der Grundform abgedeckt wurden. Ferner ist zu beachten, dass ein Strang einer Fragmentschattierungseinheit, der eine Instanz der Fragmentschattierungseinheit ist, die für ein spezielles Fragment ausgeführt wird, lediglich die Abtastungen in einem entsprechenden Pixel beeinflusst. Der Strang der Fragmentschattierungseinheit kann Abtastungen in anderen Pixel nicht einschalten, und es können auch keine neuen Fragmente erzeugt werden. Wenn ferner eine Hybrid-Bildfehlerbehebung mit mehr als einem einzelnen Durchlauf der Fragmentschattierungseinheit angewendet wird, kann der Strang der Fragmentschattierungseinheit lediglich Abtastungen, die diesem Durchlauf entsprechen, einschalten.Note that the ability to replace the coverage information 700 for any fragment shading algorithm or application, and is not limited to a TIR application. In particular, providing the possibility that the cover information 700 is replaced by a scan mask generated by the fragment shading unit, that an application "turns on" samples that were not originally covered by the basic form. Further, note that a thread of a fragment shading unit, which is an instance of the fragment shading unit that is executed for a particular fragment, only affects the scans in a corresponding pixel. The strand of the fragment shading unit can not turn on samples in other pixels, and no new fragments can be generated. Further, if a hybrid image defect recovery is applied with more than a single pass of the fragment shader, the fragment shader unit strand may only turn on samples corresponding to that run.

Im hierin verwendeten Sinne bezeichnet ein Fragmentschattierungsprogramm-Strang eine spezielle Instanz des Fragmentschattierungsprogramms, das einen Satz aus Fragmentdaten, die zu einem einzelnen Pixel gehören, das von einer speziellen Grundform abgedeckt wird, ausgeführt wird. Beispielsweise können 16 Kerne 450 eines SM 340 ausgebildet sein, 16 Fragmentschattierungsprogramm-Stränge parallel auszuführen, wobei jeder Kern 450 einem der 16 Pixel einer Ziel-Bilderzeugungsoberfläche zugeordnet ist. Wenn eine Grundform in ein Raster eingeteilt wird, wird jeder Kern, der einem Pixel zugeordnet ist, das die Grundform nicht schneidet, deaktiviert. Beispielsweise können 16 Kerne 450 eines SM 340, die zum Ausführen einer Fragmentschattierungseinheit eingerichtet sind, den 16 Pixel 710 entsprechen, die in 7A gezeigt sind. Während der Schattierung sind gegebenenfalls nur fünf Kerne 450 aktiviert (und 11 Kerne sind deaktiviert), wenn die fünf Fragmente verarbeitet werden, die zu der Grundform 720 gehören. Jeder der fünf aktiven Kerne kann einen einzelnen Fragmentschattierungsprogramm-Strang ausführen, der den Fragmenten jedes der fünf Pixel 710 entspricht, die von der Grundform 720 geschnitten werden.As used herein, a fragment shader program string designates a particular instance of the fragment shader program that executes a set of fragment data pertaining to a single pixel covered by a particular primitive form. For example, 16 cores 450 a SM 340 be configured to execute 16 fragment shader programs in parallel, each core 450 associated with one of the 16 pixels of a target imaging surface. When a primitive is divided into a raster, any kernel associated with a pixel that does not intersect the primitive is disabled. For example, 16 cores 450 a SM 340 configured to execute a fragment shading unit, the 16 pixels 710 match that in 7A are shown. While shading may be only five cores 450 activated (and 11 cores are disabled) when the five fragments are processed, which are the basic form 720 belong. Each of the five active cores can execute a single fragment shader thread, the fragments of each of the five pixels 710 corresponds to that of the basic form 720 get cut.

In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 600 eine Tiefen-Prüfung (d. h. Z-Test) als Möglichkeit enthalten, um Grundformen auszusondern, die vollständig von anderen Grundformen abgedeckt sind, um die Anzahl von Fragmenten, die vollständig schattiert werden, zu verringern. Typischerweise erfolgt die Beschreibung des Tiefen-Puffers für gewöhnlich nach der Schattierung und daher kann die modifizierte Abdeckungsinformation, die die von der Fragmentschattierungseinheit erzeugte Abtastmaske wiedergibt, verwendet werden, um Tiefen-Werte in den Tiefen-Puffer zu schreiben. Jedoch ist es weiterhin möglich, einen früheren konservativen Tiefen-Test (d. h. Zcull) vor der Schattierung (d. h. bevor die Fragmentschattierungseinheit eine Abtastmaske erzeugt hat, die zur Modifizierung der Abdeckungsinformation verwendet wird) auszuführen. Wenn eine Früh-z-Prüfung aktiviert ist, ist es notwendig, jedes Pixel als vollständig abgedeckt zu behandeln, wenn der Tiefenbereich (z-Skala) für eine Grundform berechnet wird. Anders ausgedrückt, da die Fragmentschattierungseinheit Abtastungen „einschalten” kann, die nicht von der Grundform während der Rastereinteilung abgedeckt sind, sollte man Vorsicht walten lassen dahingehend, dass ein konservativer Wert für die z-Skala während der Früh-z-Prüfung verwendet wird, um sicherzustellen, dass ein Fragment nicht vor der Schattierung ausgesondert wird, wenn eine nicht abgedeckte Abtastung in der Grundform sichtbar sein könnte, auf der Grundlage der Werte, die in den Tiefen-Puffer gespeichert sind, wenn die Fragmentschattierungseinheit diese Abtastung von nicht abgedeckt zu abgedeckt ändert. Daher ist es notwendig, ein z-pro-Abschnitt (d. h., z-Werte an den Schnittpunkt zwischen Dreiecksrand/Pixelrand) oder die ursprüngliche z-Skala der Grundform nicht zu verwenden, wenn eine Früh-z-Prüfung ausgeführt wird.In one embodiment, the graphics processing pipeline 600 include a depth test (ie, Z-test) as a way to weed out basic shapes that are completely covered by other basic shapes to reduce the number of fragments that are completely shaded. Typically, the description of the depth buffer is usually done after shading and, therefore, the modified coverage information representing the scan mask generated by the fragment shading unit can be used to write depth values into the depth buffer. However, it is still possible to perform an earlier conservative depth test (ie, Zcull) before shading (ie, before the fragment shading unit has generated a scan mask used to modify the coverage information). When an early z check is enabled, it is necessary to treat each pixel as fully covered when computing the depth range (z-scale) for a primitive shape. In other words, since the fragment shading unit may "turn on" samples which are not covered by the basic form during the rasterization, care should be taken to use a conservative value for the z-scale during the early-z test ensure that a fragment is not discarded before shading if an uncovered sample could be plain in the base form, based on the values stored in the depth buffer when the fragment shading unit changes that sample from uncovered to covered , Therefore, it is necessary not to use a z-pro section (ie, z-values at the intersection of triangle edge / pixel edge) or the original z-scale of the basic shape when performing an early-z check.

Eine Pfaderzeugung ist eine Anwendung, in der die Steuerung einer Abtastmaske durch die Fragmentschattierungseinheit verwendet werden kann. Die Pfaderzeugung bezeichnet eine Art der 2D-Grafikerzeugung. Bei der Pfaderzeugung wird eine Szene als eine Sequenz aus Umrissen unabhängig von der Bildschirmauflösung angegeben, wobei die Umrisse als Pfade bezeichnet werden, die gefüllt oder als Striche verbleiben (d. h. ungefüllt) können. Die Pfade können als gleich bleibende Farben, lineare oder radiale Gradienten oder Bilder gezeichnet werden. Die Pfaderzeugung erzeugt Bilder, die unabhängig von der Bildschirmauflösung skaliert werden können. Ein Beispiel der Anwendung einer Fragmentschattierungseinheit zur Steuerung einer Abtastmaske während der Pfaderzeugung besteht darin, die Abdeckung einer Abtastung auf eine Gruppe von Abtastungen in dem Pixel zu verschmieren, wodurch bewirkt wird, dass die Gruppe der Abtastungen so behandelt wird, als ob diese eine einzige Abtastposition seien.Path generation is an application in which control of a scanning mask by the fragment shading unit can be used. Path generation refers to a type of 2D graphics generation. Path creation specifies a scene as a sequence of outlines, regardless of the screen resolution, and calls the outlines as paths that can be filled or left as strokes (that is, unfilled). The paths can be drawn as consistent colors, linear or radial gradients or images. Path generation generates images that can be scaled independently of the screen resolution. An example of the use of a fragment shader to control a scan mask during path generation is to blur the coverage of a scan on a group of scans in the pixel, causing the group of scans to be treated as if it were a single scan position are.

Farbpuffer mit mehreren Abtastungen sind eine weitere Anwendung, in der eine Steuerung einer Abtastmaske durch die Fragmentschattierungseinheit angewendet werden kann. Bildfehlerbehebung bezeichnet eine Vielzahl von Techniken zur Reduzierung von Bildfehlern, die durch die Abtastung von Hochfrequenzdaten bei begrenzter Auflösung hervorgerufen werden. Eine Technik, das heißt Bildfehlerbehebung mit mehreren Abtastungen (MSAA) bezeichnet eine Implementierung, in der eine Fragmentschattierungseinheit einmal pro Pixel ausgeführt wird (beispielsweise für eine einzige Abtastposition in der Mitte des Pixels), wobei aber Tiefen- und Schablonenwerte für jede Abtastposition in dem Pixel berechnet werden. In MSAA wird ein einzelner Farbwert mit dem Wert in einem Farbpuffer auf der Grundlage der Abdeckungsinformation für ein Fragment vereinigt. In einer weiteren Technik bezeichnet eine Bildfehlerbehebung einer vollen Szene (FSAA) oder eine Überabtastung eine Implementierung, in der ein Bild mit einer höheren Auflösung erzeugt wird und anschließend abwärts-abgetastet wird, um das endgültige Bild zu erzeugen. Ein Farbwert kann für jede Abtastposition berechnet und mit Werten vereinigt werden, die in einem Farbpuffer mit mehreren Abtastungen gespeichert sind. Nachdem die vollständige Szene schattiert ist, kann der Farbpuffer gefiltert werden, um einen endgültigen Farbwert für jedes Pixel zu erzeugen.Multi-scan color buffers are another application in which control of a scan mask by the fragment shader unit can be used. Image defect elimination refers to a variety of techniques for reducing image aberrations caused by the sampling of high frequency data at limited resolution. One technique, MSAA, refers to an implementation in which a fragment shading unit is executed once per pixel (for example, for a single sample position in the center of the pixel), but with depth and template values for each sample position in the pixel be calculated. In MSAA, a single color value is merged with the value in a color buffer based on the coverage information for a fragment. In another technique, a full scene (FSAA) or oversampling correction is an implementation in which an image is generated at a higher resolution and then down-sampled to produce the final image. A color value can be calculated for each sample position and combined with values stored in a multi-sample color buffer. After the entire scene is shaded, the color buffer can be filtered to produce a final color value for each pixel.

Wenn Farbpuffer mit mehreren Abtastungen in einem Bilderzeugungsalgorithmus verwendet werden, entspricht jeder Abschnitt in dem Farbpuffer mit mehreren Abtastungen einer speziellen Abtastposition (oder einer Teilgruppe von Abtastpositionen) für ein spezielles Pixel. Beispielsweise kann der Farbpuffer mit mehreren Abtastungen vier Abschnitte pro Pixel enthalten, wobei jeder der vier Abschnitte einer anderen Abtastposition in dem Pixel entspricht. Ein Farbwert kann für jede der Abtastpositionen, die von der Grundform abgedeckt ist, erzeugt und in dem Farbpuffer mit den mehreren Abtastungen gespeichert werden. Daher wird die Abdeckungsinformation 700 verwendet, um zu bestimmen, welche Abschnitte in dem Farbpuffer überschrieben oder mit dem Farbwert gemischt werden sollten, der von der Fragmentschattierungseinheit ausgegeben wird. Bei konventionellen Techniken können Daten in dem Farbpuffer mit mehreren Abtastungen lediglich in Abschnitte des Farbpuffers mit mehreren Abtastungen geschrieben werden, die von der Grundform bedeckt sind. Wenn im Gegensatz dazu die von der Fragmentschattierungseinheit erzeugte Abtastmaske verwendet wird, um die Abdeckungsinformation 700, die während der Rasterstufe 660 erzeugt wurde, zu ersetzen, dann kann der Farbpuffer mit mehreren Abtastungen als eine allgemeinere Datenstruktur behandelt werden. Insbesondere kann die Fragmentschattierungseinheit verwendet werden, eine Abtastmaske zuschreiben, die angibt, welcher Abschnitt (oder Abschnitte) des Farbpuffers dem von der Fragmentschattierungseinheit ausgegebenen Farbwert entsprechen. Der Farbpuffer mit mehreren Abtastungen kann dann als ein Array an Abschnitten verwendet werden, in die eine beliebige Gruppe aus Indizes geschrieben werden kann, die durch die Fragmentschattierungseinheit ausgewählt sind. Der Farbpuffer mit mehreren Abtastungen kann dann gefiltert werden, um einen einzigen Wert jedes Pixels in dem erzeugten Bild zu erzeugen, oder der Farbpuffer mit mehreren Abtastungen kann von einem anderen Fragmentschattierungsprogramm in einem zweiten Durchlauf verarbeitet werden, in welchem die Daten in dem Farbpuffer mit ihren Abtastungen in einer Weise verarbeitet werden, die durch das Programm festgelegt wird.When multi-sample color buffers are used in an image generation algorithm, each section in the multi-sample color buffer corresponds to a particular sample position (or subset of sample positions) for a particular pixel. For example, the multi-sample color buffer may contain four sections per pixel, each of the four sections corresponding to a different sample position in the pixel. A color value may be used for each of the sample positions is covered by the basic form, generated and stored in the color buffer with the multiple samples. Therefore, the coverage information becomes 700 is used to determine which portions in the color buffer should be overwritten or blended with the color value output by the fragment shader unit. In conventional techniques, data in the multi-sample color buffer can only be written to portions of the multi-sample color buffer which are covered by the basic form. In contrast, when the scanning mask generated by the fragment shading unit is used, the coverage information 700 that during the grid step 660 to replace, then the multi-sample color buffer may be treated as a more general data structure. In particular, the fragment shading unit may be used to attribute a scanning mask indicating which portion (or portions) of the color buffer correspond to the color value output by the fragment shading unit. The multiscanned color buffer may then be used as an array at portions into which any group of indices selected by the fragment shader unit may be written. The multi-sample color buffer may then be filtered to produce a single value of each pixel in the generated image, or the multi-sample color buffer may be processed by another fragment shader in a second pass in which the data in the color buffer matches its color buffer Samples are processed in a manner determined by the program.

In einer Ausführungsform wird ein einziger Farbwert durch die Fragmentschattierungseinheit für jedes Fragment erzeugt. Der einzelne Farbwert kann dann den Wert, der in jedem Abschnitt des Farbpuffers mit mehreren Abtastungen gespeichert ist, der durch die Abdeckungsinformation angegeben ist, überschreiben oder mit dem Wert gemischt werden. Anders ausgedrückt, es kann eine andere Farbe für jede Abtastposition auf der Grundlage von mehreren Fragmenten gespeichert werden, die mit mehreren Grundformen verknüpft sind, die die Abtastpositionen für ein Pixel abdecken, selbst wenn eine einzige Farbe über das gesamte Pixel für ein spezielles Fragment erzeugt ist. In einer weiteren Ausführungsform können unterschiedliche Farbwerte für jede spezielle Abtastposition erzeugt werden. Beispielsweise können Texturkoordinaten für jede Abtastposition während der Rastereinteilung erzeugt werden. Mehrere Fragmentschattierungsprogramm-Stränge werden dann ausgeführt, wobei jeder Fragmentschattierungsprogramm-Strang einer speziellen Abtastposition zugeordnet ist. Jeder Fragmentschattierungsprogramm-Strang tastet dann einen Farbwert aus einer Texturkarte auf der Grundlage der Texturkoordinaten für diese Abtastposition ab. Schließlich werden die resultierenden Farbwerte in dem entsprechenden Abschnitt in dem Farbpuffer mit mehreren Abtastungen gespeichert.In one embodiment, a single color value is generated by the fragment shader unit for each fragment. The single color value may then overwrite or be mixed with the value stored in each section of the multi-sample color buffer indicated by the coverage information. In other words, another color may be stored for each scan position based on multiple fragments associated with multiple primitives that cover the scan positions for a pixel, even if a single color is created over the entire pixel for a particular fragment , In another embodiment, different color values may be generated for each particular sample position. For example, texture coordinates for each sample position may be generated during the rasterization. Multiple fragment shader threads are then executed, each fragment shader thread being associated with a particular sample position. Each fragment shader program string then samples a color value from a texture map based on the texture coordinates for that sample position. Finally, the resulting color values are stored in the corresponding section in the multiscanned color buffer.

Es gibt viele Anwendungsfälle, in denen die Fähigkeit zum Beschreiben eines beliebigen Abschnitts in dem Farbpuffer mit mehreren Abtastungen vorteilhaft ist. Beispielsweise liegt eine derartige Anwendung in Bildfehlerbehebungsschemata, in denen die Anzahl an Abschnitten in dem Farbpuffer mit mehreren Abtastungen kleiner als eine Anzahl an Abtastpositionen ist, die mit der Sichtbarkeit (beispielsweise Tiefen- und Schablonenprüfung) einhergehen. Anders ausgedrückt, die Auflösung des Farbpuffers mit mehreren Abtastungen ist kleiner als eine Auflösung der Abtastpositionen. Beispielsweise kann ein Pixel mit 16 Abtastpositionen im Hinblick auf die Sichtbarkeit verknüpft sein, aber ein Farbpuffer mit mehreren Abtastungen enthält nur zwei oder vier Abschnitte zur Speicherung von Farbwerten für jedes Pixel. Ein Farbpuffer mit mehreren Abtastungen mit einer Anzahl an Abschnitten, die gleich der Anzahl an Abtastpositionen ist, die zum Zwecke der Sichtbarkeit vorgesehen sind, kann zu viel Speicher erfordern. Es kann jedoch ein besser zu verwaltender Farbpuffer mit mehreren Abtastungen so eingerichtet werden, dass mehrere Farbwerte für jedes Pixel gespeichert werden können, während dennoch die Sichtbarkeitsinformation bei höheren Auflösungen beibehalten wird. Die mehreren Farbwerte, die in dem Farbpuffer gespeichert werden, können dann auf der Grundlage der Sichtbarkeitsinformation mit höherer Auflösung vereinigt werden.There are many applications in which the ability to describe any portion in the multi-sample color buffer is advantageous. For example, such an application lies in image defect correction schemes in which the number of sections in the multi-scan color buffer is less than a number of scan locations associated with visibility (eg, depth and template checking). In other words, the resolution of the multi-sample color buffer is smaller than a resolution of the sample positions. For example, a pixel having 16 sample positions may be linked for visibility, but a multi-sample color buffer contains only two or four sections for storing color values for each pixel. A multi-sample color buffer having a number of portions equal to the number of sample positions provided for the purpose of visibility may require too much memory. However, a multi-scan, better-managed color buffer can be set up to store multiple color values for each pixel while still maintaining visibility information at higher resolutions. The plurality of color values stored in the color buffer may then be merged based on the higher resolution visibility information.

Durch die Entkopplung des ausgegebenen Farbwerts von der durch Sichtbarkeit bedingten Abtastposition ist es möglich, die Anzahl an Abschnitten zur Darstellung beliebiger Abtastpositionen in beispielsweise dem Tiefen-Puffer zu verringern. Eine mögliche Implementierung eines verlustbehafteten Algorithmus bestünde darin, einen Farbpuffer mit mehreren Abtastungen mit zwei Abschnitten zu implementieren und einen endgültigen Farbwert auf der Grundlage eines gewichteten Mittelwerts der in den beiden Abschnitten gespeicherten Farbwerte zu erzeugen. Die Gewichtungsfaktoren können auf der Grundlage der Sichtbarkeitsinformation (d. h. Abtastmaske), die von der Fragmentschattierungseinheit erzeugt wird, bestimmt werden.By decoupling the output color value from the visibility-related sample position, it is possible to reduce the number of sections for representing arbitrary sample positions in, for example, the depth buffer. One possible implementation of a lossy algorithm would be to implement a multi-sample color buffer with two sections and generate a final color value based on a weighted average of the color values stored in the two sections. The weighting factors may be determined based on the visibility information (i.e., scanning mask) generated by the fragment shading unit.

Ein weiterer Anwendungsfall besteht darin, unter Verwendung eines Farbpuffers mit mehreren Abtastungen eine von der Reihenfolge unabhängige Transparenz einzurichten, wobei ein Algorithmus eine nicht sortierte Liste von halbdurchlässigen Farben und Tiefen pro Pixel speichert. Der Algorithmus sortiert dann die halbdurchlässigen Farben in einem nachgeordneten Verarbeitungsdurchlauf und setzt diese zusammen. Die Fragmentschattierungseinheit behält einen pro-Pixel-Index bei, der die Anzahl an halbtransparenten Fragmenten zählt, die dem Pixel zugeordnet sind. Die Fragmentschattierungseinheit kann dann die Fragmentfarbe und Tiefe an der Abtastung speichern, die dem Index zugeordnet ist, indem das geeignete Bit in der Abtastmaske gesetzt wird (d. h. die Farbabtastung und Tiefenabtastung werden nicht in der Abtastposition auf der Grundlage der Abdeckung gespeichert, sondern in der Reihenfolge der halbtransparenten Fragmente, die diesem speziellen Pixel entsprechen). Wenn die Indexzahl die Anzahl an Abtastungen übersteigt, kann die Maske auf null gesetzt werden, und die Fragmentschattierungseinheit kann auf eine langsamere globale Liste an Fragmenten zurückgreifen, um die verbleibenden Farb-/Tiefen-Kombinationen zu speichern, die zu dem Pixel gehören.Another use is to establish a transparency independent of the order using a multi-sample color buffer, where an algorithm stores an unsorted list of semitransparent colors and depths per pixel. The algorithm then sorts and merges the semitransparent colors in a downstream processing pass. The Fragment Shading Unit maintains a per-pixel index that counts the number of semi-transparent fragments associated with the pixel. The fragment shading unit may then store the fragment color and depth at the sample associated with the index by setting the appropriate bit in the sample mask (ie, the color sample and depth sample are not stored in the sample position based on the coverage, but in sequence the semitransparent fragments corresponding to this particular pixel). If the index number exceeds the number of samples, the mask can be set to zero, and the fragment shader unit can resort to a slower global list of fragments to store the remaining color / depth combinations associated with the pixel.

Ein noch weiterer Anwendungsfall besteht darin, eine begrenzte Form einer konservativen Rastereinteilung einzurichten. In einer konservativen Rastereinteilung kann die Abdeckungsinformation derart erzeugt werden, dass, wenn eine beliebige Abtastung von der Grundform abgedeckt wird, dann alle Abtastungen als von der Grundform abgedeckt behandelt werden. Wenn jedoch eine konservative Rastereinteilung eingerichtet wird, werden typischerweise Tiefen- und Schablonenprüfungen auf der Grundlage dessen ausgeführt, dass das Pixel „vollständig abgedeckt” ist, was zu gewissen Ungenauigkeiten in dem Algorithmus führen kann. Stattdessen kann ein Algorithmus eine konservative Rastereinteilung einrichten, indem ein Früh-z- und/oder Schablonen-Test auf der Grundlage einer exakten Abdeckungsinformation, die von der Rastereinheit erzeugt wird, ausgeführt wird und anschließend die Abtastmaske so eingestellt wird, dass sie angibt, dass das gesamte Pixel „abgedeckt” ist, wenn eine beliebige Abtastposition für ein Fragment „abgedeckt” ist. Algorithmen zur Voxel-Bildung und Kollisionserfassung können von einer „Schablonenbildung, dann Abdeckung”-Anwendung einer konservativen Rastereinteilung profitieren.Yet another use is to establish a limited form of conservative rasterization. In a conservative rasterization, the coverage information may be generated such that, if any sample is covered by the basic form, then all samples will be treated as being covered by the basic form. However, when a conservative rasterization is established, depth and template checks are typically performed based on the pixel being "fully covered", which may result in certain inaccuracies in the algorithm. Instead, an algorithm may establish a conservative rasterization by performing an early and / or template test based on exact coverage information generated by the rasterizer and then adjusting the scan mask to indicate that the entire pixel is "masked" if any scan position for a fragment is "masked". Algorithms for voxel formation and collision detection may benefit from a "template-then-coverage" application of a conservative rasterization.

Die zuvor beschriebenen Anwendungsfälle bieten Beispiele spezieller Algorithmen, die eine Steuerung einer Abtastmaske verwenden können, die von der Fragmentschattierungseinheit bereitgestellt wird. Jedoch wird eine Vielzahl von Anwendungsfällen und Anwendungen des hierin beschriebenen Konzepts als innerhalb des Schutzbereichs der vorliegenden Offenbarung liegend erachtet.The applications described above provide examples of specific algorithms that may use control of a scanning mask provided by the fragment shading unit. However, a variety of applications and applications of the concept described herein are considered to be within the scope of the present disclosure.

9 zeigt ein anschauliches System 900, in welchem die diversen Architekturen und/oder Funktionen der diversen vorhergehenden Ausführungsformen eingerichtet werden können. Wie gezeigt, ist ein System 900 bereitgestellt mit mindestens einem zentralen Prozessor 901, der mit einem Kommunikationsbus 902 verbunden ist. Der Kommunikationsbus 902 kann unter Anwendung eines beliebigen geeigneten Protokolls eingerichtet werden, etwa PCI (periphere Komponenten-Verbindung), PCI-Express, AGP (beschleunigter Graphikport), HyperTransport, oder andere(s) Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokoll(e). Das System 900 weist ferner einen Hauptspeicher 904 auf. Eine Steuerlogik (Software) und Daten sind in dem Hauptspeicher 904 gespeichert, der die Form eines Speichers mit wahlfreiem Zugriff (RAM) annehmen kann. 9 shows a vivid system 900 in which the various architectures and / or functions of the various preceding embodiments can be established. As shown, is a system 900 provided with at least one central processor 901 that with a communication bus 902 connected is. The communication bus 902 may be established using any suitable protocol, such as PCI (Peripheral Component Connection), PCI Express, AGP (Accelerated Graphics Port), HyperTransport, or other bus or point-to-point communication protocol (s). The system 900 also has a main memory 904 on. A control logic (software) and data are in main memory 904 which may take the form of a random access memory (RAM).

Das System 900 umfasst ferner Eingabeeinrichtungen 912, einen Grafik-Prozessor 906 und eine Anzeige 908, d. h. eine konventionelle CRT (Kathodenstrahlröhre), eine LCD-(Flüssigkristallanzeige), eine LED(lichtemittierende Diode)-Anzeige, eine Plasmaanzeige oder dergleichen. Eine Anwendereingabe kann von den Eingabeeinrichtungen 912, beispielsweise Tastatur, Maus, berührungsempfindliche Auflage, Mikrofon und dergleichen empfangen werden. In einer Ausführungsform kann der Grafik-Prozessor 906 mehrere Schattierungs-Module, ein Rastermodul, usw. aufweisen. Jedes der vorhergehenden Module kann in einer einzigen Halbleiterplattform angeordnet sein, um eine grafische Verarbeitungseinheit (GPU) zu bilden.The system 900 also includes input devices 912 , a graphics processor 906 and an ad 908 That is, a conventional CRT (Cathode Ray Tube), an LCD (Liquid Crystal Display), an LED (Light Emitting Diode) display, a plasma display, or the like. A user input may be from the input devices 912 For example, keyboard, mouse, touch-sensitive pad, microphone and the like can be received. In one embodiment, the graphics processor 906 have multiple shading modules, a raster module, etc. Each of the foregoing modules may be arranged in a single semiconductor platform to form a graphics processing unit (GPU).

In der vorliegenden Beschreibung bezeichnet eine einzelne Halbleiterplattform eine einzelne halbleiterbasierte integrierte Schaltung oder einen Chip. Es sollte beachtet werden, dass der Begriff einzelne Halbleiterplattform auch Mehr-Chip-Module mit erhöhter Verbindungsfähigkeit bezeichnen kann, die eine chipinterne Funktionsweise simulieren, und wesentliche Verbesserungen ergeben gegenüber einer Implementierung unter Verwendung einer konventionellen zentralen Recheneinheit (CPU) und eines Busses. Selbstverständlich können die diversen Module auch separat angeordnet sein oder in diversen Kombinationen von Halbleiterplattformen entsprechend den Wünschen des Anwenders vorgesehen sein.In the present specification, a single semiconductor platform refers to a single semiconductor-based integrated circuit or chip. It should be noted that the term single semiconductor platform may also refer to multi-chip modules with enhanced connectivity that simulate on-chip functionality, and substantial improvements over implementation using a conventional central processing unit (CPU) and a bus. Of course, the various modules can also be arranged separately or be provided in various combinations of semiconductor platforms according to the wishes of the user.

Das System 900 kann ferner einen sekundären Speicher 910 aufweisen. Der sekundäre Speicher 910 umfasst beispielsweise ein Festplattenlaufwerk und/oder ein abnehmbares Speicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Kompaktdiskettenlaufwerk, ein Laufwerk für eine digitale Vielseitigkeitsdiskette (DVD), eine Aufzeichnungseinrichtung, ein Flash-Speicher mit universellem seriellen Bus (USB) repräsentiert. Das abnehmbare Speicherlaufwerk liest aus einer nicht-stationären Speichereinheit in gut bekannter Weise und/oder speichert in dieser.The system 900 can also have a secondary memory 910 exhibit. The secondary storage 910 For example, a hard disk drive and / or a removable storage drive that includes a floppy disk drive, a magnetic tape drive, a compact diskette drive, a digital versatile floppy disk (DVD) drive, a recording device, a universal serial bus (USB) flash memory. The removable storage drive reads from and / or stores in a well-known manner from a non-stationary storage unit.

Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 904 und/oder dem sekundären Speicher 910 gespeichert sein. Derartige Computerprogramme versetzen bei Ausführung das System 900 in der Lage, diverse Funktionen auszuführen. Der Speicher 904, der Speicher 910 und/oder ein beliebiger anderer Speicher sind mögliche Beispiele von computerlesbaren Medien.Computer programs or computer control logic algorithms may reside in main memory 904 and / or the secondary memory 910 be saved. Such computer programs put the system in execution 900 in a position, to perform various functions. The memory 904 , the memory 910 and / or any other memory are possible examples of computer-readable media.

In einer Ausführungsform können die Architektur und/oder Funktion der diversen vorhergehenden Figuren im Zusammenhang des zentralen Prozessors 901, des grafischen Prozessors 906, einer integrierten Schaltung (nicht gezeigt), die zumindest einen Teil der Eigenschaften sowohl des zentralen Prozessors 901 als auch des grafischen Prozessors 906 hat, eines Chipsatzes (d. h. einer Gruppe von integrierten Schaltungen, die gestaltet sind, als eine Einheit zur Ausführung zugehöriger Funktionen, usw. zu arbeiten und verkauft zu werden), und/oder einer anderen integrierten Schaltung für diesen Zweck eingerichtet sein.In one embodiment, the architecture and / or function of the various preceding figures may be related to the central processor 901 , the graphic processor 906 an integrated circuit (not shown) that incorporates at least a portion of the characteristics of both the central processor 901 as well as the graphic processor 906 has been designed to operate a chipset (ie a group of integrated circuits designed to operate and be sold as a unit for performing associated functions, etc.) and / or another integrated circuit.

Des Weiteren können die Architektur und/oder Funktionen der diversen vorhergehenden Figuren im Zusammenhang eines allgemeinen Computersystems, eines Leiterplattensystems, eines Systems einer Spielekonsole, die für Unterhaltungszwecke gestaltet ist, im Rahmen eines anwendungsspezifischen Systems und/oder eines anderen gewünschten Systems eingerichtet werden. Beispielsweise kann das System 900 die Form eines Tisch-Computers, eines tragbaren Computers, eines Server-Rechners, eines Arbeitplatzrechners, von Spielekonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art an Logik annehmen. Darüber hinaus gilt, dass das System 900 die Form diverser anderer Geräte annehmen kann, wozu, ohne einschränkend zu sein, eine Einrichtung als persönlicher digitaler Assistent (PDA), eine Einrichtung als Mobiltelefon, ein Fernsehgerät, usw. gehören.Furthermore, the architecture and / or functions of the various preceding figures may be implemented within an application specific system and / or other desired system in the context of a general computer system, a printed circuit board system, a game console system designed for entertainment purposes. For example, the system can 900 take the form of a desktop computer, a portable computer, a server computer, a workstation, game consoles, an embedded system, and / or any other type of logic. In addition, that system 900 may take the form of various other devices including, but not limited to, a personal digital assistant (PDA) device, a mobile device device, a television, etc.

Obwohl ferner nicht gezeigt, kann das System 900 mit einem Netzwerk (beispielsweise einem Telekommunikationsnetzwerk, einem Nahbereichsnetzwerk (LAN), einem drahtlosen Netzwerk, einem Weitbereichsnetzwerk (WAN), etwa das Internet, einem Gerät-zu-Gerät-Netzwerk, einem Kabelnetzwerk oder dergleichen) für Kommunikationszwecke verbunden sein.Although not shown, the system may 900 to a network (e.g., a telecommunications network, a local area network (LAN), a wireless network, a wide area network (WAN), such as the Internet, a device-to-device network, a cable network, or the like) for communication purposes.

Obwohl diverse Ausführungsformen zuvor beschrieben sind, sollte beachtet werden, dass diese lediglich als Beispiel und nicht als einschränkend angegeben sind. Daher sollten die Breite und der Schutzbereich einer bevorzugten Ausführungsform nicht durch eine der zuvor beschriebenen anschaulichen Ausführungsformen beschränkt sein, sondern sollten lediglich entsprechend den folgenden Patentansprüchen und ihren Äquivalenten definiert sein.Although various embodiments have been described above, it should be understood that these are given by way of example only and not by way of limitation. Therefore, the breadth and scope of a preferred embodiment should not be limited by any of the previously described illustrative embodiments, but should be defined only in accordance with the following claims and their equivalents.

ZITATE ENTHALTEN IN DER BESCHREIBUNG QUOTES INCLUDE IN THE DESCRIPTION

Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of the documents listed by the applicant has been generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.

Zitierte Nicht-PatentliteraturCited non-patent literature

  • IEEE 754-2008-Standard [0059] IEEE 754-2008 standard [0059]

Claims (20)

Ein Verfahren mit: Erzeugen eines Fragments für jedes Pixel, das zumindest teilweise von einer Grundform abgedeckt ist; Ermitteln einer Abdeckungsinformation für jedes Fragment, das der Grundform entspricht; und für jedes Fragment: Erzeugen einer Abtastmaske durch eine Fragmentschattierungseinheit, Ersetzen der Abdeckungsinformation für das Fragment durch die Abtastmaske, und Schreiben, auf der Grundlage der Abtastmaske, eines Ergebnisses, das von der Fragmentschattierungseinheit erzeugt ist, in einen Speicher.A method with: Generating a fragment for each pixel that is at least partially covered by a basic shape; Determining coverage information for each fragment that corresponds to the basic form; and for each fragment: Generating a scanning mask by a fragment shading unit, Replacing the coverage information for the fragment with the sampling mask, and Writing, based on the scanning mask, a result generated by the fragment shading unit into a memory. Das Verfahren nach Anspruch 1, wobei ein Fragment eine Datenstruktur umfasst, die ein oder mehrere interpolierte Attribute sowie eine Abdeckungsinformation, die mehrere Abtastungen betrifft, die zu einem speziellen Pixel gehören, aufweist.The method of claim 1, wherein a fragment comprises a data structure having one or more interpolated attributes, and coverage information relating to a plurality of samples belonging to a particular pixel. Das Verfahren nach Anspruch 1, wobei die Grundform eine Datenstruktur umfasst, die eine Ansammlung von Eckpunkten enthält, wobei jeder Eckpunkt in der Ansammlung aus Eckpunkten eine Koordinate in meinem dreidimensionalen Raum sowie ein oder mehrere Vertex-Attribute enthält.The method of claim 1, wherein the basic form comprises a data structure containing a collection of vertices, each vertex in the collection of vertices containing a coordinate in my three-dimensional space and one or more vertex attributes. Das Verfahren nach Anspruch 1, wobei Erzeugen des Fragments und Ermittlung der Abdeckungsinformation während einer Rasterstufe einer Grafikverarbeitungs-Pipeline ausgeführt werden.The method of claim 1, wherein generating the fragment and determining the coverage information are performed during a rasterization step of a graphics processing pipeline. Das Verfahren nach Anspruch 4, wobei die Grafikverarbeitungs-Pipeline zumindest teilweise von einer Parallelverarbeitungseinheit eingerichtet wird, die mehrere programmierbare Datenstrom-Multiprozessoren (SM) beinhaltet, wobei jeder SM ausgebildet ist, mehrere Fragmentschattierungs-Stränge parallel auszuführen.The method of claim 4, wherein the graphics processing pipeline is at least partially established by a parallel processing unit including a plurality of programmable data stream multiprocessors (SM), each SM configured to execute a plurality of fragment shading strands in parallel. Das Verfahren nach Anspruch 5, wobei jeder Fragmentschattierungs-Strang einem anderen Fragment entspricht, das während der Rasterstufe der Grafikverarbeitungs-Pipeline erzeugt wird.The method of claim 5, wherein each fragment shading string corresponds to another fragment generated during the rasterization stage of the graphics processing pipeline. Das Verfahren nach Anspruch 5, wobei Erzeugen der Abtastmaske während einer Fragmentschattierungsstufe der Grafikverarbeitungs-Pipeline erfolgt, und wobei Ersetzen der Abdeckungsinformation durch die Abtastmaske während einer Rasteroperationsstufe der Grafikverarbeitungs-Pipeline erfolgt.The method of claim 5, wherein generating the scan mask occurs during a fragment shading stage of the graphics processing pipeline and replacing the coverage information by the scan mask during a raster operation stage of the graphics processing pipeline. Das Verfahren nach Anspruch 7, wobei die Parallelverarbeitungseinheit eine Rastereinheit, die ausgebildet ist, zumindest teilweise die Rasterstufe der Grafikverarbeitungs-Pipeline einzurichten, und eine Rasteroperationseinheit aufweist, die ausgebildet ist, zumindest teilweise die Rasteroperationsstufe der Grafikverarbeitungs-Pipeline einzurichten.The method of claim 7, wherein the parallel processing unit includes a rasterizer configured to at least partially establish the rasterization level of the graphics processing pipeline, and a rasterizer configured to at least partially establish the rasterizer stage of the graphics processing pipeline. Das Verfahren nach Anspruch 1, wobei die Ergebnisse in einen Farbpuffer mit mehreren Abtastungen geschrieben werden.The method of claim 1, wherein the results are written to a multi-sample color buffer. Das Verfahren nach Anspruch 1, wobei die Abdeckungsinformation eine N-Bit-Maske umfasst, wobei jedes Bit in der N-Bit-Maske einer anderen Abtastposition, die einem Pixel zugeordnet ist, entspricht, das dem Fragment zugeordnet ist.The method of claim 1, wherein the coverage information comprises an N-bit mask, each bit in the N-bit mask corresponding to a different sample location associated with a pixel associated with the fragment. Das Verfahren nach Anspruch 10, wobei die Abtastmaske N Bits umfasst, wobei jedes Bit der Abtastmaske einer anderen Abtastposition entspricht.The method of claim 10, wherein the sampling mask comprises N bits, each bit of the sampling mask corresponding to a different sampling position. Das Verfahren nach Anspruch 1, wobei die Fragmentschattierungseinheit die Abdeckungsinformation empfängt.The method of claim 1, wherein the fragment shading unit receives the coverage information. Ein nicht-flüchtiges computerlesbares Speichermedium, das Befehle speichert, die, wenn sie von einem Prozessor ausgeführt werden, den Prozessor veranlassen, Schritte auszuführen, mit: Erzeugen eines Fragments für jedes Pixel, das zumindest teilweise von einer Grundform abgedeckt ist; Ermitteln einer Abdeckungsinformation für jedes Fragment, das der Grundform entspricht; und für jedes Fragment: Erzeugen einer Abtastmaske durch eine Fragmentschattierungseinheit, Ersetzen der Abdeckungsinformation für das Fragment durch die Abtastmaske, und Schreiben, auf der Grundlage der Abtastmaske, eines Ergebnisses, das von der Fragmentschattierungseinheit erzeugt ist, in einen Speicher.A non-transitory computer-readable storage medium that stores instructions that, when executed by a processor, cause the processor to perform steps with: Generating a fragment for each pixel that is at least partially covered by a basic shape; Determining coverage information for each fragment that corresponds to the basic form; and for each fragment: Generating a scanning mask by a fragment shading unit, Replacing the coverage information for the fragment with the sampling mask, and Writing, based on the scanning mask, a result generated by the fragment shading unit into a memory. Das nicht-flüchtige computerlesbare Speichermedium nach Anspruch 13, wobei ein Fragment eine Datenstruktur umfasst, die ein oder mehrere interpolierte Attribute sowie eine Abdeckungsinformation bezüglich mehrerer mit einem speziellen Pixel verknüpfter Abtastungen aufweist, und wobei die Grundform eine Datenstruktur umfasst, die eine Ansammlung von Eckpunkten enthält, wobei jeder Eckpunkt in der Ansammlung aus Eckpunkten eine Koordinate in einem dreidimensionalen Raum sowie ein oder mehrere Vertex-Attribute enthält.The non-transitory computer-readable storage medium of claim 13, wherein a fragment comprises a data structure having one or more interpolated attributes and coverage information relating to a plurality of samples associated with a particular pixel, and wherein the basic form comprises a data structure containing a collection of vertices where each vertex in the collection of vertices contains a coordinate in a three-dimensional space as well as one or more vertex attributes. Das nicht-flüchtige computerlesbare Speichermedium nach Anspruch 13, wobei der Prozessor eine Parallelverarbeitungseinheit umfasst, die mehrere programmierbare Datenstrom-Multiprozessoren (SM) enthält, wobei jeder SM ausgebildet ist, mehrere Fragmentschattierungs-Stränge parallel auszuführen, und wobei Erzeugen des Fragments und Ermitteln einer Abdeckungsinformation während einer Rasterstufe einer Grafikverarbeitungs-Pipeline ausgeführt werden, die zumindest teilweise durch die Parallelverarbeitungseinheit eingerichtet ist.The non-transitory computer readable storage medium of claim 13, wherein the processor comprises a parallel processing unit including a plurality of programmable data stream multiprocessors (SM), each SM configured to execute a plurality of fragment shading strands in parallel, and generating the fragment and determining coverage information during a raster stage of a graphics processing pipeline be executed, which is at least partially established by the parallel processing unit. Das nicht-flüchtige computerlesbare Speichermedium nach Anspruch 13, wobei die Abdeckungsinformation eine N-Bit-Maske umfasst, wobei jedes Bit in der N-Bit-Maske einer anderen Abtastposition entspricht, die einem Fragment entsprechenden Pixel zugeordnet ist, und wobei die Abtastmaske N Bits aufweist, wobei jedes Bit der Abtastmaske den unterschiedlichen Abtastpositionen entspricht.The non-transitory computer-readable storage medium of claim 13, wherein the coverage information comprises an N-bit mask, each bit in the N-bit mask corresponding to a different sample location associated with a pixel corresponding to the fragment, and wherein the sample mask is N bits wherein each bit of the sampling mask corresponds to the different sampling positions. Ein System mit: einer Parallelverarbeitungseinheit, die ausgebildet ist, zumindest teilweise eine Grafikverarbeitungs-Pipeline einzurichten, wobei die Parallelverarbeitungseinheit ausgebildet ist, Grundformen zu erzeugen durch: Erzeugung eines Fragments für jedes Pixel, das zumindest teilweise durch eine Grundform abgedeckt ist, Ermittlung einer Abdeckungsinformation für jedes Fragment, das der Grundform entspricht, und für jedes Fragment: Erzeugung einer Abtastmaske durch eine Fragmentschattierungseinheit, Ersetzung der Abdeckungsinformation für das Fragment durch die Abtastmaske, und Schreiben eines Ergebnisses, das von der Fragmentschattierungseinheit erzeugt ist, in einen Speicher auf der Grundlage der Abtastmaske.A system with: a parallel processing unit configured to at least partially establish a graphics processing pipeline, the parallel processing unit configured to generate basic shapes by: Generating a fragment for each pixel that is at least partially covered by a basic shape, Determining a coverage information for each fragment corresponding to the basic form, and for each fragment: Generation of a scanning mask by a fragment shading unit, Replacing the coverage information for the fragment with the sampling mask, and Writing a result generated by the fragment shading unit into a memory based on the sampling mask. Das System nach Anspruch 17, wobei Erzeugung des Fragments und Bestimmung einer Abdeckungsinformation während einer Rasterstufe der Grafikverarbeitungs-Pipeline ausgeführt werden, wobei die Erzeugung der Abtastmaske während einer Fragmentschattierungsstufe der Grafikverarbeitungs-Pipeline erfolgt, und wobei die Ersetzung der Abdeckungsinformation durch die Abtastmaske während einer Rasteroperationsstufe der Grafikverarbeitungs-Pipeline erfolgt.The system of claim 17, wherein generating the fragment and determining coverage information is performed during a rasterization step of the graphics processing pipeline, wherein the generation of the scan mask occurs during a fragment shading stage of the graphics processing pipeline, and wherein the replacement of the coverage information by the sampling mask during a raster operation stage the graphics processing pipeline. Das System nach Anspruch 17, das ferner umfasst: einen Speicher zur Speicherung einer grafischen Anwendung und eines Gerätetreibers; und einen Host-Prozessor, der mit dem Speicher und der Parallelverarbeitungseinheit verbunden ist, wobei der Host-Prozessor ausgebildet ist, die grafische Anwendung und den Gerätetreiber auszuführen, wobei der Gerätetreiber an einer grafischen API eine Erweiterung implementiert, die von der grafischen Anwendung verwendet wird, um die Parallelverarbeitungseinheit zu veranlassen, die Abdeckungsinformation für das Fragment durch die Abtastmaske zu ersetzen.The system of claim 17, further comprising: a memory for storing a graphical application and a device driver; and a host processor coupled to the memory and the parallel processing unit, the host processor configured to execute the graphical application and the device driver, wherein the device driver implements, at a graphical API, an extension used by the graphical application to cause the parallel processing unit to replace the coverage information for the fragment with the scan mask. Das System nach Anspruch 17, wobei die Parallelverarbeitungseinheit mehrere programmierbare Datenstrom-Multiprozessoren (SM) aufweist, wobei jeder SM ausgebildet ist, mehrere Fragmentschattierungs-Stränge parallel auszuführen.The system of claim 17, wherein the parallel processing unit comprises a plurality of programmable data stream multiprocessors (SM), each SM configured to execute a plurality of fragment shading strands in parallel.
DE102015112303.7A 2014-07-29 2015-07-28 Control a scan mask from a fragment shader Pending DE102015112303A1 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462030497P 2014-07-29 2014-07-29
US62/030,497 2014-07-29
US14/810,178 2015-07-27
US14/810,178 US9978171B2 (en) 2014-07-29 2015-07-27 Control of a sample mask from a fragment shader program

Publications (1)

Publication Number Publication Date
DE102015112303A1 true DE102015112303A1 (en) 2016-02-04

Family

ID=55079729

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015112303.7A Pending DE102015112303A1 (en) 2014-07-29 2015-07-28 Control a scan mask from a fragment shader

Country Status (1)

Country Link
DE (1) DE102015112303A1 (en)

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
IEEE 754-2008-Standard

Similar Documents

Publication Publication Date Title
DE102015113797B4 (en) Relative encoding for a block-based bounding volume hierarchy
DE102013114279B4 (en) Multiscan surface processing using a single scan
DE102018132468A1 (en) MULTI-GPU FRAME RENDERING
US9779536B2 (en) Graphics processing
DE102018114286A1 (en) Perform a traversal stack compression
DE102018113845A1 (en) Systems and methods for training neural networks with sparse data
DE102018127647A1 (en) SYSTEMS AND METHOD FOR TRAINING NEURONAL NETWORKS ON REGRESSION WITHOUT REFERENCE DATA TRAINING PATTERNS
DE102015113240A1 (en) SYSTEM, METHOD AND COMPUTER PROGRAM PRODUCT FOR SHADING USING A DYNAMIC OBJECT ROOM GATE
DE102019103059A1 (en) Cut and stab-proof beam-triangle intersection
DE102016122297A1 (en) Multi-pass rendering in a screen space pipeline
DE102013017639B4 (en) Caching of adaptively sized cache tiles in a unified L2 cache with surface compression
DE102017108096A1 (en) SYSTEM, METHOD AND COMPUTER PROGRAM PRODUCT FOR TRANSMITTING TO VARIABLE SCRAP BY MEANS OF PROJECTIVE GEOMETRIC DISTORTION
DE102019103326A1 (en) ROBUST, EFFICIENT MULTIPROCESSOR-COPROCESSOR INTERFACE
DE102017124573A1 (en) SYSTEMS AND METHOD FOR CRITING NEURONAL NETWORKS FOR AN OPERATIONAL EFFICIENT CONCLUSION
DE102013114373A1 (en) Consistent vertex snap-in for variable-resolution rendering
DE102013022257A1 (en) Programmable mixing in multi-strand processing units
DE102018120859A1 (en) Inline data inspection to simplify workloads
DE102013114090A1 (en) Conservative rasterization of primitives using an error term
DE102017109472A1 (en) STEREO MULTIPLE PROJECTION IMPLEMENTED BY USING A GRAPHIC PROCESSING PIPELINE
DE102013222685B4 (en) System, method and computer program product for sampling a hierarchical depth map
DE102013020613A1 (en) Bypass pixel shading for low power graphic imaging
DE102013020807A1 (en) Handling Subordinate Z Cover Data in Raster Operations
DE102013018445A1 (en) Defining a subordinate imaging state in an upstream shading entity
DE102013020810A1 (en) Efficient super-scanning with shading strands per pixel
DE102013218594A1 (en) System, method and computer program product for the parallel reconstruction of a sampled suffix array

Legal Events

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

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

R016 Response to examination communication