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:
- D3D12_RASTERIZER_DESC: Struktur mit der Beschreibung des Rasterizers.
- D3D12_FEATURE_DATA_D3D12_OPTIONS: Struktur, die einen booleschen Wert aufweist, der die Unterstützung angibt.
- CheckFeatureSupport: Methode für den Zugriff auf die unterstützten Features.
- CD3DX12_RASTERIZER_DESC: Hilfsklasse zum Erstellen von Rasterizerbeschreibungen.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC: Struktur, die den Pipelinestatus hält.