DE102019100505A1 - Perform a texture detail level approximation - Google Patents

Perform a texture detail level approximation Download PDF

Info

Publication number
DE102019100505A1
DE102019100505A1 DE102019100505.1A DE102019100505A DE102019100505A1 DE 102019100505 A1 DE102019100505 A1 DE 102019100505A1 DE 102019100505 A DE102019100505 A DE 102019100505A DE 102019100505 A1 DE102019100505 A1 DE 102019100505A1
Authority
DE
Germany
Prior art keywords
buffer
scene
pixel
texture
differential
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
DE102019100505.1A
Other languages
German (de)
Inventor
Tomas Akenine-Moller
Robert Toth
Magnus Andersson
Jim Kjell David Nilsson
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 US15/881,619 external-priority patent/US20190236166A1/en
Priority claimed from US16/010,316 external-priority patent/US10460504B2/en
Priority claimed from US16/022,506 external-priority patent/US10600232B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102019100505A1 publication Critical patent/DE102019100505A1/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/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing

Abstract

Eine Textur-Detaillierungsgrad(LOD)-Näherung kann unter Benutzung von Strahlendifferentialen und eines G-Puffers durchgeführt werden. Beispielsweise wird eine zu rendernde Szene gekennzeichnet und ein G-Puffer der Szene gerendert. Außerdem wird eine Strahlverfolgung für die Szene gestartet und während der Strahlverfolgung ein Strahlendifferential durch Zugreifen auf den G-Puffer erzeugt. Ferner wird das erzeugte Strahlendifferential an einen aktuellen Strahl angehängt und das erzeugte Strahlendifferential verfolgt.A texture detailing (LOD) approximation may be performed using beam differentials and a G-buffer. For example, a scene to be rendered is identified and a G-buffer of the scene is rendered. In addition, ray tracing for the scene is started, and during ray tracing, a beam differential is generated by accessing the G buffer. Furthermore, the generated radiation differential is appended to a current beam and the generated radiation differential tracked.

Description

GEBIET DER ERFINDUNGFIELD OF THE INVENTION

Die vorliegende Erfindung betrifft Bild-Rendering und genauer gesagt das Berechnen von Textur-Footprints in Reflexionen während Echtzeit-Strahlverfolgung.The present invention relates to image rendering, and more particularly to computing texture footprints in reflections during real-time ray tracing.

HINTERGRUNDBACKGROUND

Eine qualitativ hochwertige Texturierung ist für Echtzeit-Strahlverfolgung wünschenswert, um ein Aussehen von gerenderten Bildern zu verbessern. Aktuelle Verfahren zum Durchführen von Texturierung benutzen jedoch Strahlendifferentiale oder Kovarianzmatrizen oder Nächste-Nachbar-Abtastung, was entweder viel Speicher pro Pixel sowie auch eine große Menge an Anweisungen verwendet, um einen Textur-Footprint zu berechnen, oder zu Bildern niedriger Qualität führt. Ohne geeignete Texturfilterung kann eine in einer Reflexion sichtbare Textur aliasieren, was zu Flimmern führen kann, wenn sich Objekte oder die Kamera bewegen. Existierende Verfahren sind entweder zu aufwändig oder führen zu Ergebnissen niedriger Qualität. Daher wird ein schnelleres Mittel der Texturierung benötigt.High-quality texturing is desirable for real-time ray tracing to improve the appearance of rendered images. Current methods of performing texturing, however, use ray differentials or covariance matrices or nearest neighbor sampling, which either uses a lot of memory per pixel as well as a large amount of instructions to compute a texture footprint or results in low quality images. Without proper texture filtering, a texture visible in a reflection can alias, which can cause flickering when objects or the camera are moving. Existing methods are either too laborious or lead to low quality results. Therefore, a faster means of texturing is needed.

Somit gibt es einen Bedarf, sich diesen Problemen und/oder anderen Problemen zu widmen, die dem Stand der Technik zugeordnet sind.Thus, there is a need to address these problems and / or other problems associated with the prior art.

ZUSAMMENFASSUNGSUMMARY

Ein Verfahren, ein computerlesbares Medium und ein System werden zum Durchführen einer Textur-Detaillierungsgrad-Näherung offenbart. Beispielsweise wird eine zu rendernde Szene gekennzeichnet und ein G-Puffer der Szene wird gerendert. Außerdem wird eine Strahlverfolgung für die Szene gestartet und während der Strahlverfolgung wird ein Strahlendifferential durch Zugreifen auf den G-Puffer erzeugt. Ferner wird das erzeugte Strahlendifferential an einen aktuellen Strahl angehängt und das erzeugte Strahlendifferential verfolgt.A method, a computer readable medium, and a system are disclosed for performing a texture detail level approximation. For example, a scene to be rendered is identified and a G-buffer of the scene is rendered. In addition, ray tracing for the scene is started and during ray tracing, a ray differential is generated by accessing the G buffer. Furthermore, the generated radiation differential is appended to a current beam and the generated radiation differential tracked.

Figurenlistelist of figures

  • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Durchführen einer Textur-Detaillierungsgrad-Näherung gemäß einer Ausführungsform; 1 FIG. 12 illustrates a flow chart of a method of performing a texture detail level approximation according to one embodiment; FIG.
  • 2 veranschaulicht eine Parallelverarbeitungseinheit gemäß einer Ausführungsform; 2 illustrates a parallel processing unit according to an embodiment;
  • 3A veranschaulicht einen allgemeinen Verarbeitungscluster der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform; 3A FIG. 16 illustrates a general processing cluster of the parallel processing unit of FIG 2 according to an embodiment;
  • 3B veranschaulicht eine Partitions-Einheit der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform; 3B illustrates a partition unit of the parallel processing unit of 2 according to an embodiment;
  • 4 veranschaulicht den Streaming-Multiprozessor von 3A gemäß einer Ausführungsform; 4 illustrates the streaming multiprocessor of 3A according to an embodiment;
  • 5 veranschaulicht ein System-on-Chip, das die Parallelverarbeitungseinheit von 2 umfasst, gemäß einer Ausführungsform; 5 FIG. 12 illustrates a system-on-chip that includes the parallel processing unit of FIG 2 comprises, according to an embodiment;
  • 6 ist ein Konzeptdiagramm einer Graphikverarbeitungs-Pipeline, die von der Parallelverarbeitungseinheit von 2 implementiert wird, gemäß einer Ausführungsform; 6 FIG. 12 is a conceptual diagram of a graphics processing pipeline executed by the parallel processing unit of FIG 2 is implemented, according to one embodiment;
  • 7 veranschaulicht ein beispielhaftes System, bei dem die verschiedene Architektur und/oder Funktionalität aller Ausführungsformen implementiert werden kann; 7 FIG. 4 illustrates an exemplary system in which the various architecture and / or functionality of all embodiments may be implemented; FIG.
  • 8 veranschaulicht eine beispielhafte Näherung eines Footprint eines Pixels im Texturraum gemäß einer Ausführungsform; und 8th FIG. 12 illustrates an exemplary approximation of a footprint of a pixel in texture space according to an embodiment; FIG. and
  • 9 veranschaulicht eine beispielhafte Kegelverfolgungsimplementierung zum Berechnen des Textur-LOD innerhalb einer Szene gemäß einer Ausführungsform. 9 FIG. 12 illustrates an exemplary taper tracking implementation for computing the texture LOD within a scene, according to one embodiment. FIG.
  • 10 veranschaulicht eine beispielhafte geometrische Anordnung für einen Kegel durch ein Pixel gemäß einer Ausführungsform. 10 FIG. 11 illustrates an exemplary geometric arrangement for a cone through a pixel according to an embodiment. FIG.
  • 11 veranschaulicht eine beispielhafte geometrische Anordnung für Berechnungen für Textur-LOD für Reflexionen gemäß einer Ausführungsform. 11 FIG. 12 illustrates an exemplary geometric arrangement for texture LOD calculations for reflections according to one embodiment. FIG.
  • 12 veranschaulicht eine beispielhafte geometrische Anordnung, um α0 und α(τ) zu berechnen, gemäß einer Ausführungsform. 12 illustrates an exemplary geometric arrangement to α 0 and α (τ) according to one embodiment.
  • 13 veranschaulicht beispielhafte Reflexionswechselwirkung an unterschiedlichen Geometrietypen gemäß einer Ausführungsform. 13 illustrates exemplary reflection interaction on different types of geometry according to one embodiment.
  • 14 veranschaulicht eine beispielhafte übertriebene Ansicht einer geometrischen Anordnung für Berechnungen für Textur-LOD für Reflexionen gemäß einer Ausführungsform. 14 FIG. 12 illustrates an example exaggerated view of a geometric arrangement for texture LOD calculations for reflections according to one embodiment. FIG.
  • 15 veranschaulicht eine beispielhafte Geometrie, die bei der Berechnung von ϕ zum Bestimmen eines Oberflächen-Ausbreitungswinkels β beteiligt ist, gemäß einer Ausführungsform. 15 Figure 12 illustrates an example geometry used in calculating φ to determine a surface propagation angle β involved, according to one embodiment.
  • 16 veranschaulicht eine beispielhafte Beziehung zwischen Änderungen in einem Normalenvektor und einem reflektierten Vektor gemäß einer Ausführungsform. 16 FIG. 12 illustrates an example relationship between changes in a normal vector and a reflected vector according to one embodiment. FIG.
  • 17 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Durchführen einer Textur-Detaillierungsgrad-Näherung unter Benutzung eines oder mehrerer Strahlendifferentiale mit einem G-Puffer gemäß einer Ausführungsform. 17 FIG. 12 illustrates a flow diagram of a method of performing a texture detail level approximation using one or more ray differentials with a G-buffer according to an embodiment.

AUSFÜHRLICHE BESCHREIBUNGDETAILED DESCRIPTION

1 veranschaulicht ein Ablaufdiagramm eines Verfahrens 100 zum Durchführen einer Textur-Detaillierungsgrad(LOD)-Näherung gemäß einer Ausführungsform. In einer Ausführungsform kann die LOD-Näherung verwendet werden, um die Größe eines Textur-Footprint zu schätzen (z.B. durch Berechnen eines Textur-Footprint für einen zweiten Trefferpunkt, wie beispielsweise einen Reflexionspunkt). Wie in Operation 102 gezeigt, ist eine zu rendernde Szene gekennzeichnet. Außerdem wird, wie in Operation 104 gezeigt, ein Strahl projiziert, der durch ein Pixel eines Bildschirmraums geht, was zu einem ersten Trefferpunkt an einem Geometrieelement innerhalb der Szene führt. 1 illustrates a flowchart of a method 100 for performing a texture detailing (LOD) approximation according to one embodiment. In one embodiment, the LOD approximation may be used to estimate the size of a texture footprint (eg, by computing a texture footprint for a second hit point, such as a reflection point). As in operation 102 shown, a scene to be rendered is indicated. Besides, as in operation 104 shown projecting a ray passing through a pixel of a screen space, resulting in a first hit point on a feature within the scene.

Ferner wird, wie in Operation 106 gezeigt, ein Footprint-Winkel des Pixels bestimmt. In einer Ausführungsform kann der Footprint-Winkel einen Ausbreitungswinkel α umfassen, der eine Ausbreitung des Pixels in Radianten modelliert. Des Weiteren wird, wie in Operation 108 gezeigt, ein Krümmungsmaß für das Geometrieelement an dem ersten Trefferpunkt innerhalb der Szene bestimmt. Beispielsweise kann das Krümmungsmaß β verwendet werden, um eine zusätzliche Ausbreitung des Pixels zu bestimmen, die durch eine Krümmung an dem Trefferpunkt herbeigeführt wird.Further, as in Operation 106 shown determines a footprint angle of the pixel. In one embodiment, the footprint angle may be a propagation angle α which models a spread of the pixel in radians. Furthermore, as in Operation 108 a curvature measure for the feature at the first hit point within the scene is determined. For example, the curvature β can be used to determine an additional spread of the pixel caused by a curvature at the hit point.

In einer Ausführungsform kann das Krümmungsmaß β pro Vertex vorberechnet werden und über ein Dreieck interpoliert werden. In einer anderen Ausführungsform kann das Bestimmen des Krümmungsmaßes ein Negieren des Krümmungsmaßes umfassen, wenn die Geometrie konkav ist. In noch einer anderen Ausführungsform kann der Ausbreitungswinkel wie ein innerhalb der Szene umherspringender Strahl durch die Szene propagiert werden.In one embodiment, the amount of curvature β are precalculated per vertex and interpolated over a triangle. In another embodiment, determining the amount of curvature may include negating the amount of curvature when the geometry is concave. In yet another embodiment, the propagation angle may be propagated through the scene as a beam skipping within the scene.

Ebenfalls wird, wie in Operation 110 gezeigt, ein Textur-LOD(texture level of detail; TexturDetaillierungsgrad)-Näherung für eine Komponente der Szene unter Benutzung des Footprint-Winkels des Pixels und des Krümmungsmaßes für das Geometrieelement berechnet. In einer Ausführungsform kann ein Abstand zu dem Trefferpunkt, eine Strahlrichtung und eine Normale an dem Trefferpunkt ebenfalls benutzt werden, um die LOD-Näherung für die Komponente der Szene zu berechnen.Also, as in Operation 110 For example, a texture texture level (LOD) approximation for a component of the scene is calculated using the footprint angle of the pixel and the curvature dimension for the feature. In one embodiment, a distance to the hit point, a beam direction, and a normal at the hit point may also be used to calculate the LOD approximation for the component of the scene.

In einer anderen Ausführungsform kann die Komponente eine Reflexion innerhalb er Szene, eine rekursive Reflexion innerhalb der Szene, usw. umfassen. In noch einer anderen Ausführungsform kann die Komponente eine Refraktion innerhalb der Szene, eine rekursive Refraktion innerhalb der Szene, usw. umfassen. In noch einer anderen Ausführungsform kann die LOD-Näherung verwendet werden, um eine Größe eines Textur-Footprint für einen zweiten Trefferpunkt zu schätzen.In another embodiment, the component may include reflection within the scene, recursive reflection within the scene, and so on. In yet another embodiment, the component may include a refraction within the scene, a recursive refraction within the scene, and so on. In yet another embodiment, the LOD approximation may be used to estimate a size of a texture footprint for a second hit point.

In einer Ausführungsform kann, wenn die Komponente eine rekursive Reflexion oder eine rekursive Refraktion umfasst, ein projizierter Footprint an dem ersten Trefferpunkt bestimmt werden. Der projizierte Footprint kann von dem ersten Trefferpunkt zu einem zweiten Trefferpunkt transportiert werden und eine Größe des projizierten Footprint kann als die Textur-LOD-Näherung für die Komponente an dem zweiten Trefferpunk verwendet werden.In one embodiment, if the component comprises recursive reflection or recursive refraction, a projected footprint may be determined at the first hit point. The projected footprint may be transported from the first hit point to a second hit point, and a size of the projected footprint may be used as the texture LOD approximation for the component at the second hit point.

Außerdem werden, wie in Operation 112 gezeigt, unter Benutzung eines Hardware-Prozessors eine oder mehrere Rendering-Operationen für die Szene unter Benutzung der Textur-LOD-Näherung durchgeführt. In einer Ausführungsform können die eine oder mehrere Rendering-Operationen eine oder mehrere Texturierung-Operationen umfassen. In einer anderen Ausführungsform können die eine oder mehrere Mipmapping-Operationen umfassen, die unter Benutzung der Textur-LOD-Näherung durchgeführt werden. In noch einer anderen Ausführungsform können die eine oder mehrere Rendering-Operationen ein Bestimmen von mehreren Mipmapped-Reflexionen oder Reflexionen oder eine Kombination der beiden unter Benutzung der Textur-LOD-Näherung umfassen.Besides, as in operation 112 performing one or more rendering operations for the scene using the texture LOD approximation using a hardware processor. In one embodiment, the one or more rendering operations may include one or more Texturing operations include. In another embodiment, the one or more mipmapping operations performed using the texture LOD approximation may include. In yet another embodiment, the one or more rendering operations may include determining multiple mipmapped reflections or reflections, or a combination of the two using the texture LOD approximation.

Auf diese Weise kann eine Textur-LOD-Näherung basierend auf einer isotropen Ableitung berechnet werden. Außerdem kann ein Footprint-Winkel und ein Krümmungsmaß in Näherungsoperationen verwendet werden. Als Ergebnis kann eine Anzahl von Anweisungen, die verwendet werden, um Textur-Footprints in Reflexionen zu berechnen, sowie auch eine Menge an Speicherbandbreite, die verwendet wird, um Textur-Footprints in Reflexionen zu berechnen, verringert werden.In this way, a texture LOD approximation based on an isotropic derivative can be calculated. In addition, a footprint angle and a curvature measure can be used in approximate operations. As a result, a number of instructions used to compute texture footprints in reflections as well as an amount of memory bandwidth used to compute texture footprints in reflections can be reduced.

Weitere veranschaulichende Information wird nun hinsichtlich verschiedener optionaler Architekturen und Merkmale dargelegt, mit denen das vorhergehende Rahmenwerk gemäß den Wünschen des Benutzers implementiert werden kann oder nicht. Es sei nachdrücklich bemerkt, dass die folgende Information für veranschaulichende Zwecke dargelegt wird und nicht in irgendeiner Art und Weise als beschränkend ausgelegt werden sollte. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen aufgenommen werden.Further illustrative information will now be set forth with regard to various optional architectures and features with which the previous framework may or may not be implemented according to the wishes of the user. It should be emphasized that the following information is presented for illustrative purposes and should not be construed as limiting in any way. Each of the following features may optionally be included with or without the exclusion of other described features.

Textur-Detaillierungsgrad für Echtzeit-StrahlverfolgungTexture detail level for real-time ray tracing

Überblickoverview

Für gefilterte Texturierung, die auf Echtzeit-Strahlverfolgung abzielt, kann entweder auf Mip-Niveau 0 mit bilinearer Filterung zugegriffen werden oder ein anspruchsvolleres und aufwändigeres Strahlendifferentialverfahren verwendet werden. Eine Technik wird jedoch präsentiert, die ungefähr die gleiche Leistung wie das Zugreifen auf Mip-Niveau 0 aufweist und zur gleichen Zeit eine wesentlich höhere Bildqualität ergibt. Die Bildqualität unter Verwendung dieses Verfahrens kann sogar höher als Strahlendifferentiale unter Verwendung eines einzigen trilinear Lookup sein. Diese Technik kann auf Dreieckeigenschaften, Krümmungsschätzung, Abstand und Einfallswinkel basiert sein.Filtered texturing that targets real-time ray tracing can be either at the mip level 0 be accessed with bilinear filtering or a more sophisticated and complex Strahlendifferentialverfahren be used. However, a technique is presented that is about the same performance as accessing mip-level 0 and at the same time gives a much higher image quality. The image quality using this method may even be higher than beam differentials using a single trilinear lookup. This technique may be based on triangular properties, curvature estimation, distance, and angle of incidence.

Einführungintroduction

Mipmapping ist ein Standardverfahren, um Textur-Aliasing zu vermeiden, und alle GPUs können diese Technik zur Rasterisierung unterstützen. OpenGL spezifiziert beispielsweise den Detaillierungsgrad-Parameter (LOD-Parameter), λ, als: λ ( x , y ) = log 2 ρ ( x , y ) ,

Figure DE102019100505A1_0001
wobei (x,y) Pixelkoordinaten sind und die Funktion ρ berechnet werden kann als: ρ ( x , y ) = max { ( u x ) 2 + ( v x ) 2 , ( u y ) 2 + ( v y ) 2 } ,
Figure DE102019100505A1_0002
für zweidimensionale Textur-Lookups, wobei (u,v) Texelkoordinaten, d.h., Texturkoordinaten (∈ [0, 1]2) multipliziert mit der Texturauflösung sind. 8 veranschaulicht eine beispielhafte Näherung eines Footprint 800 eines Pixels 802 im Texturraum gemäß einer beispielhaften Ausführungsform.Mipmapping is a standard technique to avoid texture aliasing, and all GPUs can support this technique for rasterization. For example, OpenGL specifies the level of detail parameter (LOD parameter), λ, as: λ ( x . y ) = log 2 ρ ( x . y ) .
Figure DE102019100505A1_0001
where (x, y) are pixel coordinates and the function ρ can be calculated as: ρ ( x . y ) = Max { ( u x ) 2 + ( v x ) 2 . ( u y ) 2 + ( v y ) 2 } .
Figure DE102019100505A1_0002
for two-dimensional texture lookups, where ( u . v ) Texel coordinates, ie, texture coordinates (∈ [0, 1] 2 ) multiplied by the texture resolution. 8th illustrates an exemplary approximation of a footprint 800 of a pixel 802 in texture space according to an exemplary embodiment.

Ein beispielhaftes Ziel dieser Funktionen kann sein, sicherzustellen, dass ein Zugriff in der Mipmap-Hierarchie auf eine derartige Weise durchgeführt wird, dass ein Bildschirm-Raum-Pixel auf ungefähr ein Texel abgebildet wird. Im Allgemeinen kann GPU-Hardware die Differentiale durch Bewerten des Pixel-Shader in 2 × 2 Pixelquads zu einer Zeit und unter Verwendung von pro-Pixel-Unterschieden berechnen. Zu beachten ist jedoch, dass sogar Gleichung 2 nicht konservativ ist, da sie nicht eine minimale Box um den Footprint berechnet. Die maximale Seite einer derartigen konservativen Box kann als p(x,y) = max(|∂u/∂x| + |∂v/∂x |, |∂u/∂y| + |∂v/∂y|) berechnet werden. Infolgedessen können die meisten Verfahren sowohl übermäßige Unschärfe als auch Aliasing erzeugen, was unter Verwendung von GPU-basierter Texturierung leicht nachzuweisen ist.An exemplary goal of these functions may be to ensure that access is made in the mipmap hierarchy in such a way that a screen space pixel is mapped to approximately one texel. In general, GPU hardware can calculate the differentials by evaluating the pixel shader in 2 x 2 pixel squares at a time and using per-pixel differences. Note, however, that even Equation 2 is not conservative because it does not compute a minimal box around the footprint. The maximum side of such a conservative box can be given as p (x, y) = max (| ∂u / ∂x | + | ∂v / ∂x |, | ∂u / ∂y | + | ∂v / ∂y |) be calculated. As a result, most methods can produce both excessive blur and aliasing, which is easily demonstrated using GPU-based texturing.

Zur Strahlverfolgung kann das gleiche Ziel gewünscht sein, wobei es jedoch erweitert werden muss, um rekursive Strahlenpfade zu handhaben. Da das obige Pixelquad-Konzept nicht allgemein zur Strahlverfolgung verfügbar sein kann (ausgenommen möglicherweise für Augenstrahlen), können andere Vorgehensweisen benötigt werden. Beispielsweise kann ein Strahlendifferentialverfahren unter Verwendung der Kettenregel einen Textur-Footprint sogar für Reflexionen und Refraktionen genau berechnen. Die Verwendung von Strahlendifferentialen kann rechnerisch aufwändig sein und eine beträchtliche Menge an pro-Strahldaten verwenden und für Echtzeit-Strahlverfolgung können schnellere Verfahren unter Verwendung einer kleineren Menge an pro-Strahldaten erforderlich sein. Außerdem zeigen Ergebnisse, dass das Strahlendifferentialverfahren auch nicht immer konservativ sein kann. For ray tracing the same target may be desired, but it must be extended to handle recursive ray paths. Since the above Pixelquad concept may not be generally available for ray tracing (except possibly for ophthalmic rays), other approaches may be needed. For example, a ray differential method using the chain rule can accurately calculate a texture footprint even for reflections and refractions. The use of beam differentials can be computationally expensive and use a considerable amount of per-beam data, and for real-time ray tracing faster methods using a smaller amount of per-beam data may be required. In addition, results show that the beam differential technique may not always be conservative.

Als Ergebnis kann ein neues Textur-LOD-Verfahren implementiert werden, das Echtzeit-Strahlverfolgung anvisieren und das die Mipmap-Struktur ausnutzen kann. Es kann den Strahl-Footprint durch einen Kegel beschreiben und dann den Kegel entlang des Strahlenpfads abhängig von Oberflächenwechselwirkungen wachsen oder schrumpfen lassen. Die Terms können basierend auf einem Abstand, einer Normalen an einem Trefferpunkt und Textur- und Positionskoordinaten verwendet werden. Ergebnisse zeigen, dass die Ausgabequalität wesentlich besser als nur unter Verwendung von Mip-Niveau 0 mit bilinearer Filterung sein kann und sogar besser als Strahlendifferentiale mit einem einzigen trilinearen Lookup sein kann.As a result, a new texture LOD technique can be implemented that targets real-time ray tracing and that can exploit the mipmap structure. It can describe the beam footprint through a cone and then grow or shrink the cone along the beam path depending on surface interactions. The terms can be used based on a distance, a normal at a hit point, and texture and position coordinates. Results show that the output quality is much better than just using MIP level 0 with bilinear filtering, and may even be better than beam differentials with a single trilinear lookup.

Zur gefilterten Texturabbildung kann eine hierarchische Bildpyramide, genannt ein Mipmap, verwendet werden, um den Prozess zu beschleunigen. Der Footprint des Pixels kann in den Texturraum abgebildet und ein X-Wert kann mit einem Ziel berechnet werden, das daraus besteht, ein Alias-freies Bild ohne übermäßige Unschärfe bereitzustellen. Dieses λ kann dann zusammen mit den Texturkoordinaten des aktuellen Fragments verwendet werden, um eine trilineare Interpolation in dem Mipmap anzuwenden.For filtered texture mapping, a hierarchical image pyramid, called a mipmap, can be used to speed up the process. The footprint of the pixel may be mapped into texture space, and an X value may be calculated with a goal consisting in providing an alias-free image without excessive blurring. This λ can then be used along with the texture coordinates of the current fragment to apply trilinear interpolation in the mipmap.

Viele unterschiedliche Näherungen können für einen Textur-LOD verwendet werden. Beispielsweise kann eine grobe Näherung einen einzigen LOD für ein gesamtes Dreieck verwenden. Dies kann berechnet werden als: Δ = log 2 ( T a P a ) = 0.5  log 2 ( T a P a ) ,

Figure DE102019100505A1_0003
wobei die Variablen Ta und Pa das Zweifache der Texel-Raumbereiche und das Zweifache des Dreieckbereichs im Bildschirmraum sind. Diese werden berechnet als: T a = t w t h | ( t 1 u t 0 u ) ( t 2 v t 0 v ) ( t 2 u t 0 u ) ( t 1 v t 0 v ) | , P a = | ( p 1 x p 0 x ) ( p 2 y p 0 y ) ( p 2 x p 0 x ) ( p 1 y p 0 y ) | ,
Figure DE102019100505A1_0004
wobei tw × th die Dimension der Textur ist, ti = (tiu, tiv) die zweidimensionalen Texturkoordinaten an jedem Vertex sind und pi = (pix, piy), i ∈ {0, 1, 2} die drei Dreieckseckpunkte im Bildschirmraum sind.Many different approximations can be used for a texture LOD. For example, a rough approximation may use a single LOD for an entire triangle. This can be calculated as: Δ = log 2 ( T a P a ) = 0.5 log 2 ( T a P a ) .
Figure DE102019100505A1_0003
where the variables T a and P a are twice the texel space areas and twice the triangle area in screen space. These are calculated as: T a = t w t H | ( t 1 u - t 0 u ) ( t 2 v - t 0 v ) - ( t 2 u - t 0 u ) ( t 1 v - t 0 v ) | . P a = | ( p 1 x - p 0 x ) ( p 2 y - p 0 y ) - ( p 2 x - p 0 x ) ( p 1 y - p 0 y ) | .
Figure DE102019100505A1_0004
where t w × t h is the dimension of the texture, t i = (t iu , t iv ) are the two-dimensional texture coordinates at each vertex and p i = (p ix , piy), i ∈ {0, 1, 2} there are three triangle vertices in screen space.

Die Fläche des Dreiecks kann ebenfalls im Welt-Raum berechnet werden als P a = ( p 1 p 0 ) × ( p 2 p 0 ) ,

Figure DE102019100505A1_0005
wobei pi = (pix, piy, piz) nun im Welt-Raum sind und × das Vektorprodukt bezeichnet. Diese Anordnung kann ausgenutzt werden, da Gleichung 3 dann ein 1-1-Zuordnung zwischen Pixeln und Texeln geben kann, wenn das Dreieck auf der Ebene z = 1 lokalisiert ist. In diesen Fall kann Δ als ein Basistextur-Detaillierungsgrad des Dreiecks betrachtet werden.The area of the triangle can also be calculated in world space as P a = ( p 1 - p 0 ) × ( p 2 - p 0 ) .
Figure DE102019100505A1_0005
where p i = (p ix , p iy , p iz ) are now in world space and × denotes the vector product. This arrangement can be exploited because Equation 3 can then give a 1-1 mapping between pixels and texels if the triangle is located on the z = 1 plane. In this case can Δ be considered as a base texture detail level of the triangle.

Ein Verfahren für gefilterte Texturierung zur Strahlverfolgung kann Strahlendifferentiale verwenden, kann diese durch die Szene verfolgen und kann die Kettenregel anwenden, um Reflexionen und Refraktionen zu modellieren. Der berechnete LOD kann entweder mit regulärem Mipmapping oder mit anisotrop abgetasteten Mipmapping verwendet werden. Dies kann erweitert werden, um Pfadverfolgung mit allgemeinen Reflexions- und Refraktionsfunktionen zu handhaben. Andere Verwendungen wurden für Strahlendifferentiale ebenfalls gefunden. Beispielsweise können sie verwendet werden, um zu bestimmen, auf welchen geometrischen Detaillierungsgrad in einem geometrischen Mehrauflösung-Cache-System zuzugreifen ist. Strahlendifferentiale können ebenfalls verwendet werden, um einen geeigneten Radius der Kerndichteschätzung zur Photonenabbildung zu berechnen.A method of filtered texturing for ray tracing can use ray differentials, track them through the scene, and apply the chain rule to model reflections and refractions. The calculated LOD can be used with either regular mipmapping or anisotropically sampled mipmapping. This can be extended to handle path tracking with general reflection and refraction functions. Other uses have also been found for beam differentials. For example, they can be used to determine what geometrical level of detail is to be accessed in a multi-resolution geometric cache system. Radiation differentials may also be used to calculate a suitable radius of the photon mapping kernel density estimate.

In einer Ausführungsform kann Textur-LOD zur Rasterisierung unter Verwendung von Unterschieden in 2 × 2 Pixelquads mit etwas Überschattierung entlang Rändern als Ergebnis berechnet werden. Zur Echtzeit-Strahlverfolgung kann ein schnelles Berechnen des Textur-Detaillierungsgrads wertvoll sein.In one embodiment, texture LOD may be computed for rasterization using differences in 2x2 pixel squares with some overshadowing along edges. For real-time ray tracing, quickly calculating the texture detail level can be valuable.

Beispielhafte VorgehensweiseExemplary procedure

Ein beispielhaftes Verfahren zum Berechnen des Textur-Detaillierungsgrads (LOD) kann auf der Verfolgung des Kegels basiert sein. Beispielsweise kann das Verfahren lediglich für den Textur-LOD verwendet werden. In einer Ausführungsform kann, wenn der Textur-LOD λ für ein Pixel berechnet wurde, der Textur-Sampler in der GPU verwendet werden, um trilineares Mipmapping durchzuführen.An exemplary method of calculating texture detail level (LOD) may be based on tracking the cone. For example, the method can only be used for the texture LOD. In one embodiment, when the texture LOD λ for a pixel, the texture sampler in the GPU is used to perform trilinear mipmapping.

In einer Ausführungsform kann eine Näherung für einen Textur-LOD zur Strahlverfolgung abgeleitet werden. Beispielsweise kann eine Näherung an Bildschirmraum-Mipmapping abgeleitet werden, die erweitert werden kann, um eine rekursive Strahlverfolgung mit Reflexionen zu handhaben. In einer anderen Ausführungsform können alle Arten von Oberflächenwechselwirkungen gehandhabt werden.In one embodiment, an approximation for a texture LOD for ray tracing may be derived. For example, an approximation to screen space mapping may be derived, which may be extended to handle recursive ray tracing with reflections. In another embodiment, all types of surface interactions can be handled.

9 veranschaulicht eine beispielhafte Kegel-Verfolgung-Implementierung zum Berechnen des Textur-LOD innerhalb einer Szene 900 gemäß einer Ausführungsform. Wie gezeigt, wird ein Kegel 902A-C durch ein Pixel 904 erzeugt und durch die Szene 900 wachsend und schrumpfend transportiert. In einer Ausführungsform kann, unter der Annahme, dass das Rechteck 906 in der Szene 900 texturiert ist und die anderen Objekte 908 und 910 perfekt reflektierend sind, ein Textur-Lookup an dem Trefferpunkt 912 auf dem Rechteck 906 unter Verwendung der Breite des Kegels 902C und der Normalen dort durchgeführt werden und eine texturierte Reflexion kann in dem äußersten linken Objekt 908 erscheinen. 9 FIG. 12 illustrates an exemplary cone tracking implementation for computing the texture LOD within a scene. FIG 900 according to one embodiment. As shown, becomes a cone 902A-C through a pixel 904 generated and through the scene 900 transported growing and shrinking. In one embodiment, assuming that the rectangle 906 in the scene 900 is textured and the other objects 908 and 910 are perfectly reflective, a texture lookup at the hit point 912 on the rectangle 906 using the width of the cone 902C and the normal can be done there and a textured reflection can be in the far left object 908 appear.

Bildschirmraumscreen space

10 veranschaulicht eine beispielhafte geometrische Anordnung 1000 für einen Kegel 1002 durch ein Pixel 1004 gemäß einer Ausführungsform. Wie gezeigt, wird der Footprint-Winkel 1006, ebenfalls Ausbreitungswinkel genannt, eines Pixels mit α bezeichnet, d0 ist der Vektor 1008 von der Kamera 1010 zu dem ersten Trefferpunkt 1012 und n0 ist die Normale 1014 an dem ersten Trefferpunkt 1012. Dieser Kegel 1002 kann durch ein Pixel 1004 verfolgt werden und die Kegelparameter können an jeder Oberfläche des Mittelstrahltreffers aktualisiert werden. 10 illustrates an exemplary geometric arrangement 1000 for a cone 1002 through a pixel 1004 according to one embodiment. As shown, the footprint angle becomes 1006 , also called propagation angle, of a pixel denoted by α, d 0 is the vector 1008 from the camera 1010 to the first hit point 1012 and n 0 is the normal 1014 at the first hit point 1012 , This cone 1002 can through a pixel 1004 and the cone parameters can be updated at each surface of the mid-beam hit.

In einer Ausführungsform kann die Footprint-Breite mit dem Abstand wachsen und an dem ersten Trefferpunkt 1012 kann die Kegelbreite w0 = 2||v|| tan(α/2) ≈ α ||d0|| sein, wobei der Index 0 verwendet werden kann, um den ersten Treffer anzugeben. Die Kleinwinkelnäherung, d.h., tan α ≈ α, kann in dem obigen Ausdruck verwendet werden. Der auf die Ebene am Trefferpunkt projizierte Footprint kann sich ebenfalls in der Größe aufgrund des Winkels, mit [-d, n] bezeichnet, zwischen -d und n ändern. Je größer der Winkel, desto mehr kann der Strahl von der Dreieckoberfläche „sehen“ und folglich kann der LOD zunehmen (d.h., ein Texelzugriff kann höher in der Mipmap-Pyramide durchgeführt werden usw.). Zusammen können diese Faktoren den genäherten projizierten Footprint bilden als: α d 0 1 | n 0 ¯ d 0 ¯ | ,

Figure DE102019100505A1_0006
wobei v eine normierte Richtung von v angibt, n0 · d 0 die Quadratwurzel der projizierten Fläche modelliert und a · b das Skalarprodukt zwischen a und b ist. Es gibt den Absolutwert, um nach vorne weisende und nach hinten weisende Dreiecke auf die gleiche Weise zu handhaben. Wenn [-d0, n0] = 0, gibt es lediglich die Abstandsabhängigkeit, und wenn [-d0 , n0 ] wächst, kann der projizierte Footprint größer und größer gegen unendlich werden, wenn [-d0, n0] → π/2.In one embodiment, the footprint width may grow with the distance and at the first hit point 1012 can the cone width w 0 = 2 || v || tan (α / 2) ≈ α || d 0 || be the index 0 can be used to specify the first hit. The small angle approximation, that is, tan α ≈ α, can be used in the above expression. The footprint projected onto the plane at the hit point can also change in size due to the angle, labeled [-d, n], between -d and n. The larger the angle, the more the beam can "see" from the triangular surface, and consequently the LOD can increase (ie, texel access can be performed higher in the mipmap pyramid, etc.). Together, these factors can form the approximated projected footprint as: α d 0 1 | n 0 ¯ d 0 ¯ | .
Figure DE102019100505A1_0006
in which v indicates a normalized direction of v, n 0 · d 0 is the square root of the projected area and a · b is the scalar product between a and b. It gives the absolute value to handle forward and backward triangles in the same way. If [-d 0 , n 0 ] = 0, there is only the distance dependence, and if [ -d 0 . n 0 ], the projected footprint may become larger and larger towards infinity if [-d 0 , n 0 ] → π / 2.

Da sich das Pixel-zu-Texel-Verhältnis (pro Rand, nicht pro Fläche) halbieren kann, wenn sich der obige Term verdoppelt, kann log2 an diesen Term verwendet werden. Folglich ist eine Heuristik für den Textur-LOD für den ersten Treffer, d.h., ähnlich zu dem, was durch den GPU-Bildschirm-Raum erzeugte Mipmapping ergeben würde, λ = Δ + log 2 ( α d 0 w 0 1 | n ¯ 0 d ¯ 0 | ) ,

Figure DE102019100505A1_0007
wobei Δ, d.h., der Basistextur-LOD an dem aktuellen Dreieck durch Gleichungen 3 und 5 beschrieben werden kann. Zu beachten ist, dass Δ hinzugefügt werden kann, um einen vernünftigen Basis-LOD bereitzustellen, wenn das Dreieck bei z = 1 lokalisiert ist. Dieser Term kann Änderungen in Dreieckseckpunkten und Texturkoordinaten berücksichtigen. Wenn ein Dreieck beispielsweise zweimal so groß wird, dann kann der Basis-LOD um eins abnehmen. Die anderen Faktoren in Gleichung 7 können den LOD in der Mipmap-Pyramide nach oben drücken, wenn der Abstand oder der Einfallswinkel zunimmt.Because the pixel-to-texel ratio (per edge, not per surface) can halve when the above term doubles, it can log 2 be used on this term. Thus, a heuristic is for the texture LOD for the first hit, ie, similar to what would result from mipmapping generated by the GPU screen space, λ = Δ + log 2 ( α d 0 } w 0 1 | n ¯ 0 d ¯ 0 | ) .
Figure DE102019100505A1_0007
where Δ, ie, the base texture LOD at the current triangle can be described by Equations 3 and 5. It should be noted that Δ can be added to provide a reasonable base LOD if the triangle is located at z = 1. This term can take into account changes in triangle vertices and texture coordinates. For example, if a triangle becomes twice as large, then the base LOD may decrease by one. The other factors in Equation 7 can push up the LOD in the mipmap pyramid as the distance or angle of incidence increases.

Reflexionreflection

In einer Ausführungsform kann das obige Verfahren verallgemeinert werden, um ebenfalls Reflexionen zu handhaben. 11 veranschaulicht eine beispielhafte geometrische Anordnung 1100 für Berechnungen für den Textur-LOD für Reflexionen gemäß einer Ausführungsform. Wie gezeigt, wurde die Kamera 1102 in der Ebene 1104 des Oberflächentrefferpunkts 1106 reflektiert, was die Strahlen kollinear macht. Der reflektierte Trefferpunkt 1108 wird ebenfalls gezeigt.In one embodiment, the above method may be generalized to handle reflections as well. 11 illustrates an exemplary geometric arrangement 1100 for calculations for the texture LOD for reflections according to one embodiment. As shown, the camera was 1102 in the plane 1104 of the surface hit point 1106 reflects what makes the rays collinear. The reflected hit point 1108 is also shown.

In einer Ausführungsform kann die Breite, w1 , des Footprint 1110 an dem reflektierten Trefferpunkt 1108 berechnet werden. Zu beachten ist, dass der Winkel β ein Krümmungsmaß an dem Oberflächentrefferpunkt 1106 ist und er beeinflussen kann, wie sehr der Ausbreitungswinkel aufgrund der unterschiedlichen Oberflächenwechselwirkungen wachsen oder schrumpfen wird.In one embodiment, the width, w 1 , the footprint 1110 at the reflected hit point 1108 be calculated. Note that the angle β is a curvature measure at the surface hit point 1106 and it can influence how much the propagation angle will grow or shrink due to the different surface interactions.

PixelausbreituneswinkelPixelausbreituneswinkel

12 veranschaulicht eine beispielhafte geometrische Anordnung 1200, um α0 1202 und α(τ) 1204 zu berechnen, gemäß einer Ausführungsform. Wie gezeigt, kann α eine Funktion des Winkels t 1206 zu dem Pixel gegen die Hauptkameraachse sein, so dass sie als α(τ) 1204 bezeichnet werden kann. In einer Ausführungsform kann angenommen werden, dass das vertikale Blickfeld gleich ψ und dass die Bildschirmauflösung gleich W × H Pixel ist. 12 illustrates an exemplary geometric arrangement 1200 , around α 0 1202 and α (τ) 1204 according to one embodiment. As shown, α can be a function of angle t 1206 be to the pixel against the main camera axis, so they as α (τ) 1204 can be designated. In one embodiment, it may be assumed that the vertical field of view is the same ψ and that the screen resolution is equal to W × H pixels.

In einer Ausführungsform können zwei Verfahren verwendet werden, um den Ausbreitungswinkel, α, eines Pixels, z.B. für primäre Strahlen zu berechnen.In one embodiment, two methods may be used to determine the propagation angle, α to calculate a pixel, eg for primary rays.

Ein erstes Verfahren kann einen Einzelwert als eine Näherung für alle Pixel verwenden. Beispielsweise ist die Berechnung für erhöhte Genauigkeit handelbar. Der Winkel, α0 1202, wird berechnete als: α ( τ ) α 0 = arctan ( 2 tan ( ψ / 2 ) H )

Figure DE102019100505A1_0008
A first method may use a single value as an approximation for all pixels. For example, the calculation is tradable for increased accuracy. The angle, α 0 1202 , is calculated as: α ( τ ) α 0 = arctan ( 2 tan ( ψ / 2 ) H )
Figure DE102019100505A1_0008

Ein zweites Verfahren kann die Genauigkeit erhöhen: tan ( α ( τ ) / 2 ) 0,5 p  cos  τ 1 / cos  τ = 0,5 p  cos 2 τ α ( τ ) p  cos 2 τ ,

Figure DE102019100505A1_0009
wobei α(τ) ≈ α0 cos2 τ. In extremen Situationen kann, z.B. für VR, die zweite Vorgehensweise verwendet werden. Ebenfalls kann, wenn ein Foveated-Renderer mit Augenverfolgung verwendet wird, ein größerer α in der Peripherie verwendet werden.A second method can increase the accuracy: tan ( α ( τ ) / 2 ) 0.5 p cos τ 1 / cos τ = 0.5 p cos 2 τ α ( τ ) p cos 2 τ .
Figure DE102019100505A1_0009
where α (τ) ≈ α 0 cos 2 τ , In extreme situations, eg for VR, the second approach can be used. Also, if a foveated eye-tracking renderer is used, a larger α used in the periphery.

Oberflächenausbreitungswinkel für ReflexionenSurface propagation angle for reflections

13 veranschaulicht beispielhafte Reflexionswechselwirkung an unterschiedliche Geometrietypen 1300 gemäß einer Ausführungsform: eine planare Oberfläche 1302, eine konvexe Oberfläche 1304 und eine konkave Oberfläche 1306. Zu beachten ist, wie die konvexe Oberfläche 1304 einen Winkel eines Kegels wachsen lässt, während die konkave Oberfläche 1306 den Winkel des Kegels verringert, bis er null wird, wobei er an diesem Punkt erneut beginnen wird, zu wachsen. Der Oberflächenausbreitungswinkel β modelliert, wie der Kegel-Footprint aufgrund der Krümmung der Oberfläche wächst/schrumpft. In diesem Fall ist die Oberfläche konvex und als Ergebnis wächst der Footprint (β > 0). 13 illustrates exemplary reflection interaction with different types of geometry 1300 according to one embodiment: a planar surface 1302 , a convex surface 1304 and a concave surface 1306 , Note how the convex surface 1304 An angle of a cone grows while the concave surface 1306 reduces the angle of the cone until it becomes zero, at which point it will start to grow again. The surface propagation angle β modeled as the Cone footprint grows / shrinks due to the curvature of the surface. In this case the surface is convex and as a result the footprint grows (β> 0).

13 veranschaulicht den Oberflächen-Ausbreitungswinkel β, der gleich 0 für planare Reflexionen, > 0 für konvexe Reflexionen und < 0 für konkave Reflexionen sein wird. Intuitiv modelliert β die zusätzliche Ausbreitung, die durch die Krümmung am Trefferpunkt veranlasst wurde. Im Allgemeinen könnten die beiden Hauptkrümmungen an dem Trefferpunkt oder der Radius der mittlere Krümmungsnormale verwendet werden. Jedoch kann ein einfacheres und schnelleres Verfahren benutzt werden, das lediglich eine einzige Zahl β verwendet, um Krümmung anzugeben. 13 illustrates the surface propagation angle β , which will be 0 for planar reflections,> 0 for convex reflections, and <0 for concave reflections. Intuitively modeled β the extra spread caused by the curvature at the hit point. In general, the two major curvatures at the hit point or the radius of average curvature normal could be used. However, a simpler and faster method can be used which uses only a single number β to indicate curvature.

Außerdem veranschaulicht 14 eine beispielhafte übertriebene Ansicht einer geometrischen Anordnung 1400 für Berechnungen für einen Textur-LOD für Reflexionen.Also illustrated 14 an exemplary exaggerated view of a geometric arrangement 1400 for calculations for a texture LOD for reflections.

Es sei bemerkt, dass: tan ( α / 2 + β / 2 ) = d 0 tan ( α / 2 ) t ' t ' = d 0 tan ( α / 2 ) tan ( α / 2 + β / 2 )

Figure DE102019100505A1_0010
und: tan ( α / 2 + β / 2 ) = w / 2 t ' + t 1 w = 2 ( t ' + t 1 ) tan ( α / 2 + β / 2 ) .
Figure DE102019100505A1_0011
It should be noted that: tan ( α / 2 + β / 2 ) = d 0 tan ( α / 2 ) t ' t ' = d 0 tan ( α / 2 ) tan ( α / 2 + β / 2 )
Figure DE102019100505A1_0010
and: tan ( α / 2 + β / 2 ) = w / 2 t ' + t 1 w = 2 ( t ' + t 1 ) tan ( α / 2 + β / 2 ) ,
Figure DE102019100505A1_0011

In einer Ausführungsform kann der Ausdruck von Gleichung 8 für t' in Gleichung 9 verwendet werden, was zu dem folgenden führt: w 1 = 2 ( d 0 tan ( α / 2 ) tan ( α / 2 + β / 2 ) + t 1 ) tan ( α / 2 + β / 2 ) = 2 d 0 tan ( α / 2 ) + 2 t 1 tan ( α / 2 + β / 2 ) α d 0 + ( α + β ) t 1 = w 0 + ( α + β ) t 1 ,

Figure DE102019100505A1_0012
wobei die Kleinwinkelnäherung tan α ≈ α verwendet wird. Auf diese Weise kann α||d0|| den Footprint mit dem Abstand vom Auge zu dem ersten Treffer mal der Größe, α, eines Pixels wachsen lassen und der zweite Term kann das Wachsen von dem ersten Treffer zu dem zweitem Treffer modellieren, was daher von dem Abstand t1 (vom ersten zum zweiten Treffer) und dem Winkel α + β abhängt.In one embodiment, the expression of Eq t ' in equation 9, which leads to the following: w 1 = 2 ( d 0 tan ( α / 2 ) tan ( α / 2 + β / 2 ) + t 1 ) tan ( α / 2 + β / 2 ) = 2 d 0 tan ( α / 2 ) + 2 t 1 tan ( α / 2 + β / 2 ) α d 0 + ( α + β ) t 1 = w 0 + ( α + β ) t 1 .
Figure DE102019100505A1_0012
where the small angle approximation tan α ≈ α is used. In this way, α || d 0 || the footprint with the distance from the eye to the first hit times the size, α , one pixel, and the second term can model the growth from the first hit to the second hit, hence the distance t 1 (from the first to the second hit) and the angle α + β depends.

Wenn die primäre Sichtbarkeit gerastert ist, dann kann der G-Puffer-Durchgang verwendet werden, um den Oberflächen-Ausbreitungswinkel zu berechnen. Die normierte Normale an dem Trefferpunkt ist n und die Position des Fragments ist p, beide im Welt-Raum, und dFdx und dFdy werden verwendet, um ihre Differentiale zu erhalten. Das Differential von p in x wird mit ∂p/∂x bezeichnet.If the primary visibility is rasterized, then the G buffer pass can be used to calculate the surface propagation angle. The normalized normal to the hit point is n and the position of the fragment is p , both in world space, and dFdx and dFdy are used to get their differentials. The differential of p in x will with ∂p / ∂x designated.

15 veranschaulicht eine beispielhafte Geometrie 1500, die bei der Berechnung von ϕ zum Bestimmen eines Oberflächen-Ausbreitungswinkels β beteiligt ist, gemäß einer Ausführungsform. Wie durch 15 veranschaulicht: ϕ = 2 arctan ( 1 2 n x n x + n y n y ) n x n x + n y n y

Figure DE102019100505A1_0013
15 illustrates an example geometry 1500 used in the calculation of φ to determine a surface propagation angle β involved, according to one embodiment. How through 15 illustrates: φ = 2 arctan ( 1 2 n x n x + n y n y ) n x n x + n y n y
Figure DE102019100505A1_0013

16 veranschaulicht eine beispielhafte Beziehung 1600 zwischen Änderungen an einem normalen Vektor 1602 und einem reflektierten Vektor 1604 gemäß einer Ausführungsform. Eine Winkeländerung in dem normalen Vektor 1602, in diesen Fall ϕ/2, führt zu einer Änderung im reflektierten Vektor 1604, die zweimal so groß ist. Dies bedeutet, dass β = 2ϕ. Zwei zusätzliche Benutzerkonstanten k1 und k2 werden für β, sowie auch ein Vorzeichenfaktor s, hinzugeführt, was zu β = 2k1sϕ + k2 mit Standardwerten k1 = 1 und k2 = 0 führt. In Zusammenfassung: β = 2 k 1 s ϕ + k 2 2 k 1 s n x n x + n y n y + k 2 .

Figure DE102019100505A1_0014
16 illustrates an exemplary relationship 1600 between changes to a normal vector 1602 and a reflected vector 1604 according to one embodiment. An angle change in the normal vector 1602 , in this case φ / 2, leads to a change in the reflected vector 1604 that is twice as big. This means that β = 2φ. Two additional user constants k 1 and k 2 are added for β, as well as a sign factor s, which leads to β = 2k 1 sφ + k 2 with standard values k 1 = 1 and k 2 = 0. In summary: β = 2 k 1 s φ + k 2 2 k 1 s n x n x + n y n y + k 2 ,
Figure DE102019100505A1_0014

Ein positives β gibt eine konvexe Oberfläche an, während ein negatives β eine konkave Oberflächenregion angibt. Zu beachten ist, dass ϕ immer positiv ist. Somit kann abhängig von der Art der Oberfläche der s Faktor ein Vorzeichen von β wechseln. s kann berechnet werden als: s = sign ( p x n x + p y n y ) ,

Figure DE102019100505A1_0015
A positive β indicates a convex surface, while a negative β indicates a concave surface region. Note that φ is always positive. Thus, depending on the type of surface of the s Factor a sign of β switch. s can be calculated as: s = sign ( p x n x + p y n y ) .
Figure DE102019100505A1_0015

wobei, wenn das Argument > 0 ist, das Vorzeichen zu 1 und anderenfalls zu -1 zurückkehrt. Das Grundprinzip ist, dass p x und n x

Figure DE102019100505A1_0016
(und ähnlich für y) ungefähr die gleiche Richtung, wenn die lokale Geometrie konvex ist (positives Skalarprodukt) und ungefähr entgegengesetzte Richtungen, wenn sie konkav ist (negatives Skalarprodukt), aufweisen werden.where, if the argument is> 0, the sign returns to 1 and otherwise to -1. The basic principle is that p x and n x
Figure DE102019100505A1_0016
(and similar for y ) approximately the same direction if the local geometry is convex (positive dot product) and approximately opposite directions if concave (negative dot product).

In einer anderen Ausführungsform kann der Vorzeichenfaktor s berechnet werden als: s = sign ( ( p y × p x ) n )

Figure DE102019100505A1_0017
In another embodiment, the sign factor s may be calculated as: s = sign ( ( p y × p x ) n )
Figure DE102019100505A1_0017

Wobei, wenn das Argument > 0 ist, das Vorzeichen zu 1 und anderenfalls zu -1 zurückkehrt. Wenn ein glänzendes Erscheinungsbild gewünscht wird, können die Werte von k1 und k2 vergrößert werden. Für planare Oberflächen wird ϕ gleich 0 sein, was bedeutet, dass k1 keine Wirkung aufweisen wird. Stattdessen kann der Term k2 verwendet werden.Where, if the argument is> 0, the sign returns to 1 and otherwise to -1. If a shiny appearance is desired, the values of k 1 and k 2 be enlarged. For planar surfaces, φ will be equal to 0, which means that k 1 will have no effect. Instead, the term k 2 be used.

Verallgemeinerunggeneralization

Es sei mit i der aufgezählte Trefferpunkt entlang eines Strahlenpfads beginnend bei 0 bezeichnet. Das heißt, der erste Treffer wird mit 0 und der zweite mit 1 usw. aufgezählt. Alle Terme für die Textur-LOD für den i-ten Trefferpunkt können dann zusammengestellt werden als: λ i = Δ i + log 2 ( | w i | | 1 n ¯ i d ¯ i | ) = Δ i Gl .3 + log 2 | w i | Abstand log 2 | n ¯ i d ¯ i | Normale ,

Figure DE102019100505A1_0018
und wie ersichtlich ist, ist es Gleichung 7 mit sowohl einer Abstand- als auch Normalen-Abhängigkeit ähnlich. Es sei erinnert, dass ni die Normale an der Oberfläche an dem i-ten Trefferpunkt und di der Vektor an dem i-ten Trefferpunkt von dem vorherigen Trefferpunkt ist. Der Basisdreieck-LOD, Δi , weist nun ein Subskript i auf, um anzugeben, dass er der Basis-LOD des Dreiecks an dem i-ten Trefferpunkt ist, der verwendet werden sollte. Ähnlich wie zuvor, bedeutet d i eine normierte Richtung von di . Zu beachten ist, dass zwei Absolutwertfunktionen in Gleichung 16 hinzugefügt wurden. Der Absolutwert für den Abstandsterm ist dort, da β negativ sein kann (z.B. für konkave Oberflächenpunkte). Der Absolutwert für den Normalenterm ist dort, um nach hinten zeigende Dreiecke auf eine konsistente Art und Weise zu handhaben.Let i denote the enumerated hit point along a ray path beginning at 0. That is, the first hit is counted with 0 and the second with 1 and so on. All terms for the texture LOD for the ith hit point can then be put together as: λ i = Δ i + log 2 ( | w i | | 1 n ¯ i d ¯ i | ) = Δ i } gl .3 + log 2 | w i | } distance - log 2 | n ¯ i d ¯ i | } normal .
Figure DE102019100505A1_0018
and as can be seen, it is similar to Equation 7 with both a distance and a normal dependence. It should be remembered that i the normal on the surface at the i th hit point and d i is the vector at the i th hit point from the previous hit point. The basic triangle LOD, Δ i , now has a subscript i to indicate that it is the base LOD of the triangle at the ith hitpoint that should be used. Similar to before, means d i is a normalized direction of d i , Note that two absolute value functions have been added in Equation 16. The absolute value for the distance term is there, since β can be negative (eg for concave surface points). The absolute value for the normal term is there to handle backward triangles in a consistent manner.

Zu beachten ist, dass w0 = αt0 = γ0t0 und w1 = αt0 + (α + β0)t1 = w0 + γ1t1, wobei γ0 = α und γ1 = α + β0 und β0 der Oberflächenausbreitungswinkel an dem ersten Trefferpunkt ist. Folglich handhabt Gleichung 16 Rekursion und im Allgemeinen gilt, dass: w i = w i 1 + γ i t i ,

Figure DE102019100505A1_0019
wobei γi = yi-1 + βi-1.It should be noted that w 0 = αt 0 = γ 0 t 0 and w 1 = αt 0 + (α + β 0 ) t 1 = w 0 + γ 1 t 1 , where γ 0 = α and γ 1 = α + β 0 and β 0 is the surface propagation angle at the first hit point. Thus, Equation 16 handles recursion and generally holds that: w i = w i - 1 + γ i t i .
Figure DE102019100505A1_0019
where γ i = y i-1 + β i-1 .

Pseudocode pseudocode

Tabelle 1 umfasst einen beispielhaften Pseudocode, der Strukturen zum Durchführen von Strahlverfolgung implementiert, gemäß einer Ausführungsform. Natürlich sollte beachtet werden, dass der in Tabelle 1 gezeigte Pseudocode lediglich für veranschaulichende Zwecke dargelegt wird und somit nicht als in irgendeiner Art und Weise begrenzend ausgelegt werden sollte.

Figure DE102019100505A1_0020
Figure DE102019100505A1_0021
Table 1 includes an exemplary pseudocode that implements structures for performing ray tracing, according to one embodiment. Of course, it should be noted that the pseudocode shown in Table 1 is presented for illustrative purposes only and thus should not be construed as limiting in any way.
Figure DE102019100505A1_0020
Figure DE102019100505A1_0021

Tabelle 2 umfasst einen beispielhaften Pseudocode zum Durchführen einer Strahlverfolgung während der Handhabung rekursiver Reflexionen gemäß einer Ausführungsform. Natürlich sollte beachtet werden, dass der in Tabelle 2 gezeigte Pseudocode lediglich für veranschaulichende Zwecke dargelegt wird und somit nicht in irgendeiner Art und Weise als begrenzend ausgelegt werden sollte.

Figure DE102019100505A1_0022
Figure DE102019100505A1_0023
Figure DE102019100505A1_0024
Zusätzlich können in einer Ausführungsform Strahlendifferentiale zum Berechnen des Textur-Detaillierungsgrads zur Strahlverfolgung verwendet werden. Diese Lösung kann Ergebnisse hoher Qualität bereitstellen. Das Implementieren von Strahlendifferentialen mit einem G-Puffer kann eine Leistung zum Berechnen eines Textur-Detaillierungsgrads zur Strahlverfolgung unter Verwendung von Strahlendifferentialen verbessern.Table 2 includes an exemplary pseudocode for performing ray tracing while handling recursive reflections, according to one embodiment. Of course, it should be noted that the pseudocode shown in Table 2 is presented for illustrative purposes only and thus should not be construed as limiting in any way.
Figure DE102019100505A1_0022
Figure DE102019100505A1_0023
Figure DE102019100505A1_0024
In addition, in one embodiment, beam differentials may be used to calculate the texture detail level for ray tracing. This solution can provide high quality results. Implementing beam differentials with a G buffer can improve performance for computing a texture detail level for beam tracing using beam differentials.

Strahlendifferentialeradiation differentials

Strahlendifferentiale können ein Verfahren zur Handhabung von gefilterten Textur-Lookups umfassen. In einer Ausführungsform sei angenommen, dass ein Strahl dargestellt wird als: r ( t ) = o + t d ^ ,

Figure DE102019100505A1_0025
wobei o der Strahlenursprung und d̂ die normierte Strahlrichtung ist, d.h., d̂ = d/∥d∥. Das entsprechende Strahlendifferential kann aus vier Vektoren bestehen: { o x , o y , d ^ x , d ^ y } ,
Figure DE102019100505A1_0026
wobei (x, y) die Bildschirm-Koordinaten mit einer Einheit zwischen benachbarten Pixeln sind. Eine beispielhafte Ausführungsform kann die Verfolgung eines Strahlendifferentials umfassen, wie es in der Szene umherspringt und mit Oberflächen wechselwirkt. Alle Wechselwirkungen, z.B. Reflexionen, Refraktionen, Transfer eines Strahls von einem Punkt zu einem anderen, können differenziert werden und auf das ankommende Strahlendifferential angewendet werden, um ein Anderes als Ausgabe zu erzeugen. Wenn ein Textur-Lookup benötigt wird, kann das aktuelle Strahlendifferential verwendet werden, um den Textur-Footprint zu schätzen. Radiation differentials may include a method of handling filtered texture lookups. In one embodiment, assume that a ray is represented as: r ( t ) = O + t d ^ .
Figure DE102019100505A1_0025
where o is the ray origin and d is the normalized ray direction, ie, d = d / ∥d∥. The corresponding radiation differential can consist of four vectors: { O x . O y . d ^ x . d ^ y } .
Figure DE102019100505A1_0026
where (x, y) are the screen coordinates with a unit between adjacent pixels. An exemplary embodiment may include tracking a beam differential as it travels around the scene and interacts with surfaces. All interactions, eg reflections, refractions, transfer of a beam from one point to another, can be differentiated and applied to the incoming beam differential to produce something other than output. If a texture lookup is needed, the current ray differential can be used to estimate the texture footprint.

In einer Ausführungsform kann ein Strahlendifferential für die Augenstrahlrichtung modifiziert werden. Die nicht-normierte Strahlrichtung d für eine Pixel-Startkoordinate (x, y) und mit Bildschirmauflösung s = (sx, sy) kann in DXR als p = ( x + 0.5 s x , y + 0.5 s y ) , c = ( 2 p x 1,2 p y 1 ) , d ( x , y ) = c x r + c y u + v = ( 2 x + 1 s x 1 ) r + ( 2 y + 1 s y 1 ) u + v ,

Figure DE102019100505A1_0027
oder unter Verwendung einer geringfügigen Modifikation dieser Anordnung erzeugt werden. Hier, P ∈ [0, 1]2, wobei die 0,5s hinzugefügt wurden, um in die Mitte jedes Pixels zu gelangen, d.h., das Gleiche wie in DirectX und OpenGL und somit c ∈ [-1, 1]. Die rechte, orthonormale Kamerabasis ist {r', u', v'}, d.h., r' ist der rechte Vektor, u' ist der Aufwärts-Vektor und v' ist der Ansicht-Vektor, der in Richtung der Kameraposition zeigt. Zu beachten ist, dass {r, u, v} in Gleichung 20 verwendet wird und diese lediglich skalierte Versionen der Kamerabasis sind, d.h., { r , u , v } = { a f r ' , f u ' , v ' }
Figure DE102019100505A1_0028
wobei α das Aspektverhältnis und f = tan(ω/2) ist, wobei ω das vertikale Blickfeld ist. Für Augenstrahlen werden die Strahlendifferentiale für die Richtung berechnet als: d x = ( d d ) r ^ ( d r ^ ) d ( d d ) 3 2 ,
Figure DE102019100505A1_0029
wobei r̂ der Vektor von einem Pixel zu dem nächsten ist, der in unserem Fall ist: r ^ = d ( x + 1, y ) d ( x , y ) = 2 a f s x r' ,
Figure DE102019100505A1_0030
abgeleitet unter Verwendung von Gleichung 20. Für die y-Richtung wird Gleichung 22 verwendet und r̂ mit û ersetzt, was ist: u ^ = d ( x , y + 1 ) d ( x , y ) = 2 f s y u ' .
Figure DE102019100505A1_0031
In one embodiment, a beam differential for the eye beam direction may be modified. The non-normalized beam direction d for a pixel start coordinate (x, y) and with screen resolution s = (s x , s y ) can be used in DXR as p = ( x + 0.5 s x . y + 0.5 s y ) . c = ( 2 p x - 1.2 p y - 1 ) . d ( x . y ) = c x r + c y u + v = ( 2 x + 1 s x - 1 ) r + ( 2 y + 1 s y - 1 ) u + v .
Figure DE102019100505A1_0027
or by using a slight modification of this arrangement. Here, P ∈ [0, 1] 2 , where the 0.5s were added to get into the middle of each pixel, ie, the same as in DirectX and OpenGL, and thus c ∈ [-1, 1]. The right orthonormal camera base is {r ', u', v '}, ie, r' is the right vector, u 'is the up vector, and v' is the view vector pointing towards the camera position. Note that {r, u, v} is used in Equation 20 and these are only scaled versions of the camera base, ie { r . u . v } = { a f r ' . - f u ' . - v ' }
Figure DE102019100505A1_0028
where α is the aspect ratio and f = tan (ω / 2), where ω is the vertical field of view. For ophthalmic rays, the ray differentials for the direction are calculated as: d x = ( d d ) r ^ - ( d r ^ ) d ( d d ) 3 2 .
Figure DE102019100505A1_0029
where r is the vector from one pixel to the next, which in our case is: r ^ = d ( x + 1, y ) - d ( x . y ) = 2 a f s x r ' .
Figure DE102019100505A1_0030
derived using equation 20. For the y direction, equation 22 is used and r replaced with û, which is: u ^ = d ( x . y + 1 ) - d ( x . y ) = - 2 f s y u ' ,
Figure DE102019100505A1_0031

Dies kann alles sein, was benötigt wird, um das Strahlendifferential für Augenstrahlen einzurichten.This can be anything that is needed to set up the beam differential for eye beams.

Strahlendifferentiale mit G-PufferRadiation differentials with G buffer

Für die Echtzeit-Strahlverfolgung können die Augenstrahlen mit Rasterisierung in einem G-Puffer gerendert werden. Beim Kombinieren von Strahlendifferentialen mit einem G-Puffer können die Augenstrahlen nicht wie oben eingestellt werden. Stattessen kann dies mit Hilfe von dem G-Puffer durchgeführt werden. Hier werden drei derartige Verfahren präsentiert, wobei angenommen wird, dass ein G-Puffer mit Normalen, n ^ ,

Figure DE102019100505A1_0032
und Abständen, t, zu dem nächsten Treffer erzeugt wurde. Die Verfahren beschreiben dann, wie das Strahlendifferential eingerichtet wird, wenn der erste Strahl von der Position im G-Puffer aufgenommen wird.For real-time ray tracing, the ophthalmic rays can be rasterized in a G buffer. When combining beam differentials with a G buffer, the eye beams can not be adjusted as above. Instead, this can be done with the help of the G-buffer. Here, three such methods are presented assuming that a G-buffer with normal, n ^ .
Figure DE102019100505A1_0032
and distances, t, to the next hit was generated. The methods then describe how the beam differential is established when the first beam is picked up from the position in the G buffer.

Ein G-Puffer ist ein Puffer von Bildschirmgröße, der unter Verwendung eines Pixel-Shader erzeugt wird. Im Allgemeinen wird die Szene unter Verwendung von Rasterisierung (nicht Strahlverfolgung) unter Verwendung der GPU gerendert und ein Satz von Werten wird zu jedem Pixel im G-Puffer ausgespeichert. Anschließende Renderdurchgänge können dann die Information im G-Puffer ausnutzen. Der G-Puffer wird verwendet, weil die GPU aktuell schneller ist, um die Sichtbarkeit vom Auge im Vergleich mit dem Verfolgen von Augenstrahlen unter Verwendung von Strahlverfolgung zu rasterisieren (was die gleichen Ergebnisse erzeugen würde, jedoch langsamer). Eine diffuse Texturfarbe, eine Normale, eine Welt-Raum-Position, usw. kann in dem G-Puffer gespeichert werden. Alles findet hier Anwendung. Für die Zwecke hier wurden jedoch die Normale n ^

Figure DE102019100505A1_0033
und die Abstände, t, zu den Trefferpunkten normiert. Was nach dem G-Puffer-Durchgang folgt, ist Verfolgen, was mit einem Strahlerzeugungsdurchlauf beginnt, der Strahlen erzeugt. Diese werden von den Positionen erzeugt, die im G-Puffer gespeichert sind (was indirekt durch Speichern des Abstands t durchgeführt wird). Die nachstehenden Verfahren werden alle ihre Arbeit in diesem Strahlerzeugungsdurchgang durchführen und das Ziel ist, eine Strahlendifferentialdarstellung zu erzeugen, so dass das korrekte Strahlendifferential von dem ersten Trefferpunkt und weiter hinaus in der dreidimensionalen Szene verfolgt werden kann.A G-buffer is a screen-sized buffer generated using a pixel shader. In general, the scene is rendered using rasterization (not ray tracing) using the GPU, and a set of values is dumped to each pixel in the G buffer. Subsequent render passes may then exploit the information in the G buffer. The G buffer is used because the GPU is currently faster in order to rasterise eye visibility as compared to eye ray tracking using ray tracing (which would produce the same results but slower). A diffuse texture color, a normal, a world space position, etc. can be stored in the G buffer. Everything is used here. For the purposes here, however, the normals n ^
Figure DE102019100505A1_0033
and normalizes the distances, t, to the hit points. What follows after the G buffer pass is tracking, which begins with a beam generation pass that produces beams. These are generated from the positions stored in the G buffer (which is done indirectly by storing the distance t). The following procedures will all do their work in this beam generation pass and the goal is to generate a beam differential representation so that the correct beam differential can be tracked from the first hit point and farther out in the three-dimensional scene.

1-dir Verfahren1-you procedure

Der Gedanke dieses Verfahrens ist, einfach auf den G-Puffer zur rechten und über dem aktuellen Pixel zuzugreifen und ein Strahlendifferential aus diesen Werten zu erzeugen. Die Normalen und die Abstände, t für das aktuelle Pixel (x, y) und für die Nachbarn (x + 1, y) und (x, y + 1) werden aus dem G-Puffer ausgelesen. Es sei dies mit n ^ 0 : 0

Figure DE102019100505A1_0034
für das aktuelle Pixel, n ^ + 1 : 0
Figure DE102019100505A1_0035
für das Pixel zur rechten und n ^ 0 : + 1
Figure DE102019100505A1_0036
für das obige Pixel und auf ähnliche Weise für weitere Variablen bezeichnet. Die Augenstrahlrichtungen, e ^ ,
Figure DE102019100505A1_0037
für diese Nachbarn werden als nächstes unter Verwendung von Standardverfahren berechnet (z.B. unter Verwendung von Gleichung 18). An diesem Punkt wird das Strahlendifferential des Strahlenursprungs an dem ersten Treffer berechnet als: o x = t + 1 : 0 e ^ + 1 : 0 t 0 : 0 e ^ 0 : 0 ,
Figure DE102019100505A1_0038
und auf ähnliche Weise für ∂o/∂y. Die Strahlendifferentialrichtung wird berechnet als: d ^ x = r ( e ^ + 1 : 0 , n ^ + 1 : 0 ) r ( e ^ 0 : 0 , n ^ 0 : 0 ) ,
Figure DE102019100505A1_0039
wobei r die Shader-Funktion reflect() und e ^
Figure DE102019100505A1_0040
die Strahlrichtung von dem Auge ist. Ähnliche Berechnungen werden für d ^ / y
Figure DE102019100505A1_0041
durchgeführt. An diesem Punkt haben wir alle Komponenten, { o/ x , o/ y , d ^ / x d ^ / y } ,
Figure DE102019100505A1_0042
des Strahlendifferentials, was bedeutet, dass eine Strahlverfolgung mit Strahlendifferentialen von dem ersten Treffer beginnen kann.The idea of this method is to simply access the G buffer to the right and above the current pixel and generate a beam differential from these values. The normals and distances, t, for the current pixel (x, y) and for the neighbors (x + 1, y) and (x, y + 1) are read out of the G buffer. It is with n ^ 0 : 0
Figure DE102019100505A1_0034
for the current pixel, n ^ + 1 : 0
Figure DE102019100505A1_0035
for the pixel to the right and n ^ 0 : + 1
Figure DE102019100505A1_0036
for the above pixel and similarly for other variables. The eye beam directions, e ^ .
Figure DE102019100505A1_0037
for these neighbors next calculated using standard methods (eg using Equation 18). At this point, the ray differential of the ray origin at the first hit is calculated as: O x = t + 1 : 0 e ^ + 1 : 0 - t 0 : 0 e ^ 0 : 0 .
Figure DE102019100505A1_0038
and similarly for ∂o / ∂y. The beam differential direction is calculated as: d ^ x = r ( e ^ + 1 : 0 . n ^ + 1 : 0 ) - r ( e ^ 0 : 0 . n ^ 0 : 0 ) .
Figure DE102019100505A1_0039
where r is the shader function reflect () and e ^
Figure DE102019100505A1_0040
is the beam direction of the eye. Similar calculations will be made for d ^ / y
Figure DE102019100505A1_0041
carried out. At this point, we have all the components, { O/ x . O/ y . d ^ / x d ^ / y } .
Figure DE102019100505A1_0042
of the beam differential, meaning that ray tracing can begin with beam differentials from the first hit.

Zu beachten ist, dass das 1-dir Verfahren nicht etwas ist, dass wir empfehlen würden, weil es eine schlechte Qualität entlang vieler Tiefen-Diskontinuitäten aufweist. Es wird hier präsentiert, um imstande zu sein, das nächste Verfahren auf eine einfache Art und Weise zu erläutern. Ebenfalls zu beachten ist, dass in Tabelle 1 die Unterschiede zwischen dem 2-dir-Verfahren und dem zusätzlichen G-Puffer-Speicherverfahren (nachstehend) ersichtlich sind. Sie weisen unterschiedliche Merkmale auf.Note that the 1-dir method is not something we would recommend because it has poor quality along many depth discontinuities. It is presented here to be able to explain the next process in a simple manner. It should also be noted that Table 1 shows the differences between the 2-dir method and the additional G-buffer storage method (below). They have different characteristics.

2-dir-Verfahren2-you process

Das obige Verfahren ist schnell, wobei jedoch manchmal unterschiedliche Oberflächen beim Vergleich mit dem Pixel zur rechten und oberhalb getroffen werden. Eine einfache Verbesserung ist, zu prüfen, ob |t+1:0 - t0:0| > ε, wobei ε eine kleine Zahl ist (z.B. 0.01, usw.) und wenn ja, stattdessen auf den G-Puffer bei -1:0 zuzugreifen und das eine mit dem kleinsten Unterschied in t zu verwenden. Die gleiche Vorgehensweise wird für die y-Richtung verwendet. Dieses Verfahren kann die Ergebnisse des 1-dir-Verfahrens verbessern.The above method is fast, but sometimes different surfaces are hit when compared with the pixel to the right and above. A simple improvement is to check if | t +1: 0 - t 0: 0 | > ε, where ε is a small number (eg, 0.01, etc.) and if so, instead, access the G buffer at -1: 0 and use the one with the smallest difference in t. The same procedure is used for the y direction. This method can improve the results of the 1-dir method.

Zusätzliches G-Puffer-SpeicherverfahrenAdditional G-buffer storage method

Dieses Verfahren berechnet und speichert das gesamte Strahlendifferential an dem ersten Treffer im G-Puffer. Die ∂o/∂x und ∂o/∂y werden unter Verwendung der eingebauten Funktionen ddx() und ddy() auf dem Trefferpunkt für das aktuelle Pixel berechnet. Normale für benachbarte Pixel werden unter Verwendung dieser Funktionen ebenfalls erhalten. Die reflektierten Strahlrichtungen können unter Verwendung dieser Normalen und der differentialen Augenstrahlrichtungen berechnet werden. Dieses Verfahren gibt die gleichen Ergebnisse wie das ursprüngliche Strahlendifferential-Verfahren, d.h., ohne einen G-Pufferdurchgang.This method computes and stores the entire beam differential at the first hit in the G buffer. The ∂o / ∂x and ∂o / ∂y are calculated using the built-in functions ddx () and ddy () on the hit point for the current pixel. Normals for adjacent pixels are also obtained using these functions. The reflected beam directions can be calculated using these normals and the differential ophthalmic directions. This method gives the same results as the original beam differential method, that is, without a G buffer pass.

In einer Ausführungsform kann der G-Puffer-Durchgang modifiziert werden, um das gesamte Strahlendifferential in dem G-Puffer auszuspeichern. Wir tun dies aktuell wie nachstehend gezeigt, wobei passOut.color3-5 unterschiedliche Teile des G-Puffers sind.In one embodiment, the G buffer passage may be modified to deplete the entire beam differential in the G buffer. We are currently doing this as shown below, where passOut.color3-5 are different parts of the G-buffer.

Tabelle 3 umfasst einen beispielhaften Pseudocode zum Modifizieren eines G-Pufferdurchgangs, um ein gesamtes Strahlendifferential im G-Puffer gemäß einer Ausführungsform zu speichern. Natürlich sollte beachtet werden, dass der in Tabelle 3 gezeigte Pseudocode lediglich für veranschaulichende Zwecke dargelegt wird und somit nicht in irgendeiner Art und Weise als begrenzend ausgelegt werden sollte. Tabelle 3 float3 dOdx = ddx(sd.posW); float3 dOdy = ddy(sd.posW); float3 dNdx = ddx(sd.N); float3 dNdy = ddy(sd.N); float3 Nx = normalize(sd.N + dNdx); float3 Ny = normalize(sd.N + dNdy); float3 tmp = sd.posW - gCamera.posW; float3 Dx = normalize(tmp + dOdx); float3 Dy = normalize(tmp + dOdy); float3 R = reflect(-sd.V, sd.N); float3 dRdx = reflect(Dx, Nx) - R; float3 dRdy = reflect(Dy, Ny) - R; passOut.color3 = float4(dOdx.x, dOdy.x, dRdx.x, dRdy.x); passOut.color4 = float4(dOdx.y, dOdy.y, dRdx.y, dRdy.y); passOut.color5 = float4(dOdx.z, dOdy.z, dRdx.z, dRdy.z); Table 3 includes an exemplary pseudo-code for modifying a G-buffering pass to store an entire beam differential in the G-buffer according to one embodiment. Of course, it should be noted that the pseudocode shown in Table 3 is presented for illustrative purposes only and thus should not be construed as limiting in any way. Table 3 float3 dOdx = ddx (sd.posW); float3 dOdy = ddy (sd.posW); float3 dNdx = ddx (sd.N); float3 dNdy = ddy (sd.N); float3 Nx = normalize (sd.N + dNdx); float3 Ny = normalize (sd.N + dNdy); float3 tmp = sd.posW - gCamera.posW; float3 Dx = normalize (tmp + dOdx); float3 Dy = normalize (tmp + dOdy); float3 R = reflect (-sd.V, sd.N); float3 dRdx = reflect (Dx, Nx) - R; float3 dRdy = reflect (Dy, Ny) - R; passOut.color3 = float4 (dOdx.x, dOdy.x, dRdx.x, dRdy.x); passOut.color4 = float4 (dOdx.y, dOdy.y, dRdx.y, dRdy.y); passOut.color5 = float4 (dOdx.z, dOdy.z, dRdx.z, dRdy.z);

17 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1700 zum Durchführen einer Textur-Detaillierungsgrad-Näherung unter Benutzung eines oder mehrerer Strahlendifferentiale mit einem G-Puffer gemäß einer Ausführungsform. Wie in Operation 1702 gezeigt, ist eine zu rendernde Szene gekennzeichnet. Außerdem wird, wie in Operation 1704 gezeigt, ein G-Puffer der Szene gerendert. Beispielsweise kann ein oder mehrere Attribute in den G-Puffer für jedes Pixel in der Szene geschrieben werden. Ferner wird, wie in Operation 1706 gezeigt, eine Strahlverfolgung für die Szene gestartet. Des Weiteren wird, wie in Operation 1708 gezeigt, während der Strahl verfolgung ein Strahlendifferential durch Zugreifen auf den G-Puffer erzeugt. In einer Ausführungsform kann auf Einträge im G-Puffer für Pixel zur rechten des aktuellen Pixels und/oder zur linken des aktuellen Pixels innerhalb des G-Puffers zugegriffen werden. 17 illustrates a flowchart of a method 1700 for performing a texture detail level approximation using one or more beam differentials with a G-buffer according to an embodiment. As in operation 1702 shown, a scene to be rendered is indicated. Besides, as in operation 1704 shown a G-buffer of the scene rendered. For example, one or more attributes may be written to the G buffer for each pixel in the scene. Further, as in Operation 1706 shown a ray tracing for the scene started. Furthermore, as in Operation 1708 while beam tracing produces a beam differential by accessing the G buffer. In one embodiment, entries in the G-buffer may be accessed for pixels to the right of the current pixel and / or to the left of the current pixel within the G-buffer.

In einer anderen Ausführungsform kann auf Einträge in dem G-Puffer für Pixel über dem aktuellen Pixel und/oder unter dem aktuellen Pixel innerhalb des G-Puffers zugegriffen werden. In einer anderen Ausführungsform kann auf G-Puffereinträge für Pixel zugegriffen werden, die sowohl horizontal als auch vertikal am nächsten zu dem aktuellen Pixel sind.In another embodiment, entries in the G buffer may be accessed for pixels above the current pixel and / or below the current pixel within the G buffer. In another embodiment, G buffer entries may be accessed for pixels that are both horizontally and vertically closest to the current pixel.

Ebenfalls wird, wie in Operation 1710 gezeigt, das erzeugte Strahlendifferential an einen aktuellen Strahl angehängt. Außerdem wird, wie in Operation 1712 gezeigt, das erzeugte Strahlendifferential verfolgt.Also, as in Operation 1710 shown attached the generated radiation differential to a current beam. Besides, as in operation 1712 shown tracking the generated radiation differential.

Während verschiedene Ausführungsformen oben beschrieben wurden, versteht es sich, dass sie lediglich mittels Beispiel und nicht durch Beschränkung präsentiert wurden. Somit sollte die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch beliebige der oben-beschriebenen beispielhaften Ausführungsformen beschränkt werden, sondern sollte nur gemäß der folgenden Ansprüche und ihrer Äquivalente definiert werden.While various embodiments have been described above, it will be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of a preferred embodiment should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.

ParallelverarbeitungsarchitekturParallel processing architecture

2 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 200 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 200 ein Multi-Threaded-Prozessor bzw. mehrsträngiger Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist. Die PPU 200 ist eine Latenz-verbergende Architektur, die ausgestaltet ist, um eine große Anzahl von Threads bzw. Strängen parallel zu verarbeiten. Ein Thread bzw. Strang (d.h. ein Ausführungsthread) ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 200 ausgeführt zu werden. In einer Ausführungsform ist die PPU 200 eine Graphikverarbeitungseinheit (GPU), die konfiguriert ist, um eine Graphik-Rendering-Pipeline zur Verarbeitung von dreidimensionalen (3D) Graphikdaten zu implementieren, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeige(LCD)-Vorrichtung, zu erzeugen. In anderen Ausführungsformen kann die PPU 200 zum Durchführen von Allzweckberechnungen benutzt werden. Während ein beispielhafter paralleler Prozessor hier für veranschaulichende Zwecke bereitgestellt wird, sei nachdrücklich bemerkt, dass ein derartiger Prozessor lediglich für veranschaulichende Zwecke dargelegt wird, und dass ein beliebiger Prozessor benutzt werden kann, um dasselbe zu ergänzen und/oder zu ersetzen. 2 illustrates a parallel processing unit (PPU) 200 according to one embodiment. In one embodiment, the PPU 200 a multi-threaded processor implemented on one or more integrated circuit devices. The PPU 200 is a latency-concealing architecture designed to process a large number of threads in parallel. A thread (ie, a thread of execution) is an instantiation of a set of instructions configured to by the PPU 200 to be executed. In one embodiment, the PPU 200 a graphics processing unit (GPU) configured to implement a graphics rendering pipeline for processing three-dimensional (3D) graphics data to display two-dimensional (2D) image data for display on a display device such as a liquid crystal display (LCD) device; to create. In other embodiments, the PPU 200 used for performing general purpose calculations. While an exemplary parallel processor is provided herein for illustrative purposes, it should be emphasized that such processor is presented for illustrative purposes only, and that any processor may be used to supplement and / or replace the same.

Wie in 2 gezeigt, umfasst die PPU 200 eine Eingabe/Ausgabe(E/A)-Einheit 205, eine Host-Schnittstelleneinheit 210, eine Frontend-Einheit 215, eine Planer-Einheit 220, eine Arbeitsverteilungs-Einheit 225, einen Hub 230, eine Kreuzschiene (Xbar) 270, einen oder mehrere allgemeine Verarbeitungscluster (GPCs) 250 und eine oder mehrere Partitions-Einheiten 280. Die PPU 200 kann mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über einen Systembus 202 verbunden werden. Die PPU 200 kann ebenfalls mit einem lokalen Speicher verbunden werden, der eine Anzahl von Speichervorrichtungen 204 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von Direktzugriffsspeicher(DRAM)-Vorrichtungen umfassen.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 planner unit 220 , a work distribution unit 225 , a hub 230 , a crossbar (Xbar) 270 , one or more general processing clusters (GPCs) 250 and one or more partition units 280 , The PPU 200 can with a host processor or other peripheral devices via a system bus 202 get connected. The PPU 200 can also be connected to a local memory containing a number of memory devices 204 includes. In one embodiment, the local memory may include a number of random access memory (DRAM) devices.

Die E/A-Einheit 205 ist konfiguriert, um Kommunikationen (d.h. Befehle, Daten, usw.) von einem Host-Prozessor (nicht gezeigt) über den Systembus 202 zu übertragen und zu empfangen. Die E/A-Einheit 205 kann mit dem Host-Prozessor direkt über den Systembus 202 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise einer Speicherbrücke, kommunizieren. In einer Ausführungsform implementiert die E/A-Einheit 205 eine Umfangskomponenten-Zwischenverbindungsexpress(PCIe)-Schnittstelle für Kommunikationen über einen PCIe-Bus. In alternativen Ausführungsformen kann die E/A-Einheit 205 andere Arten von bekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen implementieren.The I / O unit 205 is configured to communicate (ie, commands, data, etc.) from a host processor (not shown) via the system bus 202 to transmit and receive. The I / O unit 205 can with the host processor directly over the system bus 202 or communicate through one or more intermediate devices, such as a memory bridge. In one embodiment, the I / O unit implements 205 a Peripheral Component Interconnect Express (PCIe) interface for communications over a PCIe bus. In alternative embodiments, the I / O unit 205 implement other types of known interfaces for communicating with external devices.

Die E/A-Einheit 205 ist mit einer Host-Schnittstelleneinheit 210 gekoppelt, die Pakete decodiert, die über den Systembus 202 empfangen wurden. In einer Ausführungsform stellen die Pakete Befehle dar, die konfiguriert sind, um die PPU 200 zu veranlassen, verschiedene Operationen durchzuführen. Die Host-Schnittstelleneinheit 210 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 200, wie es die Befehle spezifizieren können. Beispielsweise können einige Befehle an die Frontend-Einheit 215 übertragen werden. Andere Befehle können an den Hub 230 oder andere Einheiten der PPU 200, wie beispielsweise eine oder mehrere Kopiermaschinen, einen Video-Codierer, einen Video-Decodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt) übertragen werden. Mit anderen Worten ist die Host-Schnittstelleneinheit 210 konfiguriert, um Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 200 weiterzuleiten.The I / O unit 205 is with a host interface unit 210 coupled, the packets decoded over the system bus 202 were received. In one embodiment, the packets represent commands configured to the PPU 200 to cause to perform various operations. The host interface unit 210 transmits the decoded instructions to various other units of the PPU 200 as the commands can specify. For example, some commands can be sent to the frontend unit 215 be transmitted. Other commands can be sent to the hub 230 or other units of the PPU 200 , such as one or more copy machines, a video encoder, a video decoder, a power management unit, etc. (not explicitly shown). In other words, the host interface unit 210 configured to communicate between and among the various logical units of the PPU 200 forward.

In einer Ausführungsform codiert ein Programm, das von dem Host-Prozessor ausgeführt wird, einen Befehlsstrom in einem Puffer, welcher der PPU 200 Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann eine Anzahl von Anweisungen und Daten umfassen, die von diesen Anweisungen zu verarbeiten sind. Der Puffer ist eine Region in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 200 zugänglich ist (d.h. Lesen/Schreiben). Beispielsweise kann die Host-Schnittstelleneinheit 210 konfiguriert sein, um auf den Puffer in einem Systemspeicher, der mit dem Systembus 202 verbunden ist, über Speicheranfragen, die über den Systembus 202 übertragen werden, durch die E/A-Einheit 205 zuzugreifen. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger an den Start des Befehlsstroms zu der PPU 200. Die Host-Schnittstelleneinheit 210 stellt der Frontend-Einheit 215 Zeiger auf einen oder mehrere Befehlsströme bereit. Die Frontend-Einheit 215 verwaltet den einen oder mehrere Ströme, wobei Befehle aus den Strömen gelesen und Befehle an die verschiedenen Einheiten der PPU 200 weitergeleitet werden.In one embodiment, a program executed by the host processor encodes a command stream in a buffer that the PPU 200 Provides workloads for processing. A workload may include a number of instructions and data to be processed by these instructions. The buffer is a region in memory owned by both the host processor and the PPU 200 is accessible (ie read / write). For example, the host interface unit 210 be configured to access the buffer in a system memory that is connected to the system bus 202 connected via memory requests over the system bus 202 transmitted through the I / O unit 205 access. In one embodiment, the host processor writes the instruction stream into the buffer and then transmits a pointer to the start of the instruction stream to the PPU 200 , The host interface unit 210 Represents the frontend unit 215 Pointer to one or more command streams ready. The frontend unit 215 manages the one or more streams, with instructions read from the streams and commands to the various units of the PPU 200 to get redirected.

Die Frontend-Einheit 215 ist mit eine Planer-Einheit 220 gekoppelt, welche die verschiedenen GPCs 250 konfiguriert, um Aufgaben zu verarbeiten, die durch den einen oder mehrere Ströme definiert sind. Die Planer-Einheit 220 ist konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planer-Einheit 220 verwaltet werden. Der Zustand kann angeben, welchem GPC 250 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob eine Prioritätsebene der Aufgabe zugeordnet ist und so weiter. Die Planer-Einheit 220 verwaltet die Ausführung einer Mehrzahl von Aufgaben auf dem einen oder mehreren GPCs 250.The frontend unit 215 is with a planner unit 220 coupled to the various GPCs 250 configured to process tasks defined by the one or more streams. The planner unit 220 is configured to track state information concerning various tasks performed by the scheduler unit 220 to get managed. The state may indicate which GPC 250 a task is assigned, whether the task is active or inactive, if a priority level is assigned to the task, and so on. The planner unit 220 manages the execution of a plurality of tasks on the one or more GPCs 250 ,

Die Planer-Einheit 220 ist mit einer Arbeitsverteilungs-Einheit 225 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf den GPCs 250 zu versenden. Die Arbeitsverteilungs-Einheit 225 kann eine Anzahl von eingeplanten Aufgaben verfolgen, die von der Planer-Einheit 220 empfangen werden. In einer Ausführungsform verwaltet die Arbeitsverteilungs-Einheit 225 einen Pool für anhängige Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 250. Der Pool für anhängige Aufgaben kann eine Anzahl von Schlitzen (z.B. 32 Schlitze) umfassen, die Aufgaben enthalten, die zugewiesen sind, von einem bestimmten GPC 250 verarbeitet zu werden. Der Pool für aktive Aufgaben kann eine Anzahl von Schlitzen (z.B. 4 Schlitze) für Aufgaben umfassen, die von den GPCs 250 aktiv verarbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe abschließt, wird diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 250 geräumt und eine der anderen Aufgaben wird aus dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 250 inaktiv war, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann kann die aktive Aufgabe aus dem GPC 250 geräumt und zu dem Pool für anhängige Aufgaben zurückgeführt werden, während eine andere Aufgabe in dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant wird.The planner unit 220 is with a work distribution unit 225 coupled, which is configured to perform tasks on the GPCs 250 to send. The work distribution unit 225 can track a number of scheduled tasks by the scheduler unit 220 be received. In one embodiment, the work distribution unit manages 225 a pending task pool and an active task pool for each of the GPCs 250 , The pending task pool may include a number of slots (eg 32 slots) containing tasks assigned by a particular GPC 250 to be processed. The active task pool may include a number of slots (eg, 4 slots) for tasks performed by the GPCs 250 actively processed. If a GPC 250 completing the execution of a task, this task is taken from the active task pool for the GPC 250 vacated and one of the other tasks is selected from the pool for pending tasks and to run on the GPC 250 planned. If an active task on the GPC 250 was inactive, such as while waiting for a data dependency to be resolved, then the active task can be taken out of the GPC 250 vacated and returned to the pool for pending tasks, while another task is selected in the pool for pending tasks and to run on the GPC 250 is scheduled.

Die Arbeitsverteilungs-Einheit 225 kommuniziert mit dem einen oder mehreren GPCs 250 über eine Kreuzschiene bzw. XBar 270. Die XBar 270 ist ein Zwischenverbindungs-Netzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 koppelt. Beispielsweise kann die XBar 270 konfiguriert sein, um die Arbeitsverteilungs-Einheit 225 mit einem bestimmten GPC 250 zu koppeln. Obwohl nicht explizit gezeigt, sind eine oder mehrere andere Einheiten der PPU 200 mit der Host-Einheit 210 gekoppelt. Die anderen Einheiten können ebenfalls mit der XBar 270 über einen Hub 230 verbunden sein. The work distribution unit 225 communicates with the one or more GPCs 250 via a crossbar or XBar 270 , The XBar 270 is an interconnection network that many of the units of PPU 200 with other units of PPU 200 coupled. For example, the XBar 270 be configured to the work distribution unit 225 with a particular GPC 250 to pair. Although not explicitly shown, one or more other units are the PPU 200 with the host unit 210 coupled. The other units can also work with the XBar 270 over a hub 230 be connected.

Die Aufgaben werden von der Planer-Einheit 220 verwaltet und an einen GPC 250 durch die Arbeitsverteilungs-Einheit 225 versendet. Der GPC 250 ist konfiguriert, um die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 verbraucht werden, an einen unterschiedlichen GPC 250 über die XBar 270 weitergeleitet oder im Speicher 204 gespeichert werden. Die Ergebnisse können in den Speicher 204 über die Partitions-Einheiten 280 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 204 implementieren. In einer Ausführungsform umfasst die PPU 200 eine Anzahl U von Partitions-Einheiten 280, die gleich der Anzahl von separaten und unterschiedlichen Speichervorrichtungen 204 ist, die mit der PPU 200 gekoppelt sind. Eine Partitions-Einheit 280 wird nachstehend ausführlicher in Verbindung mit 3B beschrieben.The tasks are performed by the planner unit 220 managed and sent to a GPC 250 through the work distribution unit 225 sent. The GPC 250 is configured to process the task and generate results. The results may differ from other tasks within the GPC 250 be consumed to a different GPC 250 over the XBar 270 forwarded or in memory 204 get saved. The results can be stored in memory 204 about the partition units 280 written to a memory interface for reading and writing data to / from memory 204 to implement. In one embodiment, the PPU includes 200 a number U of partition units 280 equal to the number of separate and different storage devices 204 is that with the PPU 200 are coupled. A partition unit 280 will be discussed in more detail below 3B described.

In einer Ausführungsform führt ein Host-Prozessor einen Treiber-Kernel aus, der eine Anwendungsprogrammier-Schnittstelle (API) implementiert, die ermöglicht einer oder mehreren Anwendungen ermöglicht, die auf dem Host-Prozessor ausgeführt werden, Operationen zur Ausführung auf der PPU 200 einzuplanen. Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) erzeugen, welche den Treiber-Kernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiber-Kernel gibt Aufgaben an einen oder mehrere Ströme aus, die von der PPU 200 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von in Beziehung stehenden Threads umfassen, die hier als ein Warp bezeichnet werden. Ein Thread-Block kann sich auf eine Mehrzahl von Gruppen von Threads beziehen, die Anweisungen umfassen, um die Aufgabe durchzuführen. Threads in der gleichen Gruppe von Threads können Daten durch einen gemeinsam benutzten Speicher austauschen. In einer Ausführungsform umfasst eine Gruppe von Threads 32 in Beziehung stehende Threads.In one embodiment, a host processor executes a driver kernel that implements an application programming interface (API) that allows one or more applications executing on the host processor to perform operations on the PPU 200 schedule. An application may generate instructions (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 are processed. Each task may include one or more sets of related threads, referred to herein as a warp. A thread block may refer to a plurality of groups of threads that include instructions to perform the task. Threads in the same set of threads can swap data through shared memory. In one embodiment, a group of threads comprises 32 related threads.

3A veranschaulicht einen GPC 250 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3A gezeigt, umfasst jeder GPC 250 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 250 einen Pipeline-Manager 310, eine Vor-Raster-Operationen-Einheit (PROP) 315, eine Raster-Engine 325, eine Arbeitsverteilungs-Kreuzschiene (WDX) 380, eine Speicherverwaltungseinheit (MMU) 390 und einen oder mehrere Texturverarbeitungscluster (TPCs) 320. Es wird anerkannt, dass der GPC 250 von 3A andere Hardwareeinheiten anstatt von oder zusätzlich zu in 3A gezeigten Einheiten umfassen kann. 3A illustrates a GPC 250 the PPU 200 from 2 according to one embodiment. As in 3A shown, everyone includes GPC 250 a number of hardware units for processing tasks. In one embodiment, each GPC includes 250 a pipeline manager 310 , a pre-raster operations unit (PROP) 315 , a raster engine 325 , a Work Distribution Matrix (WDX) 380 , a storage management unit (MMU) 390 and one or more texture processing clusters (TPCs) 320 , It is recognized that the GPC 250 from 3A other hardware units instead of or in addition to 3A may include units shown.

In einer Ausführungsform wird der Betrieb des GPC 250 durch den Pipeline-Manager 310 gesteuert. Der Pipeline-Manager 310 verwaltet die Konfiguration des einen oder mehrerer TPCs 320 zur Verarbeitung von Aufgaben, die dem GPC 250 zugeteilt sind. In einer Ausführungsform kann der Pipeline-Manager 310 mindestens einen des einen oder mehrerer TPCs 320 konfigurieren, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein TPC 320 konfiguriert sein, um ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Manager 310 kann ebenfalls konfiguriert sein, um Pakete, die von der Arbeitsverteilungs-Einheit 225 empfangen werden, an die geeigneten logischen Einheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete an Festfunktions-Hardwareeinheiten in der PROP 315 und/oder der Raster-Engine 325 weitergeleitet werden, während andere Pakete an die TPCs 320 zur Verarbeitung durch die Primitiven-Engine 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 one or more TPCs 320 for processing tasks assigned to the GPC 250 allocated. In one embodiment, the pipeline manager 310 at least one of the one or more TPCs 320 configure to implement at least a portion of a graphics rendering pipeline. For example, a TPC 320 be configured to use a vertex shader program on the programmable streaming multiprocessor (SM) 340 perform. The pipeline manager 310 can also be configured to receive packets from the work distribution unit 225 to the appropriate logical units within the GPC 250 forward. For example, some packages may be attached to hard-function hardware units in the PROP 315 and / or the raster engine 325 be forwarded while other packages to the TPCs 320 for processing by the primitive engine 335 or the SM 340 can be forwarded.

Die PROP-Einheit 315 ist konfiguriert, um Daten, die von der Raster-Engine 325 und den TPCs 320 erzeugt werden, an eine Raster-Operationen-Einheit (ROP-Einheit) in der Partitions-Einheit 280 weiterzuleiten, die nachstehend ausführlicher beschrieben wird. Die PROP-Einheit 315 kann ebenfalls konfiguriert sein, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und dergleichen durchzuführen.The PROP unit 315 is configured to receive data from the raster engine 325 and the TPCs 320 to be generated to a raster operations unit (ROP unit) in the partition unit 280 to be described in more detail below. The PROP unit 315 may also be configured to perform color blending optimizations, organize pixel data, perform address translations, and the like.

Die Raster-Engine 325 umfasst eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen. In einer Ausführungsform umfasst die Raster-Engine 325 eine Setup-Engine, eine Grobraster-Engine, eine Aussonderungs-Engine, eine Abschneide-Engine, eine Feinraster-Engine und eine Kachel-verschmelzende-Engine. Die Setup-Engine empfängt transformierte Vertices und erzeugt Ebenengleichungen, die den geometrischen Primitiven zugeordnet sind, die durch die Vertices definiert werden. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformation (z.B. eine (x,y)-Abdeckungsmaske für eine Kachel) für die Primitive zu erzeugen. Die Ausgabe der Grobraster-Engine kann an die Aussonderungs-Engine übertragen werden, wo Fragmente, die Primitiven zugeordnet sind, die einen z-Test nicht bestehen, ausgesondert und an eine Abschneide-Engine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsstumpfes liegen, abgeschnitten werden. Diejenigen Fragmente, die Abschneidung und Aussonderung überleben, können an eine Feinraster-Engine weitergeben werden, um Attribute für die Pixelfragmente basierend auf den Ebenengleichungen zu erzeugen, die durch die Setup-Engine erzeugt werden. Die Ausgabe der Raster-Engine 325 umfasst Fragmente, die beispielsweise von einem Fragment-Shader zu verarbeiten sind, der innerhalb eines TPC 320 implementiert ist.The raster engine 325 includes a number of hard-function hardware units configured to perform various raster operations. In one embodiment, the raster engine includes 325 a setup engine, a coarse grid engine, a disambiguation engine, a truncation engine, a fine grid engine, and a tile merging engine. The setup engine receives transformed vertices and generates plane equations associated with the geometric primitives that pass through the vertices are defined. The plane equations are passed to the Grobraster engine to generate coverage information (eg, a (x, y) mask for a tile) for the primitives. The output of the coarse grid engine may be transferred to the discard engine where fragments associated with primitives that fail a z-test are discarded and transferred to a clipping engine where fragments that are out of viewing stub, be cut off. Those fragments that survive clipping and discarding may be passed to a fine grid engine to generate attributes for the pixel fragments based on the plane equations generated by the setup engine. The output of the raster engine 325 includes fragments to be processed by, for example, a fragment shader within a TPC 320 is implemented.

Jeder TPC 320, der in dem GPC 250 umfasst ist, umfasst einen M-Pipe-Controller (MPC) 330, eine Primitiven-Engine 335, einen oder mehrere SMs 340 und eine oder mehrere Textureinheiten 345. Der MPC 330 steuert den Betrieb des TPC 320, der von dem Pipeline-Manager 310 empfangene Pakete an die geeigneten Einheiten im TPC 320 weiterleitet. Beispielsweise können einem Vertex zugeordnete Pakete an die Primitiven-Engine 335 weitergeleitet werden, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute aus dem Speicher 204 zu holen. Im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 340 übertragen werden.Every TPC 320 who is in the GPC 250 includes an M-Pipe Controller (MPC) 330 , a primitive engine 335 , one or more SMs 340 and one or more texture units 345 , The MPC 330 controls the operation of the TPC 320 by the pipeline manager 310 received packets to the appropriate units in the TPC 320 forwards. For example, packets associated with a vertex may be sent to the primitive engine 335 which is configured to extract vertex attributes associated with the vertex from memory 204 pick up. In contrast, packets associated with a shader program can be sent to the SM 340 be transmitted.

In einer Ausführungsform sind die Textureinheiten 345 konfiguriert, um Texturabbildungen (z.B., ein 2D-Array von Texeln) aus dem Speicher 204 zu laden und die Texturabbildungen abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programme zu erzeugen, die von dem SM 340 ausgeführt werden. Die Textureinheiten 345 implementieren Textur-Operationen, wie beispielsweise Filter-Operationen unter Verwendung von Mip-Abbildungen (d.h. Texturabbildungen mit einem unterschiedlichen Grad an Detail). Die Textureinheit 345 wird ebenfalls als der Lade/Speicher-Weg für den SM 340 zu der MMU 390 verwendet. In einer Ausführungsform umfasst jeder TPC 320 zwei (2) Textureinheiten 345.In one embodiment, the texture units are 345 configured to save texture maps (eg, a 2D array of texels) from memory 204 and sample the texture maps to produce sampled texture values for use in shader programs written by the SM 340 be executed. The texture units 345 implement texture operations, such as filter operations using mip maps (ie, texture maps with a different degree of detail). The texture unit 345 is also called the load / store way for the SM 340 to the MMU 390 used. In one embodiment, each TPC comprises 320 two (2) texture units 345 ,

Der SM 340 umfasst einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. Jeder SM 340 umfasst mehrere Threads (ist multi-threaded) und ist konfiguriert, um eine Mehrzahl von Threads (z.B., 32 Threads) von einer bestimmten Gruppe von Threads nebenläufig auszuführen. In einer Ausführungsform implementiert der SM 340 eine SIMD(Einzelne-Anweisung, Mehrere-Daten)-Architektur, wobei jeder Thread in einer Gruppe von Threads (d.h. einem Warp) konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 340 eine SIMT(Einzelne Anweisung, Mehrere Threads)-Architektur, wobei jeder Thread in einer Gruppe von Threads konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten, wobei jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung zu divergieren. Mit anderen Worten können, wenn eine Anweisung für die Gruppe von Threads zur Ausführung versandt wird, einige Threads in der Gruppe von Threads aktiv sein, wodurch die Anweisung ausgeführt wird, während andere Threads in der Gruppe von Threads inaktiv sein können, wodurch keine Operation (NOP) durchgeführt wird, anstatt die Anweisung auszuführen. Der SM 340 kann ausführlicher nachstehend in Verbindung mit 4 beschrieben werden.The SM 340 includes a programmable streaming processor configured to process tasks represented by a number of threads. Every SM 340 includes multiple threads (is multi-threaded) and is configured to concurrently execute a plurality of threads (eg, 32 threads) from a particular group of threads. In one embodiment, the SM implements 340 an SIMD (single-instruction, multi-data) architecture, where each thread in a group of threads (ie, a warp) is configured to process a different set of data based on the same set of instructions. All threads in the set of threads execute the same statements. In another embodiment, the SM implements 340 a SIMT (Single Instruction, Multiple Threads) architecture, where each thread in a group of threads is configured to process a different set of data based on the same set of instructions, but allowing individual threads in the group of threads to diverge during execution. In other words, if an instruction is sent for execution by the group of threads, some threads in the group of threads may be active, causing the instruction to execute, while other threads in the group of threads may be inactive, causing no operation ( NOP) instead of executing the instruction. The SM 340 can be discussed in more detail below in connection with 4 to be discribed.

Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitions-Einheit 280 bereit. Die MMU 390 kann Übersetzung von virtuellen Adressen in physikalische Adressen, Speicherschutz und Arbitrierung von Speicheranfragen bereitstellen. In einer Ausführungsform stellt die MMU 390 einen oder mehrere Adressenübersetzungspuffer (TLBs = translation lookaside buffers) zum Verbessern 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 provide translation from virtual addresses to physical addresses, memory protection and arbitration of memory requests. In one embodiment, the MMU 390 one or more translation lookaside buffers (TLBs) for improving the translation of virtual addresses into physical addresses in the memory 204 ready.

3B veranschaulicht eine Partitions-Einheit 280 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3B gezeigt, umfasst die Partitions-Einheit 280 eine Raster-Operationen(ROP)-Einheit 350, einen L2-Cache-Speicher 360, eine Speicherschnittstelle 370 und eine L2-Kreuzschiene (XBar) 365. Die Speicherschnittstelle 370 ist mit dem Speicher 204 gekoppelt. Die Speicherschnittstelle 370 kann 16-, 32-, 64-, 128-Bit-Datenbusse oder dergleichen für Hochgeschwindigkeits-Datentransfer implementieren. In einer Ausführungsform umfasst die PPU 200 U Speicherschnittstellen 370, eine Speicherschnittstelle 370 pro Partitions-Einheit 280, wobei jede Partitions-Einheit 280 mit einer entsprechenden Speichervorrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu U Speichervorrichtungen 204, wie beispielsweise einem synchronen dynamischen Speicher mit wahlweisem Zugriff mit Graphikdoppeldatenrate der Version 5 (GDDR5 SDRAM) verbunden sein. In einer Ausführungsform implementiert die Speicherschnittstelle 370 eine DRAM-Schnittstelle und U ist gleich 8. 3B illustrates a partition unit 280 the PPU 200 from 2 according to one embodiment. As in 3B shown, includes the partition unit 280 a raster operations (ROP) unit 350 , an L2 cache 360 , a storage interface 370 and an L2 crossbar (XBar) 365 , The storage interface 370 is with the store 204 coupled. The storage interface 370 can implement 16, 32, 64, 128-bit data buses or the like for high-speed data transfer. In one embodiment, the PPU includes 200 U memory interfaces 370 , a storage interface 370 per partition unit 280 where each partition unit 280 with a corresponding storage device 204 connected is. For example, the PPU 200 with up to U storage devices 204 , such as a synchronous dynamic random access memory with graphics double data rate of the version 5 (GDDR5 SDRAM). In one embodiment, the memory interface implements 370 a DRAM interface and U equals 8.

In einer Ausführungsform implementiert die PPU 200 eine Mehrebenen-Speicherhierarchie. Der Speicher 204 ist außerhalb des Chips im SDRAM lokalisiert, der mit der PPU 200 verbunden ist. Daten aus dem Speicher 204 können geholt und in dem L2-Cache-Speicher 360 gespeichert werden, der innerhalb des Chips lokalisiert ist und zwischen den verschiedenen GPCs 250 gemeinsam benutzt wird. Wie gezeigt, umfasst jede Partitions-Einheit 280 einen Abschnitt des L2-Cache-Speichers 360, der einer entsprechenden Speichervorrichtung 204 zugeordnet ist. Cache-Speicher niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 250 implementiert werden. Beispielsweise kann jeder der SMs 340 einen L1-Cache-Speicher implementieren. Der L1-Cache-Speicher ist ein privater Speicher, der für einen bestimmten SM 340 dediziert ist. Daten von dem L2-Cache-Speicher 360 können geholt 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 gekoppelt. In one embodiment, the PPU implements 200 a multilevel storage hierarchy. The memory 204 is located outside the chip in the SDRAM, which is connected to the PPU 200 connected is. Data from the memory 204 can be fetched and in the L2 cache 360 stored within the chip and between the various GPCs 250 is shared. As shown, each partition unit includes 280 a section of the L2 cache 360 that of a corresponding storage device 204 assigned. Lower level caches may then be in different units within the GPCs 250 be implemented. For example, each of the SMs 340 implement an L1 cache. The L1 Cache memory is a private memory that is specific to a SM 340 is dedicated. Data from the L2 cache 360 can be fetched and stored in each of the L1 cache memory for processing in the functional units of the SMs 340 get saved. The L2 Cache memory 360 is with the memory interface 370 and the XBar 270 coupled.

Die ROP-Einheit 350 umfasst einen ROP-Manager 355, eine Farbeneinheit ROP (CROP-Einheit) 352 und eine Z ROP (ZROP) Einheit 354. Die CROP-Einheit 352 führt Raster-Operationen durch, welche die Pixelfarbe betreffen, wie beispielsweise Farbenkomprimierung, Pixelmischung und dergleichen. Die ZROP-Einheit 354 implementiert Tiefentesten in Verbindung mit der Raster-Engine 325. Die ZROP-Einheit 354 empfängt eine Tiefe für einen Abtastort, der einem Pixelfragment zugeordnet ist, von der Aussonderungs-Engine der Raster-Engine 325. Die ZROP-Einheit 354 prüft die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen Abtastort, der dem Fragment zugeordnet ist. Wenn das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die ZROP-Einheit 354 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 325. Der ROP-Manager 355 steuert den Betrieb der ROP-Einheit 350. Es wird anerkannt, dass sich die Anzahl von Partitions-Einheiten 280 von der Anzahl von GPCs 250 unterscheiden kann, und daher jede ROP-Einheit 350 mit jedem der GPCs 250 gekoppelt werden kann. Daher verfolgt der ROP-Manager 355 Pakete, die von den unterschiedlichen GPCs 250 empfangen werden, und bestimmt, zu welchem GPC 250 ein Ergebnis weitergeleitet wird, das durch die ROP-Einheit 350 erzeugt wurde. Die CROP-Einheit 352 und die ZROP-Einheit 354 sind mit dem L2-Cache-Speicher 360 über eine L2-XBar 365 gekoppelt.The ROP unit 350 includes a ROP manager 355 , one color unit ROP (CROP unit) 352 and a Z ROP (ZROP) unit 354 , The CROP unit 352 performs raster operations concerning the pixel color, such as color compression, pixel blending, and the like. The ZROP unit 354 implements depth tests in conjunction with the raster engine 325 , The ZROP unit 354 receives a depth for a sample location associated with a pixel fragment from the screening engine of the raster engine 325 , The ZROP unit 354 checks the depth against a corresponding depth in a depth buffer for a sample location associated with the fragment. If the fragment passes the scan sample depth test, then the ZROP unit updates 354 the depth buffer and transmits a result of the depth test to the raster engine 325 , The ROP manager 355 controls the operation of the ROP unit 350 , It is recognized that the number of partition units 280 from the number of GPCs 250 can distinguish, and therefore each ROP unit 350 with each of the GPCs 250 can be coupled. Therefore, the ROP manager keeps track 355 Packages from the different GPCs 250 and determines to which GPC 250 a result is passed through the ROP unit 350 was generated. The CROP unit 352 and the ZROP unit 354 are with the L2 cache 360 over an L2 XBar 365 coupled.

4 veranschaulicht den Streaming-Multiprozessor 340 von 3A gemäß einer Ausführungsform. Wie in 4 gezeigt, umfasst der SM 340 einen Anweisungs-Cache-Speicher 405, eine oder mehrere Planer-Einheiten 410, eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade/Speicher-Einheiten (LSUs) 454, ein Zwischenverbindungs-Netzwerk 480, einen gemeinsam benutzten Speicher 470 und einen L1-Cache-Speicher 490. 4 illustrates the streaming multiprocessor 340 from 3A according to one embodiment. As in 4 shown, the SM includes 340 an instruction cache 405 , one or more planner 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 , an interconnection network 480 , a shared memory 470 and an L1 cache 490 ,

Wie oben beschrieben, versendet die Arbeitsverteilungs-Einheit 225 Aufgaben zur Ausführung auf den GPCs 250 der PPU 200. Die Aufgaben werden einem bestimmten TPC 320 innerhalb eines GPC 250 zugeteilt, und, wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 340 zugeteilt werden. Die Planer-Einheit 410 empfängt die Aufgaben von der Arbeitsverteilungs-Einheit 225 und verwaltet die Anweisungs-Planung (instruction scheduling) für eine oder mehrere Gruppen von Threads (d.h. Warps), die dem SM 340 zugewiesen sind. Die Planer-Einheit 410 plant Threads zur Ausführung in Gruppen von parallel Threads, wobei jede Gruppe ein Warp genannt wird. In einer Ausführungsform umfasst jeder Warp 32 Threads. Die Planer-Einheit 410 kann eine Mehrzahl von unterschiedlichen Warps verwalten, wobei die Warps zur Ausführung geplant und dann Anweisungen von der Mehrzahl von unterschiedlichen Warps an die verschiedenen Funktionseinheiten (d.h. Kerne 350, SFUs 352 und LSUs 354) während jeden Taktzyklus versandt werden.As described above, the work distribution unit ships 225 Tasks to execute on the GPCs 250 the PPU 200 , The tasks become a specific TPC 320 within a GPC 250 and, if the task is associated with a shader program, the task may be assigned to an SM 340 be assigned. The planner unit 410 receives the tasks from the work distribution unit 225 and manages instruction scheduling for one or more groups of threads (ie, warps) associated with the SM 340 are assigned. The planner unit 410 schedules threads to run in groups of parallel threads, with each group called a warp. In one embodiment, each warp comprises 32 Threads. The planner unit 410 can manage a plurality of different warps, with the warps scheduled to execute, and then instructions from the plurality of different warps to the different functional units (ie, cores 350 , SFUs 352 and LSUs 354 ) are sent during each clock cycle.

In einer Ausführungsform umfasst jede Planer-Einheit 410 eine oder mehrere Anweisungs-Versandeinheiten 415. Jede Versandeinheit 415 ist konfiguriert, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In der in 4 gezeigten Ausführungsform umfasst die Planer-Einheit 410 zwei Versandeinheiten 415, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus versandt werden. In alternativen Ausführungsformen kann jede Planer-Einheit 410 eine einzige Versandeinheit 415 oder zusätzliche Versandeinheiten 415 umfassen.In one embodiment, each scheduler unit comprises 410 one or more instruction dispatch units 415 , Each shipping unit 415 is configured to transmit instructions to one or more of the functional units. In the in 4 embodiment shown includes the planner unit 410 two shipping units 415 that allow two different instructions to be dispatched from the same warp during each clock cycle. In alternative embodiments, each scheduler unit 410 a single shipping unit 415 or additional shipping units 415 include.

Jeder SM 340 umfasst eine Registerdatei 420, die einen Satz von Registern für die Funktionseinheiten des SM 340 bereitstellt. In einer Ausführungsform ist die Registerdatei 420 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein zugehöriger Abschnitt der Registerdatei 420 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 420 zwischen den unterschiedlichen Warps aufgeteilt, die von dem SM 340 ausgeführt werden. Die Registerdatei 420 stellt temporären Speicher für Operanden bereit, die mit den Datenwegen der Funktionseinheiten verbunden sind.Every SM 340 includes a register file 420 containing a set of registers for the functional units of the SM 340 provides. In one embodiment, the register file is 420 divided between each of the functional units so that each functional unit is an associated section of the register file 420 allocated. In another embodiment, the register file is 420 split between the different warps coming from the SM 340 be executed. The register file 420 provides temporary memory 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 (z.B., 128, usw.) von unterschiedlichen Verarbeitungskernen 450. Jeder Kern 450 kann eine vollständig in einer Pipeline angeordnete (fully-pipelined) Einfach-Präzisions- Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. Der Kern 450 kann ebenfalls eine Doppel-Präzisions-Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit umfasst. In einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-2008 Standard für Gleitkommaarithmetik. Jeder SM 340 umfasst ebenfalls M SFUs 452, die Spezialfunktionen durchführen (z.B., Attributauswertung, reziproke Quadratwurzel und dergleichen), und N LSUs 454, die Lade- und Speicher-Operationen zwischen dem gemeinsam benutzten Speicher 470 oder dem L1-Cache-Speicher 490 und der Registerdatei 420 implementieren. In einer Ausführungsform umfasst der SM 340 128 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 (eg, 128 , etc.) of different processing cores 450 , Every core 450 can a fully pipelined single precision processing unit comprising a floating point arithmetic logic unit and an integer arithmetic logic unit. The core 450 may also comprise a dual precision processing unit comprising a floating-point arithmetic logic unit. In one embodiment, the floating point arithmetic logic units implement the IEEE 754-2008 standard for floating point arithmetic. Every SM 340 also includes M SFUs 452 performing special functions (eg, attribute evaluation, reciprocal square root and the like), and N LSUs 454 , the load and store operations between the shared memory 470 or the L1 cache 490 and the register file 420 to implement. In an embodiment, the SM comprises 340 128 cores 450 . 32 SFUs 452 and 32 LSUs 454 ,

Jeder SM 340 umfasst ein Zwischenverbindungs-Netzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 verbindet und die LSU 454 mit der Registerdatei 420, dem gemeinsam benutzten Speicher 470 und dem L1-Cache-Speicher 490 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 480 eine Kreuzschiene, die konfiguriert sein kann, um beliebige der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 420 zu verbinden und die LSUs 454 mit der Registerdatei und Speicherorten in dem gemeinsam benutzten Speicher 470 und L1-Cache-Speicher 490 zu verbinden.Every SM 340 includes an interconnection network 480 containing each of the functional units with the register file 420 connects and the LSU 454 with the register file 420 , the shared memory 470 and the L1 cache 490 combines. In one embodiment, the interconnect network is 480 a crossbar, which may be configured to any of the functional units with any of the registers in the register file 420 to connect and the LSUs 454 with the register file and locations in the shared memory 470 and L1 Cache memory 490 connect to.

Der gemeinsam benutzte Speicher 470 ist ein ArStrahl von auf dem Chip befindlicher Speicher, der Datenspeicherung und Kommunikation zwischen dem SM 340 und der Primitiven-Engine 335 und zwischen Threads in dem SM 340 ermöglicht. In einer Ausführungsform umfasst der gemeinsam benutzte Speicher 470 64KB von Speicherkapazität. Ein L1-Cache-Speicher 490 ist im Weg von dem SM 340 zu der Partitions-Einheit 280. Der L1-Cache-Speicher 490 kann verwendet werden, um Lese- und Schreibvorgänge zwischen zu speichern. In einer Ausführungsform umfasst der L1-Cache-Speicher 490 24KB von Speicherkapazität.The shared memory 470 is an Ar-ray of on-chip memory, data storage and communication between the SM 340 and the primitive engine 335 and between threads in the SM 340 allows. In one embodiment, the shared memory includes 470 64KB of storage capacity. On L1 Cache memory 490 is in the way of the SM 340 to the partition unit 280 , The L1 Cache memory 490 can be used to save read and write operations. In one embodiment, the L1 cache includes 490 24KB of storage capacity.

Die oben beschriebene PPU 200 kann konfiguriert sein, um hochparallele Berechnungen viel schneller als herkömmliche CPUs durchzuführen. Parallele Berechnen weist Vorteile bei der Graphikverarbeitung, der Datenkomprimierung, der Biometrik, den Stromverarbeitungsalgorithmen und dergleichen auf.The PPU described above 200 can be configured to perform high-level calculations much faster than traditional CPUs. Parallel computing has advantages in graphics processing, data compression, biometrics, power processing algorithms, and the like.

Wenn für Allzweck-Parallelberechnung konfiguriert, kann eine einfachere Konfiguration verwendet werden. In diesem Modell werden, wie in 2 gezeigt, Festfunktions-Graphikverarbeitungseinheiten umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In dieser Konfiguration werden von der Arbeitsverteilungs-Einheit 225 Blöcke von Threads zugewiesen und direkt an die TPCs 320 verteilt. Die Threads in einem Block führen das gleiche Programm unter Verwendung einer eindeutigen Thread-ID in der Berechnung aus, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 340 verwendet wird, um das Programm auszuführen und Berechnungen durchzuführen, damit der gemeinsam benutzte Speicher 470 zwischen Threads kommuniziert, und die LSU 454 verwendet wird, um den globalen Speicher durch Partitionierung des L1-Cache-Speichers 490 und der Partitions-Einheit 280 zu lesen und zu beschreiben.If configured for general-purpose parallelism, a simpler configuration can be used. In this model, as in 2 bypassing fixed-function graphics processing units, creating a much simpler programming model. In this configuration are from the work distribution unit 225 Assigned blocks of threads and directly to the TPCs 320 distributed. The threads in a block execute the same program using a unique thread ID in the calculation to ensure that each thread produces unique results, with the SM 340 is used to run the program and perform calculations to allow the shared memory 470 communicates between threads, and the LSU 454 is used to global memory by partitioning the L1 cache 490 and the partition unit 280 to read and describe.

Wenn für Allzweck-Parallelberechnung konfiguriert, kann der SM 340 ebenfalls Befehle schreiben, welche die Planer-Einheit 220 verwenden kann, um neue Arbeit auf den TPCs 320 zu starten.When configured for general purpose parallel computation, the SM can 340 also write commands to the planner unit 220 can use to new work on the TPCs 320 to start.

In einer Ausführungsform umfasst die PPU 200 eine Graphikverarbeitungseinheit (GPU). Die PPU 200 ist konfiguriert, um Befehle zu empfangen, die Shader-Programme zur Verarbeitung von Graphikdaten spezifizieren. Graphikdaten können als ein Satz von Primitiven, wie beispielsweise Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen und dergleichen definiert sein. Typischerweise umfasst eine Primitive Daten, die eine Anzahl von Vertices für die Primitive (z.B., in einem Modellraum-Koordinatensystem) sowie auch Attribute spezifizieren, die jedem Vertex der Primitiven zugeordnet sind. Die PPU 200 kann konfiguriert sein, um die Graphikprimitive zu verarbeiten, um ein Frame-Puffer zu erzeugen (d.h. Pixeldaten für jedes der Pixel der Anzeige).In one embodiment, the PPU includes 200 a graphics processing unit (GPU). The PPU 200 is configured to receive commands specifying shader programs for processing graphics data. Graphics data may be defined as a set of primitives, such as points, lines, triangles, squares, triangular stripes, and the like. Typically, a primitive includes data specifying a number of vertices for the primitive (eg, in a model space coordinate system) as well as attributes associated with each vertex of the primitives. The PPU 200 may be configured to process the graphics primitive to generate a frame buffer (ie, pixel data for each of the pixels of the display).

Eine Anwendung schreibt Modelldaten für eine Szene (d.h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie beispielsweise einen Systemspeicher oder Speicher 204. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an dem Treiber-Kernel aus, der die Modelldaten anfragt, die zu rendern und anzuzeigen sind. Der Treiber-Kernel liest die Modelldaten und schreibt Befehle an den einen oder mehrere Ströme, um Operationen durchzuführen, um die Modelldaten zu verarbeiten. Die Befehle können unterschiedliche Shader-Programme referenzieren, die auf den SMs 340 der PPU 200 zu implementieren sind, die einen oder mehrere eines Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und eines Pixel-Shader umfassen können. Beispielsweise können eine oder mehrere der SMs 340 konfiguriert sein, um ein Vertex-Shader-Programm auszuführen, das eine Anzahl von Vertices verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die unterschiedlichen SMs 340 konfiguriert sein, um unterschiedliche Shader-Programme nebenläufig auszuführen. Beispielsweise kann eine erste Untermenge von SMs 340 konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Untermenge von SMs 340 konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Untermenge von SMs 340 verarbeitet Vertexdaten, um verarbeitete Vertexdaten zu erzeugen, und schreibt die verarbeiteten Vertexdaten in den L2-Cache-Speicher 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertexdaten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert sind), um Fragmentdaten zu erzeugen, führt die zweite Untermenge von SMs 340 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt werden und in den Frame-Puffer im Speicher 204 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können nebenläufig ausgeführt werden, wobei unterschiedliche Daten von der gleichen Szene in einem Pipeline-Verfahren verarbeitet werden, bis alle der Modelldaten für die Szene gerenderten zu dem Frame-Puffer gerendert wurden. Dann wird der Inhalt des Frame-Puffers an einen Anzeigencontroller zur Anzeige auf einer Anzeigevorrichtung ü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 each of the objects that may be visible on a display. The application then makes an API call to the driver kernel requesting the model data to render and display. The driver kernel reads the model data and writes commands to the one or more streams to perform operations to process the model data. The commands can reference different shader programs running on the SMs 340 the PPU 200 which may include one or more of a vertex shader, hull shaders, domain shaders, geometry shaders, and a pixel shader. For example, one or more of the SMs 340 be configured to execute a vertex shader program that processes a number of vertices defined by the model data. In one embodiment, the different SMs 340 be configured to concurrently execute different shader programs. For example, a first subset of SMs 340 be configured to execute a vertex shader program while a second subset of SMs 340 may be configured to execute a pixel shader program. The first subset of SMs 340 processes vertex data to produce processed vertex data and writes the processed vertex data to the L2 cache 360 and / or the memory 204 , After the processed vertex data is rasterized (ie, transformed from three-dimensional data into two-dimensional data in screen space) to generate fragment data, the second subset of SMs results 340 a pixel shader to generate processed fragment data which is then mixed with other processed fragment data and into the frame buffer in memory 204 to be written. The vertex shader program and the pixel shader program may be concurrently executed, pipelining different data from the same scene until all of the model data rendered for the scene has been rendered to the frame buffer. Then, the content of the frame buffer is transmitted to a display controller for display on a display device.

Die PPU 200 kann in einem Tischcomputer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z.B. einer drahtlosen handgehaltenen Vorrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einer handgehaltenen elektronischen Vorrichtung und dergleichen umfasst sein. In einer Ausführungsform ist die PPU 200 auf einem einzelnen Halbleitersubstrat verkörpert. In einer anderen Ausführungsform ist die PPU 200 in einem System-on-Chip (SoC) zusammen mit einer oder mehreren anderen Logikeinheiten, wie beispielsweise einem Rechner-mit-reduziertem-Befehlssatz(RISC)-CPU, einer Speicherverwaltungseinheit (MMU), einem Digital/AnalogWandler (DAC) und dergleichen umfasst.The PPU 200 may be included in a desktop computer, a laptop computer, a tablet computer, a smartphone (eg, a wireless handheld device), a personal digital assistant (PDA), a digital camera, a handheld electronic device, and the like. In one embodiment, the PPU 200 embodied on a single semiconductor substrate. In another embodiment, the PPU 200 in a system-on-chip (SoC) along with one or more other logic units, such as a computer-reduced-instruction set (RISC) CPU, a memory management unit (MMU), a digital-to-analog converter (DAC), and the like ,

In einer Ausführungsform kann die PPU 200 auf einer Graphikkarte umfasst sein, die eine oder mehrere Speichervorrichtungen 204, wie beispielsweise GDDR5 SDRAM, umfasst. Die Graphikkarte kann konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Tischcomputers schnittstellenmäßig zu verbinden, der beispielsweise einen Northbridge-Chipsatz und einen Southbridge-Chipsatz umfasst. In noch einer anderen Ausführungsform kann die PPU 200 eine integrierte Graphikverarbeitungseinheit (iGPU) sein, die in dem Chipsatz (d.h. Northbridge) der Hauptplatine umfasst ist.In one embodiment, the PPU 200 on a graphics card that includes one or more memory devices 204 , such as GDDR5 SDRAM. The graphics card may be configured to interface with a PCIe slot on a motherboard of a desktop computer that includes, 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 northbridge) of the motherboard.

5 veranschaulicht ein System-on-Chip (SoC) 500, das die PPU 200 von 2 umfasst, gemäß einer Ausführungsform. Wie in 5 gezeigt, umfasst das SoC 500 eine CPU 550 und eine PPU 200, wie oben beschrieben. Das SoC 500 kann ebenfalls einen Systembus 202 umfassen, um Kommunikation zwischen den verschiedenen Komponenten des SoC 500 zu ermöglichen. Speicheranfragen, die von der CPU 550 und der PPU 200 erzeugt werden, können durch eine System-MMU 590 weitergeleitet werden, die von mehreren Komponenten des SoC 500 gemeinsam benutzt werden. Das SoC 500 kann ebenfalls eine Speicherschnittstelle 595 umfassen, die mit einer oder mehreren Speichervorrichtungen 204 gekoppelt ist. Die Speicherschnittstelle 595 kann beispielsweise eine DRAM-Schnittstelle implementieren. 5 illustrates a system-on-chip (SoC) 500 that the PPU 200 from 2 includes, according to one embodiment. As in 5 shown, includes the SoC 500 a CPU 550 and a PPU 200 , as described above. The SoC 500 can also have a system bus 202 include communication between the various components of the SoC 500 to enable. Memory requests made by the CPU 550 and the PPU 200 can be generated by a system MMU 590 be forwarded by several components of the SoC 500 be shared. The SoC 500 can also have a memory interface 595 include with one or more storage devices 204 is coupled. The storage interface 595 For example, it can implement a DRAM interface.

Obwohl nicht explizit gezeigt, kann das SoC 500 andere Komponenten zusätzlich zu den in 5 gezeigten Komponenten umfassen. Beispielsweise kann das SoC 500 mehrere PPUs 200 (z.B., vier PPUs 200), einen Video-Codierer/Decodierer und einen drahtlosen Breitband-Sendeempfänger sowie auch andere Komponenten umfassen. In einer Ausführungsform kann das SoC 500 mit dem Speicher 204 in einer Package-on-Package(PoP)-Konfiguration umfasst sein.Although not explicitly shown, the SoC 500 other components in addition to those in 5 include components shown. For example, the SoC 500 several PPUs 200 (eg, four PPUs 200 ), a video encoder / decoder, and a broadband wireless transceiver, as well as other components. In one embodiment, the SoC 500 with the memory 204 in a package-on-package (PoP) configuration.

6 ist ein Konzeptdiagramm einer von der PPU 200 implementierten Graphikverarbeitungs-Pipeline 600 gemäß einer Ausführungsform. Die Graphikverarbeitungs-Pipeline 600 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die implementiert werden, um 2D-Computer-erzeugte Bilder aus 3D-Geometriedaten zu erzeugen. Wie bekannt ist, können Pipeline-Architekturen Operationen mit langer Latenz effizienter durch Aufteilen der Operation in eine Mehrzahl von Stufen durchführen, wobei die Ausgabe jeder Stufe mit dem Eingang der nächsten aufeinanderfolgenden Stufe gekoppelt ist. Somit empfängt die Graphikverarbeitungs-Pipeline 600 Eingabedaten 601, die von einer Stufe zu der nächsten Stufe der Graphikverarbeitungs-Pipeline 600 übertragen werden, um Ausgabedaten 602 zu erzeugen. In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 eine Graphikverarbeitungs-Pipeline darstellen, die durch die OpenGL® API definiert ist. Als eine Option kann die Graphikverarbeitungs-Pipeline 600 im Kontext der Funktionalität und Architektur der vorherigen Figuren und/oder etwaiger nachfolgenden Figur(en) implementiert werden. 6 is a conceptual diagram of one of the PPU 200 implemented graphics processing pipeline 600 according to one embodiment. The graphics processing pipeline 600 Figure 4 is an abstract flow chart of the processing steps implemented to generate 2D computer generated images from 3D geometry data. As is known, pipeline architectures can more efficiently perform long latency operations by dividing the operation into a plurality of stages, with the output of each stage coupled to the input of the next consecutive stage. Thus, the graphics processing pipeline receives 600 input data 601 from one level to the next level of the graphics processing pipeline 600 be transferred to output data 602 to create. In one embodiment, the graphics processing pipeline 600 represent a graphics processing pipeline defined by the OpenGL® API. As an option, the graphics processing pipeline 600 in the context of the functionality and architecture of the previous figures and / or any subsequent figure (s).

Wie in 6 gezeigt, umfasst die Graphikverarbeitungs-Pipeline 600 eine Pipeline-Architektur, die eine Anzahl von Stufen umfasst. Die Stufen umfassen, sind jedoch nicht beschränkt auf, eine Daten-Zusammenstellungsstufe 610, eine Vertex-Shading-Stufe 620, eine Primitiven-Zusammenstellungsstufe 630, eine Geometrie-Shading-Stufe 640, eine Darstellungsfeld-Skalierungs-, Aussonderungs- und Abschneide-(VSCC)-Stufe 650, eine Rasterungsstufe 660, eine Fragment-Shading-Stufe 670 und eine Raster-Operationen-Stufe 680. In einer Ausführungsform umfassen die Eingabedaten 601 Befehle, welche die Verarbeitungseinheiten konfigurieren, um die Stufen der Graphikverarbeitungs-Pipeline 600 und geometrische Primitive (z.B., Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen oder Fächer, usw.) zu implementieren, die mittels der Stufen zu verarbeiten sind. Die Ausgabedaten 602 können Pixeldaten (d.h. Farbdaten) umfassen, die in einen Frame-Puffer oder einen anderen Typ von Oberflächen-Datenstruktur in einem Speicher kopiert werden.As in 6 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 assembly stage 610 , a vertex shading level 620 , a primitive assembly stage 630 , a geometry shading level 640 , a viewport scaling, screening and truncating (VSCC) step 650 , a screening level 660 , a fragment shading level 670 and a raster operations level 680 , In one embodiment, the input data includes 601 Commands that configure the processing units around the stages of the graphics processing pipeline 600 and to implement geometric primitives (eg, points, lines, triangles, squares, triangular stripes or bins, etc.) to be processed by the stages. The output data 602 may include pixel data (ie, color data) that is copied to a frame buffer or other type of surface data structure in memory.

Die Daten-Zusammenstellungsstufe 610 empfängt die Eingabedaten 601, die Vertexdaten für Oberflächen höherer Ordnung, Primitive oder dergleichen spezifizieren. Die Daten-Zusammenstellungsstufe 610 sammelt die Vertexdaten in einem temporären Speicher oder Queue, wie beispielsweise durch Empfangen eines Befehls von dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher umfasst und die Vertexdaten aus dem Puffer liest. Die Vertexdaten werden dann an die Vertex-Shading-Stufe 620 zur Verarbeitung übertragen.The data assembly stage 610 receives the input data 601 which specify vertex data for higher-order surfaces, primitives, or the like. The data assembly stage 610 collects the vertex data in a temporary memory or queue, such as by receiving a command from the host processor that includes a pointer to a buffer in memory and reads the vertex data from the buffer. The vertex data is then sent to the vertex shading stage 620 transferred for processing.

Die Vertex-Shading-Stufe 620 verarbeitet Vertexdaten durch Durchführen eines Satzes von Operationen (d.h. eines Vertex-Shader oder eines Programms) einmal für jede der Vertices. Vertices können beispielsweise als ein 4-Koordinaten-Vektor (d.h. <x, y, z, w>) spezifiziert sein, der einem oder mehreren Vertexattributen (z.B., Farbe, Texturkoordinaten, Oberflächennormalen, usw.) zugeordnet ist. Die Vertex-Shading-Stufe 620 kann einzelne Vertexattribute, wie beispielsweise Position, Farbe, Texturkoordinaten und dergleichen, manipulieren. Mit anderen Worten führt die Vertex-Shading-Stufe 620 Operationen an den Vertex-Koordinaten oder anderen Vertexattributen durch, welche einer Vertex zugeordnet sind. Derartige Operationen umfassen gewöhnlicherweise Beleuchtungs-Operationen (d.h. Modifizieren von Farbattributen für einen Vertex) und Transformations-Operationen (d.h. Modifizieren des Koordinatenraums für einen Vertex). Beispielsweise können Vertices unter Verwendung von Koordinaten in einem Objekt-Koordinatenraum spezifiziert sein, die durch Multiplizieren der Koordinaten mittels einer Matrix transformiert werden, welche die Koordinaten aus dem Objekt-Koordinatenraum in einen Welt-Raum oder einen normierten Vorrichtungskoordinaten(NCD = Normalized Device Coordinates)-Raum übersetzt. Die Vertex-Shading-Stufe 620 erzeugt transformierte Vertexdaten, die an die Primitiven-Zusammenstellungsstufe 630 übertragen werden.The vertex shading level 620 Processes vertex data by performing a set of operations (ie, a vertex shader or program) once for each of the vertices. For example, vertices may be specified as a 4-coordinate vector (ie, <x, y, z, w>) associated with one or more vertex attributes (eg, color, texture coordinates, surface normals, etc.). The vertex shading level 620 can manipulate individual vertex attributes, such as position, color, texture coordinates, and the like. In other words, the vertex shading level performs 620 Operations on the vertex coordinates or other vertex attributes associated with a vertex. Such operations usually include lighting operations (ie, modifying color attributes for a vertex) and transform operations (ie, modifying 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 Coordinates (NCD). Translated space. The vertex shading level 620 generates transformed vertex data that is sent to the primitive assembly stage 630 be transmitted.

Die Primitiven-Zusammenstellungsstufe 630 sammelt Vertices, die mittels der Vertex-Shading-Stufe 620 ausgegeben werden, und gruppiert die Vertices in geometrischen Primitiven zur Verarbeitung durch die Geometrie-Shading-Stufe 640. Beispielsweise kann die Primitiven-Zusammenstellungsstufe 630 konfiguriert sein, um alle drei aufeinanderfolgenden Vertices als eine geometrische Primitive (d.h. ein Dreieck) zur Übertragung an die Geometrie-Shading-Stufe 640 zu gruppieren. In einigen Ausführungsformen können spezifische Vertices für aufeinanderfolgende geometrische Primitiven erneut verwendet werden (z.B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Vertices gemeinsam benutzen). Die Primitiven-Zusammenstellungsstufe 630 überträgt geometrische Primitive (d.h. eine Sammlung von zugeordneten Vertices) an die Geometrie-Shading-Stufe 640.The primitive assembly stage 630 collects vertices using the vertex shading level 620 and groups the vertices in geometric primitives for processing by the geometry shading stage 640 , For example, the primitive assembly stage 630 be configured to apply all three consecutive vertices as a geometric primitive (ie a triangle) for transmission to the geometry shading stage 640 to group. In some embodiments, specific vertices for successive geometric primitives may be reused (eg, two consecutive triangles in a triangle strip may share two vertices). The primitive assembly stage 630 transfers geometric primitives (ie a collection of mapped vertices) to the geometry shading stage 640 ,

Die Geometrie-Shading-Stufe 640 verarbeitet geometrische Primitiven durch Durchführen eines Satzes von Operationen (d.h. eines Geometrie-Shader oder Programms) an den geometrischen Primitiven. Tessellations-Operationen können eine oder mehrere geometrische Primitiven aus jeder geometrischen Primitive erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 640 jede geometrische Primitive in ein feineres Netz von zwei oder mehr geometrischen Primitiven zur Verarbeitung durch den Rest der Graphikverarbeitungs-Pipeline 600 unterteilen. Die Geometrie-Shading-Stufe 640 überträgt geometrische Primitive an die Darstellungsfeld-SCC-Stufe 650.The geometry shading level 640 processes geometric primitives by performing a set of operations (ie, a geometry shader or program) on the geometric primitives. Tessellation operations can generate one or more geometric primitives from each geometric primitive. In other words, the geometry shading level 640 each geometric primitive into a finer mesh of two or more geometric primitives for processing by the remainder of the graphics processing pipeline 600 divide. The geometry shading level 640 transfers geometric primitives to the viewport SCC stage 650 ,

In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 innerhalb eines Streaming-Multiprozessors arbeiten und die Vertex-Shading-Stufe 620, die Primitiven-Zusammenstellungsstufe 630, die Geometrie-Shading-Stufe 640, die Fragment-Shading-Stufe 670 und/oder die damit zugeordnete Hardware/Software kann sequentiell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen in einer Ausführungsform abgeschlossen sind, kann die Darstellungsfeld-SCC-Stufe 650 die Daten benutzen. In einer Ausführungsform können Primitivendaten, die durch eine oder mehrere der Stufen in der Graphikverarbeitungs-Pipeline 600 verarbeitet wurden, in einen Cache-Speicher (z.B. einen L1-Cache-Speicher, einen Vertex-Cache-Speicher usw.) geschrieben werden. In diesem Fall kann in einer Ausführungsform die Darstellungsfeld-SCC-Stufe 650 auf die Daten in dem Cache-Speicher zugreifen. In einer Ausführungsform sind die Darstellungsfeld-SCC-Stufe 650 und die Rasterungsstufe 660 als Festfunktions-Schaltungen implementiert.In one embodiment, the graphics processing pipeline 600 work within a streaming multiprocessor and the vertex shading level 620 , the primitive compilation stage 630 , the geometry shading level 640 , the fragment shading level 670 and / or the associated hardware / software can sequentially perform processing operations. Once the sequential processing operations are completed in one embodiment, the viewport SCC stage 650 to use the data. In one embodiment, primitive data passing through one or more of the stages in the graphics processing pipeline 600 are written to a cache (eg, an L1 cache, a vertex cache, etc.). In this case, in one embodiment, the viewport SCC stage 650 access the data in the cache memory. In one embodiment, the viewport is SCC stage 650 and the screening level 660 implemented as solid state circuits.

Die Darstellungsfeld-SCC-Stufe 650 führt Darstellungsfeld-Skalierung, Aussonderung und Abschneidung der geometrischen Primitiven durch. Jede Oberfläche, die gerendert wird, wird einer abstrakten Kameraposition zugeordnet. Die Kameraposition stellt einen Ort eines Betrachters dar, der die Szene betrachtet, und definiert einen Betrachtungsstumpf, der die Objekte der Szene einschließt. Der Betrachtungsstumpf kann eine Betrachtungs-Ebene, eine hintere Ebene und vier Abschneide-Ebenen umfassen. Jede geometrische Primitive, die vollständig außerhalb des Betrachtungsstumpfes ist, kann ausgesondert (d.h. verworfen) werden, weil die geometrische Primitive nicht zu der endgültigen gerenderten Szene beitragen wird. Jede geometrische Primitive, die innerhalb des Betrachtungsstumpfs und teilweise außerhalb des Betrachtungsstumpf ist, kann abgeschnitten werden (d.h. in ein neue geometrische Primitive transformiert werden, die innerhalb des Betrachtungsstumpf eingeschlossen ist). Des Weiteren können geometrische Primitiven jeweils basierend auf einer Tiefe des Betrachtungsstumpfes skaliert werden. Alle potentiell sichtbaren geometrischen Primitiven werden dann an die Rasterungsstufe 660 übertragen. The viewport SCC stage 650 performs viewport scaling, disambiguation and truncation of geometric primitives. Each surface that is rendered is assigned to an abstract camera position. The camera position represents a location of a viewer viewing the scene and defines a viewing stub that includes the objects of the scene. The viewing stub may include a viewing plane, a posterior plane, and four clip planes. Any geometric primitive that is completely out of the view stub may be discarded (ie discarded) because the geometric primitive will not contribute to the final rendered scene. Any geometric primitive that is within the view stub and partially out of the view stub may be truncated (ie, transformed into a new geometric primitive that is included within the view stub). Furthermore, geometric primitives may each be scaled based on a depth of the viewing stump. All potentially visible geometric primitives are then sent to the screening stage 660 transfer.

Die Rasterungsstufe 660 wandelt die 3D-geometrischen Primitiven in 2D-Fragmente um (die z.B. in der Lage sind, zur Anzeige benutzt zu werden, usw.). Die Rasterungsstufe 660 kann konfiguriert sein, um die Vertices der geometrischen Primitive zu benutzen, um einen Satz von Ebenengleichungen aufzustellen, von denen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 660 kann ebenfalls eine Abdeckungsmaske für eine Mehrzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Abtastorte für das Pixel die geometrische Primitive schneiden. In einer Ausführungsform kann auch z-Testen durchgeführt werden, um zu bestimmen, ob die geometrische Primitive von anderen geometrischen Primitiven verdeckt wird, die bereits gerastert wurden. Die Rasterungsstufe 660 erzeugt Fragmentdaten (d.h. interpolierte Vertexattribute, die einem bestimmten Abtastort für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 670 übertragen werden.The screening level 660 converts the 3D geometric primitives into 2D fragments (eg capable of being used for display, etc.). The screening level 660 can be configured to use the vertices of the geometric primitives to set up a set of plane equations from which different attributes can be interpolated. The screening level 660 may also compute a coverage mask for a plurality of pixels indicating whether one or more scan locations for the pixel intersect the geometric primitive. In one embodiment, z-testing may also be performed to determine if the geometric primitive is obscured by other geometric primitives that have already been rasterized. The screening level 660 generates fragment data (ie, interpolated vertex attributes associated with a particular sample location for each covered pixel) sent to the fragment shading stage 670 be transmitted.

Die Fragment-Shading-Stufe 670 verarbeitet Fragmentdaten durch Durchführen eines Satzes von Operationen (d.h. eines Fragment-Shader oder eines Programms) an jedem der Fragmente. Die Fragment-Shading-Stufe 670 kann Pixeldaten (d.h. Farbenwerte) für das Fragment erzeugen, wie beispielsweise durch Durchführen von Beleuchtungs-Operationen oder Abtasten von Texturabbildungen unter Verwendung von interpolierten Texturkoordinaten für das Fragment. Die Fragment-Shading-Stufe 670 erzeugt Pixeldaten, die an die Raster-Operationen-Stufe 680 übertragen werden.The fragment shading level 670 processes fragment data by performing a set 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 illumination operations or sampling texture maps using interpolated texture coordinates for the fragment. The fragment shading level 670 generates pixel data that is sent to the raster operations stage 680 be transmitted.

Die Raster-Operationen-Stufe 680 kann verschiedene Operationen an den Pixeldaten durchführen, wie beispielsweise Alpha-Tests, Stencil-Tests und Mischung der Pixeldaten mit anderen Pixeldaten, die anderen Fragmente entsprechen, die dem Pixel zugeordnet sind. Wenn die Raster-Operationen-Stufe 680 die Verarbeitung der Pixeldaten (d.h. der Ausgabedaten 602) beendet hat, können die Pixeldaten in ein Render-Ziel, wie beispielsweise einen Frame-Puffer, einen Farbenpuffer oder dergleichen, geschrieben werden.The raster operations level 680 can perform various operations on the pixel data, such as alpha testing, stencil testing and blending the pixel data with other pixel data corresponding to other fragments associated with the pixel. When the raster operations stage 680 the processing of the pixel data (ie the output data 602 ), the pixel data may be written to a render target, such as a frame buffer, a color buffer, or the like.

Es wird anerkannt, dass eine oder mehrere zusätzliche Stufen in der Graphikverarbeitungs-Pipeline 600 zusätzlich zu oder anstatt einer oder mehrerer der oben beschriebenen Stufen umfasst sein können. Verschiedene Implementierungen der abstrakten Graphikverarbeitungs-Pipeline können unterschiedliche Stufen implementieren. Des Weiteren können eine oder mehrere der oben beschriebenen Stufen der Graphikverarbeitungs-Pipeline in einigen Ausführungsformen (wie beispielsweise der Geometrie-Shading-Stufe 640) ausgeschlossen sein. Andere Arten von Graphikverarbeitungs-Pipelines werden betrachtet, als innerhalb des Schutzumfangs der vorliegenden Offenbarung zu liegen. Des Weiteren können beliebige der Stufen der Graphikverarbeitungs-Pipeline 600 von einer oder mehreren dedizierten Hardwareeinheiten innerhalb eines Graphikprozessors, wie beispielsweise der PPU 200, implementiert werden. Andere Stufen der Graphikverarbeitungs-Pipeline 600 können durch programmierbare Hardwareeinheiten, wie beispielsweise dem SM 340 der PPU 200, implementiert werden.It is recognized that one or more additional stages in the graphics processing pipeline 600 in addition to or instead of one or more of the steps described above. Different implementations of the abstract graphics processing pipeline may implement different stages. Further, one or more of the above-described stages of the graphics processing pipeline may be implemented in some embodiments (such as the geometry shading stage 640 ) be excluded. Other types of graphics processing pipelines are contemplated as being within the scope of the present disclosure. Furthermore, any of the stages of the graphics processing pipeline 600 one or more dedicated hardware units within a graphics processor, such as the PPU 200 to be implemented. Other stages of the graphics processing pipeline 600 can by programmable hardware units, such as the SM 340 the PPU 200 to be implemented.

Die Graphikverarbeitungs-Pipeline 600 kann über eine Anwendung implementiert werden, die von einem Host-Prozessor, wie beispielsweise einer CPU 550, ausgeführt wird. In einer Ausführungsform kann ein Vorrichtungstreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung benutzt werden können, um graphische Daten zur Anzeige zu erzeugen. Der Vorrichtungstreiber ist ein Softwareprogramm, das eine Mehrzahl von Anweisungen umfasst, die den Betrieb der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die einem Programmierer erlaubt, spezialisierte Graphikhardware zu benutzen, wie beispielsweise die PPU 200, um die graphischen Daten zu erzeugen, ohne zu verlangen, dass der Programmierer den spezifischen Anweisungssatz für die PPU 200 benutzen muss. Die Anwendung kann einen API-Aufruf umfassen, der an den Vorrichtungstreiber für die PPU 200 weitergeleitet wird. Der Vorrichtungstreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu antworten. In einigen Fällen kann der Vorrichtungstreiber Operationen durch Ausführen von Anweisungen auf der CPU 550 durchführen. In anderen Fällen kann der Vorrichtungstreiber Operationen, zumindest teilweise, durch Starten von Operationen auf der PPU 200 durchführen, wobei eine Eingabe/Ausgabe-Schnittstelle zwischen der CPU 550 und der PPU 200 benutzt wird. In einer Ausführungsform ist der Vorrichtungstreiber konfiguriert, um die Graphikverarbeitungs-Pipeline 600 unter Benutzung der Hardware der PPU 200 zu implementieren.The graphics processing pipeline 600 can be implemented through an application that is hosted by a host processor, such as a CPU 550 , is performed. 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 graphical data for display. The device driver is a software program that includes a plurality of instructions that govern the operation of the PPU 200 control. The API provides an abstraction to a programmer that allows a programmer to use specialized graphics hardware, such as the PPU 200 to generate the graphical data without requiring the programmer to set the specific instruction set for the PPU 200 must use. The application may include an API call to the device driver for the PPU 200 is forwarded. The device driver interprets the API call and performs various operations to respond to the API call. In some cases, the Device Drivers Perform operations by executing instructions on the CPU 550 carry out. In other cases, the device driver may perform operations, at least in part, by starting operations on the PPU 200 perform an input / output interface between the CPU 550 and the PPU 200 is used. In one embodiment, the device driver is configured to execute the graphics processing pipeline 600 using the hardware of the PPU 200 to implement.

Verschiedene Programme können innerhalb der PPU 200 ausgeführt werden, um die verschiedenen Stufen der Graphikverarbeitungs-Pipeline 600 zu implementieren. Beispielsweise kann der Vorrichtungstreiber ein Kernel auf der PPU 200 starten, um die Vertex-Shading-Stufe 620 auf einem SM 340 (oder mehreren SMs 340) durchzuführen. Der Vorrichtungstreiber (oder den von der PPU 200 ausgeführten Anfangskernel) kann ebenfalls andere Kernels auf der PPU 200 starten, um andere Stufen der Graphikverarbeitungs-Pipeline 600 durchzuführen, wie beispielsweise die Geometrie-Shading-Stufe 640 und die Fragment-Shading-Stufe 670. Außerdem können einige der Stufen der Graphikverarbeitungs-Pipeline 600 auf einer festen Hardwareeinheit implementiert werden, wie beispielsweise einem Rasterer oder einem Daten-Assembler, der innerhalb der PPU 200 implementiert ist. Es wird anerkannt, dass Ergebnisse von einem Kernel durch eine oder mehrere intervenierende Festfunktions-Hardwareeinheiten verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 340 verarbeitet werden.Different programs can be within the PPU 200 be executed at the various stages of the graphics processing pipeline 600 to implement. For example, the device driver may have a kernel on the PPU 200 start at the vertex shading level 620 on a SM 340 (or multiple SMs 340 ). The device driver (or the one from the PPU 200 executed initial kernel) may also have other kernels on the PPU 200 start at other stages of the graphics processing pipeline 600 perform such as the geometry shading stage 640 and the fragment shading level 670 , Also, some of the stages of the graphics processing pipeline 600 be implemented on a fixed hardware unit, such as a rasterizer or a data assembler, within the PPU 200 is implemented. It is recognized that results from a kernel may be processed by one or more hard-function intervening hardware units before being sent from a succeeding kernel to an SM 340 are processed.

7 veranschaulicht ein beispielhaftes System 700, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorangehenden Ausführungsformen implementiert werden können. Wie gezeigt, wird ein System 700 bereitgestellt, das mindestens einen zentralen Prozessor 701 aufweist, der mit einem Kommunikationsbus 702 verbunden ist. Der Kommunikationsbus 702 kann unter Anwendung eines beliebigen geeigneten Protokolls, wie beispielsweise durch PCI (periphere Komponenten-Zwischenverbindung), PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus-Protokolle oder Punkt-Zu-Punkt-Kommunikationsprotokolle implementiert werden. Das System 700 kann ferner einen Hauptspeicher 704 aufweisen. Steuerlogik (Software) und Daten sind in dem Hauptspeicher 704 gespeichert, der die Form eines Speichers mit wahlfreiem Zugriff (RAM) aufweisen kann. 7 illustrates an exemplary system 700 in which the various architecture and / or functionality of the various preceding embodiments may be implemented. As shown, a system 700 provided, the at least one central processor 701 that is connected to a communication bus 702 connected is. The communication bus 702 may be implemented using any suitable protocol, such as PCI (Peripheral Component Interconnect), PCI Express, AGP (Accelerated Graphics Port), HyperTransport, or one or more other bus protocols or point-to-point communication protocols. The system 700 may also be a main memory 704 respectively. Control logic (software) and data are in main memory 704 which may take the form of a random access memory (RAM).

Das System 700 umfasst ferner Eingabevorrichtungen 712, einen Graphikprozessor 706 und eine Anzeige 708, d.h. eine herkömmliche CRT (Kathodenstrahlröhre), eine LCD (Flüssigkristallanzeige), eine LED (lichtemittierende Diode), eine Plasmaanzeige oder dergleichen. Eine Anwendereingabe kann über die Eingabevorrichtungen 712, beispielsweise Tastatur, Maus, berührungsempfindliche Auflage, Mikrophon und dergleichen, empfangen werden. In einer Ausführungsform kann der Graphikprozessor 706 eine Mehrzahl von Shading-Modulen, ein Rastermodul, usw. aufweisen. Jedes der vorangehenden Module kann in einer einzelnen Halbleiterplattform angeordnet sein, so dass eine graphische Verarbeitungseinheit (GPU) gebildet ist.The system 700 also includes input devices 712 , a graphics processor 706 and an ad 708 That is, a conventional CRT (Cathode Ray Tube), an LCD (Liquid Crystal Display), an LED (Light Emitting Diode), a plasma display, or the like. User input may be via the input devices 712 For example, keyboard, mouse, touch-sensitive pad, microphone and the like can be received. In one embodiment, the graphics processor 706 a plurality of shading modules, a raster module, etc. have. Each of the foregoing modules may be arranged in a single semiconductor platform to form a graphical processing unit (GPU).

In der vorliegenden Beschreibung kann eine einzelne Halbleiterplattform eine einzelne alleinstehende halbleiterbasierte integrierte Schaltung oder einen Chip bezeichnen. Es sollte beachtet werden, dass der Begriff einzelne Halbleiterplattform auch Multi-Chip-Module mit vergrößerter Verbindungsstruktur bezeichnen kann, die einen chipinternen Betrieb simulieren, und die eine wesentliche Verbesserung gegenüber der Verwendung einer Realisierung mit herkömmlicher zentraler Recheneinheit (CPU) und einem Bus darstellen. Selbstverständlich können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen entsprechend den Bedürfnissen des Anwenders angeordnet sein.In the present specification, a single semiconductor platform may designate a single standalone semiconductor-based integrated circuit or chip. It should be noted that the term single semiconductor platform may also refer to multi-chip modules with increased interconnect structure, which simulate on-chip operation, and represent a significant improvement over the use of conventional CPU and bus implementation. Of course, the various modules may also be arranged separately or in various combinations of semiconductor platforms according to the needs of the user.

Das System 700 kann ebenfalls einen sekundären Speicher 710 umfassen. Der sekundäre Speicher 710 umfasst beispielsweise eine Festplatte und/oder eine entfernbare Speicherplatte, die ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Kompaktdisketten-Laufwerk, ein Laufwerk für eine digitale Vielseitigkeitsdiskette (DVD), ein Aufzeichnungsgerät, einen Flash-Speicher mit universellen seriellen Bus (USB) repräsentieren kann. Die entfernbare Speichervorrichtung liest in eine und/oder schreibt aus einer entfernbaren Speichereinheit auf eine bekannte Art und Weise.The system 700 can also have a secondary memory 710 include. The secondary storage 710 For example, a hard disk and / or a removable disk that may represent a floppy disk drive, a magnetic tape drive, a compact diskette drive, a digital versatile floppy disk (DVD) drive, a recorder, a universal serial bus (USB) flash memory. The removable storage device reads in and / or writes from a removable storage device in a known manner.

Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 704 und/oder in dem sekundären Speicher 710 gespeichert sein. Derartige Computerprogramme versetzen, wenn sie ausgeführt werden, das System 700 in die Lage, verschiedene Funktionen auszuführen. Der Hauptspeicher 704, der Speicher 710 und/oder ein beliebiger anderer Speicher sind mögliche Beispiele für computerlesbare Medien.Computer programs or computer control logic algorithms may reside in main memory 704 and / or in the secondary memory 710 be saved. Such computer programs, when executed, put the system 700 able to perform various functions. The main memory 704 , the memory 710 and / or any other memory are possible examples of computer readable media.

In einer Ausführungsform können die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren im Zusammenhang mit dem zentralen Prozessor 701, dem Graphikprozessor 706, einer integrierten Schaltung (nicht gezeigt), die zumindest einen Teil der Fähigkeiten sowohl des zentralen Prozessors 701 als auch des Graphikprozessors 706 aufweist, mit einem Chipsatz (das heißt, einer Gruppe aus integrierten Schaltungen, die so gestaltet ist, dass sie als Einheit zur Ausführung zugehöriger Funktionen arbeiten und als solche verkauft wird, usw.) und/oder mit einer anderen integrierten Schaltung für diese Angelegenheit implementiert werden.In one embodiment, the architecture and / or functionality of the various previous figures may be related to the central processor 701 , the graphics processor 706 an integrated circuit (not shown) that performs at least part of the capabilities of both the central processor 701 as well as the graphics processor 706 has implemented with a chipset (that is, a group of integrated circuits designed to operate as a unit to perform related functions and sold as such, etc.) and / or with another integrated circuit for that matter become.

Ferner können die Architektur und/oder Funktionalität der verschiedenen vorangehenden Figuren auch im Rahmen eines allgemeinen Computersystems, eines Systems aus Leiterplatten, eines Systems mit Spielekonsole, die für Unterhaltungszwecke gedacht ist, im Rahmen eines anwendungsspezifischen Systems und/oder im Rahmen eines anderen gewünschten Systems implementiert werden. Beispielsweise kann das System 700 die Form eines Tischrechners, eines Laptops, eines Dienstleister-Rechners, eines Arbeitsplatzrechners, von Spielekonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik annehmen. Des Weiteren kann das System 700 die Form verschiedener anderer Vorrichtungen annehmen, wozu gehören, ohne Einschränkung, eine Vorrichtung als persönlicher digitaler Assistent (PDA), eine Vorrichtung als Mobiltelefon, eine Vorrichtung als Fernsehgerät, usw.Furthermore, the architecture and / or functionality of the various preceding figures may also be implemented within a general computer system, a system of printed circuit boards, a gaming console system intended for entertainment purposes, within an application specific system, and / or any other desired system become. For example, the system can 700 take the form of a desktop computer, a laptop, a service provider computer, a workstation, game consoles, an embedded system, and / or any other type of logic. Furthermore, the system can 700 take the form of various other devices including, without limitation, personal digital assistant (PDA) device, mobile device device, television device device, etc.

Ferner kann, obwohl nicht gezeigt, das System 700 mit einem Netzwerk (z.B. einem Telekommunikationsnetzwerk, Lokalbereichsnetzwerk (LAN), drahtlosem Netzwerk, Weitbereichsnetzwerk (WAN), wie beispielsweise dem Internet, Peer-to-Peer-Netzwerk, Kabelnetzwerk oder dergleichen) für Kommunikationszwecke gekoppelt sein.Further, although not shown, the system may 700 be coupled to a network (eg, a telecommunications network, local area network (LAN), wireless network, wide area network (WAN) such as the Internet, peer-to-peer network, cable network, or the like) for communication purposes.

Claims (11)

Verfahren, umfassend: Kennzeichnen einer zu rendernden Szene; Rendern eines G-Puffers der Szene; Starten einer Strahlverfolgung für die Szene; während der Strahlverfolgung, Erzeugen eines Strahlendifferentials durch Zugreifen auf den G-Puffer; Anhängen des erzeugten Strahlendifferentials an einen aktuellen Strahl; und Verfolgen des erzeugten Strahlendifferentials.Method, comprising: Marking a scene to be rendered; Rendering a G-buffer of the scene; Starting a ray tracing for the scene; during ray tracing, generating a beam differential by accessing the G buffer; Attaching the generated beam differential to a current beam; and Tracking the generated beam differential. Verfahren gemäß Anspruch 1, wobei der G-Puffer ein Puffer von Bildschirmgröße ist, der unter Verwendung eines Pixel-Shader erzeugt wird.Method according to Claim 1 where the G buffer is a screen size buffer created using a pixel shader. Verfahren gemäß Anspruch 1 oder 2, wobei ein oder mehrere Attribute in den G-Puffer für jedes Pixel in der Szene geschrieben werden, wenn der G-Puffer der Szene gerendert wird.Method according to Claim 1 or 2 wherein one or more attributes are written to the G buffer for each pixel in the scene when rendering the G buffer of the scene. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei das Erzeugen des Strahlendifferentials durch Zugreifen auf den G-Puffer ein Zugreifen auf Einträge in dem G-Puffer für Pixel zur rechten des aktuellen Pixels und zur linken des aktuellen Pixels innerhalb des G-Puffers umfasst.The method of claim 1, wherein generating the beam differential by accessing the G buffer comprises accessing entries in the G buffer for pixels to the right of the current pixel and to the left of the current pixel within the G buffer. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei das Erzeugen des Strahlendifferentials durch Zugreifen auf den G-Puffer ein Zugreifen auf Einträge im G-Puffer für Pixel umfasst, die über dem aktuellen Pixel und/oder unter dem aktuellen Pixel innerhalb des G-Puffers sind.The method of claim 1, wherein generating the beam differential by accessing the G buffer comprises accessing entries in the G buffer for pixels that are above the current pixel and / or below the current pixel within the G buffer. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei auf G-Puffereinträge für Pixel zugegriffen wird, die am nächsten zu dem aktuellen Pixel sowohl horizontal als auch vertikal sind.A method according to any one of the preceding claims, wherein G buffer entries are accessed for pixels closest to the current pixel, both horizontal and vertical. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei ein Abstand t zu einem Trefferpunkt im G-Puffer gespeichert wird.Method according to one of the preceding claims, wherein a distance t to a hit point in the G-buffer is stored. System umfassend: einen Prozessor, der konfiguriert ist, um: eine zu rendernde Szene zu kennzeichnen; einen G-Puffer der Szene zu rendern; eine Strahlverfolgung für die Szene zu starten; während der Strahlverfolgung, ein Strahlendifferential durch Zugreifen auf den G-Puffer zu erzeugen; das erzeugte Strahlendifferential an einen aktuellen Strahl anzuhängen; und das erzeugte Strahlendifferential zu verfolgen.System comprising: a processor configured to: to mark a scene to be rendered; render a G-buffer of the scene; to start a ray tracing for the scene; during beam tracing, generating a beam differential by accessing the G buffer; attach the generated radiation differential to a current beam; and to track the generated radiation differential. System gemäß Anspruch 8, das ferner konfiguriert ist, um ein Verfahren auszuführen, wie in einem der Ansprüche 2 bis 7. System according to Claim 8 , which is further configured to perform a method as in any of Claims 2 to 7 , Computerlesbares Speichermedium, das Anweisungen speichert, die, wenn von einem Prozessor ausgeführt, den Prozessor veranlassen, Schritte durchzuführen, umfassend: Kennzeichnen einer zu rendernden Szene; Rendering eines G-Puffers der Szene; Starten einer Strahlverfolgung für die Szene; während der Strahlverfolgung, Erzeugen eines Strahlendifferentials durch Zugreifen auf den G-Puffer; Anhängen des erzeugten Strahlendifferentials an einen aktuellen Strahl; und Verfolgen des erzeugten Strahlendifferentials.A computer-readable storage medium storing instructions that, when executed by a processor, cause the processor to perform steps comprising: Marking a scene to be rendered; Rendering a G-buffer of the scene; Starting a ray tracing for the scene; during ray tracing, generating a beam differential by accessing the G buffer; Attaching the generated beam differential to a current beam; and Tracking the generated beam differential. Computerlesbares Speichermedium gemäß Anspruch 10, das, wenn durch den Prozessor ausgeführt, den Prozessor veranlasst, Schritte eines Verfahrens durchzuführen, wie in Ansprüchen 2 bis 7 erwähnt.Computer-readable storage medium according to Claim 10 which, when executed by the processor, causes the processor to perform steps of a method as in Claims 2 to 7 mentioned.
DE102019100505.1A 2018-01-26 2019-01-10 Perform a texture detail level approximation Pending DE102019100505A1 (en)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US15/881,619 US20190236166A1 (en) 2018-01-26 2018-01-26 Performing a texture level-of-detail approximation
US15/881,619 2018-01-26
US16/010,316 US10460504B2 (en) 2018-01-26 2018-06-15 Performing a texture level-of-detail approximation
US16/010,316 2018-06-15
US16/022,506 2018-06-28
US16/022,506 US10600232B2 (en) 2018-01-26 2018-06-28 Creating a ray differential by accessing a G-buffer

Publications (1)

Publication Number Publication Date
DE102019100505A1 true DE102019100505A1 (en) 2019-08-01

Family

ID=67224005

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019100505.1A Pending DE102019100505A1 (en) 2018-01-26 2019-01-10 Perform a texture detail level approximation

Country Status (1)

Country Link
DE (1) DE102019100505A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113628315A (en) * 2020-05-08 2021-11-09 辉达公司 Techniques for ray cone tracing and texture filtering

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113628315A (en) * 2020-05-08 2021-11-09 辉达公司 Techniques for ray cone tracing and texture filtering
CN113628315B (en) * 2020-05-08 2024-02-23 辉达公司 Techniques for ray cone tracking and texture filtering

Similar Documents

Publication Publication Date Title
DE102019103059B4 (en) Slash and stab-proof beam triangle intersection
US10362289B2 (en) Method for data reuse and applications to spatio-temporal supersampling and de-noising
DE102015113797B4 (en) Relative encoding for a block-based bounding volume hierarchy
DE102013114090B4 (en) Conservative screening of primitives using an error term
DE102018113845A1 (en) Systems and methods for training neural networks with sparse data
DE102013222685B4 (en) System, method and computer program product for sampling a hierarchical depth map
US20160048999A1 (en) System, method, and computer program product for shading using a dynamic object-space grid
DE102018114286A1 (en) Perform a traversal stack compression
DE102018127647A1 (en) SYSTEMS AND METHOD FOR TRAINING NEURONAL NETWORKS ON REGRESSION WITHOUT REFERENCE DATA TRAINING PATTERNS
US10055883B2 (en) Frustum tests for sub-pixel shadows
US9230363B2 (en) System, method, and computer program product for using compression with programmable sample locations
DE102017108096A1 (en) SYSTEM, METHOD AND COMPUTER PROGRAM PRODUCT FOR TRANSMITTING TO VARIABLE SCRAP BY MEANS OF PROJECTIVE GEOMETRIC DISTORTION
DE102018120859A1 (en) Inline data inspection to simplify workloads
US9230362B2 (en) System, method, and computer program product for using compression with programmable sample locations
DE102018101030A1 (en) Filter image data using a neutral network
US9305324B2 (en) System, method, and computer program product for tiled deferred shading
US10460504B2 (en) Performing a texture level-of-detail approximation
DE102018114929A1 (en) System and method for near-field light field rendering for an interactive three-dimensional computer graphics with a wide field of view
US9269179B2 (en) System, method, and computer program product for generating primitive specific attributes
DE102017109472A1 (en) STEREO MULTIPLE PROJECTION IMPLEMENTED BY USING A GRAPHIC PROCESSING PIPELINE
US20150179142A1 (en) System, method, and computer program product for reduced-rate calculation of low-frequency pixel shader intermediate values
US9721381B2 (en) System, method, and computer program product for discarding pixel samples
DE102019101871A1 (en) Method and apparatus for obtaining scan positions from texturing operations
DE102018128699A1 (en) Adjusting an angular sampling rate during rendering using gaze information
DE102020118860A1 (en) TECHNIQUES FOR PRELOADING TEXTURES WHEN RENDERING GRAPHICS

Legal Events

Date Code Title Description
R012 Request for examination validly filed