Freigeben über


Exposition gekachelter HLSL-Ressourcen

Die neue HLSL-Syntax (Microsoft High Level Shader Language) ist erforderlich, um gekachelte Ressourcen in Shadermodell 5 zu unterstützen.

Die neue HLSL-Syntax ist nur auf Geräten zulässig, auf denen gekachelte Ressourcen unterstützt werden. Jede relevante HLSL-Methode für gekachelte Ressourcen in der folgenden Tabelle akzeptiert entweder einen (Feedback) oder zwei (Klemme und Feedback in dieser Reihenfolge) zusätzliche optionale Parameter. Beispiel:

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

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

Die Offset-, Klemm- und Feedbackparameter sind optional. Sie müssen alle optionalen Parameter bis zu dem erforderlichen 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 Klemmparameter explizit für Sample bereitgestellt werden, auch wenn sie möglicherweise nicht logisch erforderlich sind.

Der Clamp-Parameter ist ein skalarer Floatwert. Der Literalwert von clamp=0.0f gibt an, dass der Klemmvorgang nicht ausgeführt wird.

Der Feedbackparameter ist eine uint-Variable , die Sie für die speicherzugriffsbasierte Abfragefunktion CheckAccessFullyMapped 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 sehen Sie 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 Feedbackparameter vorhanden ist, gibt der Compiler eine Variante der grundlegenden Anweisung aus. Beispiel für eine gekachelte Ressource generiert die sample_cl_s Anweisung. Wenn weder Klemme noch Feedback angegeben ist, gibt der Compiler die grundlegende Anweisung aus, sodass keine Änderung gegenüber dem aktuellen Verhalten erfolgt. Der Klemmwert von 0,0f gibt an, dass keine Klemme 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 sample_cl_svon ).

Wenn ein gekachelter Ressourcenzugriff aus mehreren codegebenden Byte-Codeanweisungen 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 werden, um Feedback und/oder Klemme zu unterstützen. Diese arbeiten alle für gekachelte und nicht gekachelte Ressourcen aller Dimensionen. Nicht gekachelte Ressourcen scheinen immer vollständig zugeordnet zu sein.

HLSL-Objekte Intrinsische Methoden mit Feedbackoption (*) – hat auch die Klemmoption
[RW] Texture2D
[RW] Texture2DArray
TextureCUBE
TextureCUBEArray
Versammeln
GatherRed
GatherGreen
GatherBlue
GatherAlpha
GatherCmp
GatherCmpRed
GatherCmpGreen
GatherCmpBlue
GatherCmpAlpha
[RW] Texture1D
[RW] Texture1DArray
[RW] Texture2D
[RW] Texture2DArray
[RW] Texture3D
TextureCUBE
TextureCUBEArray
Beispiel*
SampleBias*
SampleCmp*
SampleCmpLevelZero
SampleGrad*
SampleLevel
[RW] Texture1D
[RW] Texture1DArray
[RW] Texture2D
Texture2DMS
[RW] Texture2DArray
Texture2DArrayMS
[RW] Texture3D
[RW] Puffer
[RW] ByteAddressBuffer
[RW] StructuredBuffer
Laden

Pipelinezugriff auf gekachelte Ressourcen