switch (sm4 - asm)
Trasferisce il controllo a un blocco di istruzioni diverso all'interno del corpo del commutatore a seconda del valore di un selettore.
switch src0.select_component |
---|
Elemento | Descrizione |
---|---|
src0 |
[in] Selettore per l'istruzione switch. |
Commenti
Un costruttoendwitchswitch/ si comporta esattamente come costrutto di commutatori nel linguaggio C, con l'eccezione seguente: per le istruzionipredefinite del caso/ D3D11 che rientrano nel caso/ successivopredefinite senza un'interruzione non possono avere codice in essi. È consentito che più istruzioni case , tra cui impostazione predefinita, vengano visualizzate in sequenza, condividendo lo stesso blocco di codice.
La condizione deve essere un componente di registrazione a 32 bit o una quantità immediata. Il confronto di uguaglianza è bit per bit (integer).
Come per qualsiasi istruzione Shader nella D3D11, l'hardware può o non implementare direttamente il costrutto di commutatore .
Le istruzioni switch possono essere annidate. Ogni blocco di commutatori conta come 1 livello rispetto al limite di profondità annidamento del flusso pari a 64 per subroutine e main, indipendentemente dal numero di istruzioni case . Il compilatore HLSL non genererà subroutine che superano questo limite. Il comportamento delle istruzioni del flusso di controllo oltre i 64 livelli profondi per subroutine non è definito.
Nell'esempio seguente viene illustrato come usare questa istruzione.
...
switch r0.x
default: // falling through
case 3
switch r1.x
case 4
...
break
case 5
...
break
endswitch
break
case 0
break
endswitch
Questa istruzione si applica alle fasi dello shader seguenti:
Vertex shader | Geometry shader | Pixel shader |
---|---|---|
x | x | x |
Modello di shader minimo
Questa funzione è supportata nei modelli shader seguenti.
Modello di shader | Supportato |
---|---|
Modello shader 5 | sì |
Modello shader 4.1 | sì |
Modello shader 4 | sì |
Modello shader 3 (DirectX HLSL) | no |
Modello shader 2 (DirectX HLSL) | no |
Modello shader 1 (DirectX HLSL) | no |