Freigeben über


Belichtung von HLSL-Streamingressourcen

Eine bestimmte HLSL-Syntax (High Level Shader Language) von Microsoft ist erforderlich, um Streamingressourcen im Shadermodell 5 zu unterstützen.

Die HLSL-Syntax für Shadermodell 5 ist nur auf Geräten zulässig, auf denen Streamingressourcen unterstützt werden. Jede relevante HLSL-Methode für Streamingressourcen in der folgenden Tabelle akzeptiert entweder einen (Feedback) oder zwei (Clamp und Feedback in dieser Reihenfolge) zusätzliche optionale Parameter. Eine Sample-Methode ist beispielsweise:

Sample(sampler, location [, offset [, clamp [, feedback] ] ])

Ein Beispiel für eine Sample-Methode ist Texture2D.Sample(S,float,int,float,uint).

Die Parameter Offset, Clamp und Feedback sind optional. Sie müssen alle optionalen Parameter bis zu dem von Ihnen benötigten Parameter angeben, der mit den C++-Regeln für Standardfunktionsargumente konsistent ist. Wenn beispielsweise das Feedback status benötigt wird, müssen sowohl Offset- als auch Clampparameter explizit für Sample bereitgestellt werden, auch wenn sie möglicherweise nicht logisch benötigt werden.

Der clamp-Parameter ist ein skalarer Float-Wert. Der Literalwert clamp=0,0f gibt an, dass der Klemmvorgang nicht ausgeführt wird.

Der Feedbackparameter ist eine uint-Variable , die Sie für die systeminterne CheckAccessFullyMapped-Funktion zur Abfrage des Arbeitsspeicherzugriffs bereitstellen können. Sie dürfen den Wert des Feedbackparameters nicht ändern oder interpretieren. Der Compiler bietet jedoch keine erweiterte Analyse und Diagnose, um zu erkennen, ob Sie den Wert geändert haben.

Hier ist die Syntax von CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped interpretiert den Wert von FeedbackVar und gibt true zurück, wenn alle Daten, auf die zugegriffen wird, in der Ressource zugeordnet wurden. Andernfalls gibt CheckAccessFullyMapped false zurück.

Wenn entweder der Clamp- oder der Feedbackparameter vorhanden ist, gibt der Compiler eine Variante der grundlegenden Anweisung aus. Beispielsweise generiert das Beispiel einer Streamingressource die sample_cl_s Anweisung.

Wenn weder Clamp noch Feedback angegeben ist, gibt der Compiler die grundlegende Anweisung aus, sodass es keine Änderung gegenüber dem aktuellen Verhalten gibt.

Der Clampwert von 0,0f gibt an, dass keine Klemmung ausgeführt wird. Daher kann der Treibercompiler die Anweisung weiter an die Zielhardware anpassen. Wenn feedback ein NULL-Register in einer Anweisung ist, wird das Feedback nicht verwendet. Daher kann der Treibercompiler die Anweisung weiter an die Zielarchitektur anpassen.

Wenn der HLSL-Compiler ableiten, dass die Clamp 0,0f ist und das Feedback nicht verwendet wird, gibt der Compiler die entsprechende grundlegende Anweisung aus (z. B sample . anstelle von sample_cl_s).

Wenn ein Streamingressourcenzugriff aus mehreren Bytecodeanweisungen besteht, z. B. für strukturierte Ressourcen, aggregiert der Compiler einzelne Feedbackwerte über den OR-Vorgang, um den endgültigen Feedbackwert zu erzeugen. Daher sehen Sie einen einzelnen Feedbackwert für einen so komplexen Zugriff.

Dies ist die Zusammenfassungstabelle der HLSL-Methoden, die geändert wurden, um Feedback und/oder Clamp zu unterstützen. Diese funktionieren alle für kachelte und nicht streamingfähige Ressourcen aller Dimensionen. Nicht-Streamingressourcen scheinen immer vollständig zugeordnet zu sein.

HLSL-Objekte Intrinsische Methoden mit Feedbackoption (*) - hat auch die Clamp-Option

[RW] Texture2D

[RW] Texture2DArray

TextureCUBE

TextureCUBEArray

Versammeln

GatherRed

GatherGreen

GatherBlue

GatherAlpha

GatherCmp

GatherCmpRed

GatherCmpGreen

GatherCmpBlue

GatherCmpAlpha

[RW] Textur1D

[RW] Texture1DArray

[RW] Texture2D

[RW] Texture2DArray

[RW] Texture3D

TextureCUBE

TextureCUBEArray

Beispiel*

SampleBias*

SampleCmp*

SampleCmpLevelZero

SampleGrad*

SampleLevel

[RW] Textur1D

[RW] Texture1DArray

[RW] Texture2D

Texture2DMS

[RW] Texture2DArray

Texture2DArrayMS

[RW] Texture3D

[RW] Puffer

[RW] ByteAddressBuffer

[RW] StructuredBuffer

Laden

 

Pipelinezugriff auf Streamingressourcen