[pixel shader todo(sm<4)] uniform float4 u; float4 main() : sv_target { if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } [test] uniform 0 float4 0.0 0.0 0.0 0.0 todo(sm<4) draw quad probe all rgba (0.9, 0.8, 0.7, 0.6) uniform 0 float4 0.1 0.0 0.0 0.0 todo(sm<4) draw quad probe all rgba (0.1, 0.2, 0.3, 0.4) [pixel shader todo(sm<4)] uniform float4 u; float4 main() : sv_target { [attr1] if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } [pixel shader todo(sm<4)] uniform float4 u; float4 main() : sv_target { [flatten] if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } [test] uniform 0 float4 0.0 0.0 0.0 0.0 todo(sm<4) draw quad probe all rgba (0.9, 0.8, 0.7, 0.6) [pixel shader fail(sm<6)] float4 u; float main() : sv_target { [branch] [branch] if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } [pixel shader fail todo] float4 u; float main() : sv_target { [branch] [flatten] if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } % Using older profiles fails to compile with forced control flow instruction [require] shader model >= 3.0 [pixel shader todo(sm<4)] uniform float4 u; float4 main() : sv_target { [branch] if (u.x > 0.0) return float4(0.1, 0.2, 0.3, 0.4); else return float4(0.9, 0.8, 0.7, 0.6); } [test] uniform 0 float4 0.0 0.0 0.0 0.0 todo(sm<4 | sm>=6) draw quad probe all rgba (0.9, 0.8, 0.7, 0.6) [pixel shader] float4 main() : sv_target { bool c = false; float a = -1.0f; if (c) return float4(1.0, 2.0, 3.0, 4.0); else if (a > 0) return float4(5.0, 6.0, 7.0, 8.0); else return float4(9.0, 10.0, 11.0, 12.0); } [test] draw quad probe all rgba (9.0, 10.0, 11.0, 12.0)