switch (sm4 - asm)
Transfers control to a different statement block within the switch body depending on the value of a selector.
||[in] The selector for the switch statement.
A switch/endswitch construct behaves exactly as a switch construct in the C language, with the following exception: for D3D11 case/default statements that fall through to the next case/default without a break cannot have any code in them. It is permitted for multiple case statements, including default, to appear sequentially, sharing the same code block.
The condition must be a 32-bit register component or immediate quantity. The equality comparison is bitwise (integer).
As with any Shader instruction in the D3D11, hardware may or may not implement the switch construct directly.
Switch statements can be nested. Each switch block counts as 1 level against the flow control nesting depth limit of 64 per subroutine and main, independent of the number of case statements. The HLSL compiler will not generate subroutines that exceed this limit. Behavior of control flow instructions beyond 64 levels deep per subroutine is undefined.
The following example shows how to use this instruction.
... switch r0.x default: // falling through case 3 switch r1.x case 4 ... break case 5 ... break endswitch break case 0 break endswitch
This instruction applies to the following shader stages:
|Vertex Shader||Geometry Shader||Pixel Shader|
Minimum Shader Model
This function is supported in the following shader models.
|Shader Model 5||yes|
|Shader Model 4.1||yes|
|Shader Model 4||yes|
|Shader Model 3 (DirectX HLSL)||no|
|Shader Model 2 (DirectX HLSL)||no|
|Shader Model 1 (DirectX HLSL)||no|