Freigeben über


Rasterizer-geordnete Ansichten

Rasterizergeordnete Ansichten (ROVs) ermöglichen es Pixel-Shadercode, ungeordnete Zugriffsansichtsbindungen (UAV) mit einer Deklaration zu markieren, die die normalen Anforderungen für die Reihenfolge der Grafikpipelineergebnisse für UAVs ändert. Auf diese Weise können geordnete unabhängige Transparenzalgorithmen (OIT) funktionieren, wodurch wesentlich bessere Renderingergebnisse erzielt werden, wenn sich mehrere transparente Objekte in einer Ansicht aufeinander befinden.

Überblick

Standardgrafikpipelines haben möglicherweise Probleme beim ordnungsgemäßen Kompositing mehrerer Texturen, die Transparenz enthalten. Objekte wie Drahtzäune, Rauch, Feuer, Vegetation und farbiges Glas verwenden Transparenz, um den gewünschten Effekt zu erzielen. Probleme treten auf, wenn mehrere Texturen, die Transparenz enthalten, miteinander in Einklang stehen (z. B. vor einem Zaun vor einem Glasgebäude mit Vegetation). Rasterizergeordnete Ansichten (ROVs) ermöglichen es den zugrunde liegenden OIT-Algorithmen, Features der Hardware zu verwenden, um zu versuchen, die Transparenzreihenfolge korrekt zu beheben. Transparenz wird vom Pixelshader behandelt.

Rasterizergeordnete Ansichten (ROVs) ermöglichen es Pixel-Shadercode, UAV-Bindungen mit einer Deklaration zu markieren, die die normalen Anforderungen für die Reihenfolge der Grafikpipelineergebnisse für UAVs ändert.

ROVs garantieren die Reihenfolge der UAV-Zugriffe für jedes Paar überlappender Pixelshaderaufrufe. In diesem Fall bedeutet "überlappend", dass die Aufrufe von denselben Draw-Aufrufen generiert werden und dieselbe Pixelkoordinate im Ausführungsmodus mit Pixelfrequenz und die gleiche Pixel- und Beispielkoordinate im Beispielfrequenzmodus gemeinsam verwenden.

Die Reihenfolge, in der sich überlappende ROV-Zugriffe von Pixelshaderaufrufen ausgeführt werden, ist identisch mit der Reihenfolge, in der die Geometrie übermittelt wird. Dies bedeutet, dass für überlappende Pixelshaderaufrufe ROV-Schreibvorgänge, die von einem Pixelshaderaufruf ausgeführt werden, verfügbar sein müssen, um von einem nachfolgenden Aufruf gelesen werden zu können und sich nicht auf Lesevorgänge durch einen vorherigen Aufruf auswirken. ROV-Lesevorgänge, die von einem Pixelshaderaufruf ausgeführt werden, müssen Schreibvorgänge durch einen vorherigen Aufruf widerspiegeln und dürfen keine Schreibvorgänge durch einen nachfolgenden Aufruf widerspiegeln. Dies ist für UAVs wichtig, da sie explizit von der Ausgabeinvarianz garantiert werden, die normalerweise durch die feste Reihenfolge der Grafikpipelineergebnisse festgelegt wird.

Implementierungsdetails

Rasterizergeordnete Ansichten (ROVs) werden mit den folgenden neuen HLSL-Objekten (High Level Shader Language) deklariert und sind nur für den Pixelshader verfügbar:

  • RasterizerOrderedBuffer
  • RasterizerOrderedByteAddressBuffer
  • RasterizerOrderedStructuredBuffer
  • RasterizerOrderedTexture1D
  • RasterizerOrderedTexture1DArray
  • RasterizerOrderedTexture2D
  • RasterizerOrderedTexture2DArray
  • RasterizerOrderedTexture3D

Verwenden Sie diese Objekte auf die gleiche Weise wie andere UAV-Objekte (z. B. RWBuffer usw.).

API-Zusammenfassung

ROVs sind ein NUR-HLSL-Konstrukt, das unterschiedliche Verhaltenssemantik auf UAVs anwendet. Alle APIs, die für UAVs relevant sind, sind auch für ROVs relevant. Beachten Sie, dass die folgende Methode, Strukturen und Hilfsklasse auf den Rasterizer verweisen: