switch (sm4 - asm)
Überträgt die Steuerung abhängig vom Wert eines Selektors an einen anderen Anweisungsblock innerhalb des Switch-Textkörpers.
| switch src0.selected-Komponente _ |
|---|
| Element | Beschreibung |
|---|---|
| src0 |
[in ] Der Selektor für die switch-Anweisung. |
Hinweise
Ein Switch / endswitch-Konstrukt verhält sich genau wie ein Switchkonstrukt in der Programmiersprache C, mit der folgenden Ausnahme: Für D3D11-Fall-Standard-Anweisungen, die auf den Standardwert des nächsten Falls ohne Unterbrechung fallen, kann kein Code / / enthalten sein. Es ist zulässig, dass mehrere Case-Anweisungen, einschließlich standard , sequenziell angezeigt werden und denselben Codeblock gemeinsam nutzen.
Die Bedingung muss eine 32-Bit-Registerkomponente oder eine unmittelbare Menge sein. Der Gleichheitsvergleich ist bitweise (ganze Zahl).
Wie bei jeder Shader-Anweisung in D3D11 kann hardware das Switchkonstrukt direkt implementieren.
Switch-Anweisungen können geschachtelt werden. Jeder Switchblock zählt als 1 Ebene für die Schachtelungstiefe der Flusssteuerung von 64 pro Unterroutine und Hauptebene, unabhängig von der Anzahl der Case-Anweisungen. Der HLSL-Compiler generiert keine Unterroutinen, die diesen Grenzwert überschreiten. Das Verhalten von Ablaufsteuerungsanweisungen über 64 Ebenen hinaus pro Unterroutine ist nicht definiert.
Im folgenden Beispiel wird die Verwendung dieser Anweisung veranschaulicht.
...
switch r0.x
default: // falling through
case 3
switch r1.x
case 4
...
break
case 5
...
break
endswitch
break
case 0
break
endswitch
Diese Anweisung gilt für die folgenden Shaderstufen:
| Vertexshader | Geometrie-Shader | Pixelshader |
|---|---|---|
| x | x | x |
Minimales Shadermodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
| Shadermodell | Unterstützt |
|---|---|
| Shadermodell 5 | ja |
| Shadermodell 4.1 | ja |
| Shadermodell 4 | ja |
| Shadermodell 3 (DirectX HLSL) | nein |
| Shadermodell 2 (DirectX HLSL) | nein |
| Shadermodell 1 (DirectX HLSL) | nein |