1 [pixel shader todo(sm<4)]
4 float4 main() : sv_target
18 if(sm<4) uniform 0 float4 3 0 0 0
19 if(sm>=4) uniform 0 uint4 3 0 0 0
20 todo(sm<4 | msl) draw quad
21 probe (0, 0) rgba (5.0, 5.0, 5.0, 5.0)
22 if(sm<4) uniform 0 float4 1 0 0 0
23 if(sm>=4) uniform 0 uint4 1 0 0 0
24 todo(sm<4 | msl) draw quad
25 probe (0, 0) rgba (4.0, 4.0, 4.0, 4.0)
26 if(sm<4) uniform 0 float4 0 0 0 0
27 if(sm>=4) uniform 0 uint4 0 0 0 0
28 todo(sm<4 | msl) draw quad
29 probe (0, 0) rgba (3.0, 3.0, 3.0, 3.0)
33 [pixel shader todo(sm<4)]
36 float4 main() : sv_target
46 if(sm<4) uniform 0 float4 3 0 0 0
47 if(sm>=4) uniform 0 uint4 3 0 0 0
48 todo(sm<4 | msl) draw quad
49 probe (0, 0) rgba (5.0, 5.0, 5.0, 5.0)
50 if(sm<4) uniform 0 float4 1 0 0 0
51 if(sm>=4) uniform 0 uint4 1 0 0 0
52 todo(sm<4 | msl) draw quad
53 probe (0, 0) rgba (5.0, 5.0, 5.0, 5.0)
54 if(sm<4) uniform 0 float4 0 0 0 0
55 if(sm>=4) uniform 0 uint4 0 0 0 0
56 todo(sm<4 | msl) draw quad
57 probe (0, 0) rgba (5.0, 5.0, 5.0, 5.0)
64 float4 main() : sv_target
72 % falling through is only supported for empty case statements
73 [pixel shader todo(sm<4)]
76 float4 main() : sv_target
78 float4 c = {1.0, 2.0, 3.0, 4.0};
92 if(sm<4) uniform 0 float4 2 0 0 0
93 if(sm>=4) uniform 0 uint4 2 0 0 0
94 todo(sm<4 | msl) draw quad
95 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
96 if(sm<4) uniform 0 float4 1 0 0 0
97 if(sm>=4) uniform 0 uint4 1 0 0 0
98 todo(sm<4 | msl) draw quad
99 probe (0, 0) rgba (1.1, 2.0, 3.0, 4.0)
100 if(sm<4) uniform 0 float4 0 0 0 0
101 if(sm>=4) uniform 0 uint4 0 0 0 0
102 todo(sm<4 | msl) draw quad
103 probe (0, 0) rgba (1.1, 2.0, 3.0, 4.0)
106 % case value evaluation
107 [pixel shader todo(sm<4)]
110 float4 main() : sv_target
112 float4 c = {1.0, 2.0, 3.0, 4.0};
128 if(sm<4) uniform 0 float4 2 0 0 0
129 if(sm>=4) uniform 0 uint4 2 0 0 0
130 todo(sm<4 | msl) draw quad
131 probe (0, 0) rgba (1.1, 2.1, 3.1, 4.1)
132 if(sm<4) uniform 0 float4 1 0 0 0
133 if(sm>=4) uniform 0 uint4 1 0 0 0
134 todo(sm<4 | msl) draw quad
135 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
138 % floats are accepted
139 [pixel shader fail(sm>=6) todo(sm<4)]
142 float4 main() : sv_target
144 float4 c = {1.0, 2.0, 3.0, 4.0};
160 if(sm<4) uniform 0 float4 2 0 0 0
161 if(sm>=4) uniform 0 uint4 2 0 0 0
162 todo(sm<4 | msl) draw quad
163 probe (0, 0) rgba (1.1, 2.1, 3.1, 4.1)
164 if(sm<4) uniform 0 float4 1 0 0 0
165 if(sm>=4) uniform 0 uint4 1 0 0 0
166 todo(sm<4 | msl) draw quad
167 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
169 [pixel shader fail(sm<4 | sm>=6) todo(sm<4)]
172 float4 main() : sv_target
174 float4 c = {1.0, 2.0, 3.0, 4.0};
190 uniform 0 float4 2.0 0.0 0.0 0.0
191 todo(sm<4 | msl) draw quad
192 probe (0, 0) rgba (1.1, 2.1, 3.1, 4.1)
193 uniform 0 float4 1.0 0.0 0.0 0.0
194 todo(sm<4 | msl) draw quad
195 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
200 float4 main() : sv_target
202 float4 c = {1.0, 2.0, 3.0, 4.0};
222 float4 main() : sv_target
224 float4 c = {1.0, 2.0, 3.0, 4.0};
239 % multiple default cases
243 float4 main() : sv_target
245 float4 c = {1.0, 2.0, 3.0, 4.0};
264 [pixel shader fail(sm<6)]
267 float4 main() : sv_target
269 float4 c = {1.0, 2.0, 3.0, 4.0};
286 float4 main() : sv_target
302 float4 main() : sv_target
315 [pixel shader fail(sm<6)]
318 float4 main() : sv_target
332 [pixel shader fail(sm<6)]
335 float4 main() : sv_target
349 [pixel shader fail(sm<6)]
352 float4 main() : sv_target
364 % more complicated breaks
365 [pixel shader todo(sm<4)]
368 float4 main() : sv_target
370 float4 c = {1.0, 2.0, 3.0, 4.0};
391 if(sm<4) uniform 0 float4 2 0 0 0
392 if(sm>=4) uniform 0 uint4 2 0 0 0
393 todo(sm<4 | msl) draw quad
394 probe (0, 0) rgba (1.1, 2.1, 3.1, 4.1)
395 if(sm<4) uniform 0 float4 1 0 0 0
396 if(sm>=4) uniform 0 uint4 1 0 0 0
397 todo(sm<4 | msl) draw quad
398 probe (0, 0) rgba (1.2, 2.2, 3.2, 4.2)
399 if(sm<4) uniform 0 float4 0 0 0 0
400 if(sm>=4) uniform 0 uint4 0 0 0 0
401 todo(sm<4 | msl) draw quad
402 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
404 % switch breaks within a loop
405 [pixel shader todo(sm<4)]
408 float4 main() : sv_target
410 float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
412 for (int i = 0; i < 4; ++i)
432 if(sm<4) uniform 0 float4 2 0 0 0
433 if(sm>=4) uniform 0 uint4 2 0 0 0
434 todo(sm<4 | msl) draw quad
435 probe (0, 0) rgba (5.0, 6.0, 7.0, 8.0)
438 % default case placement
439 [pixel shader todo(sm<4)]
442 float4 main() : sv_target
444 float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
465 if(sm<4) uniform 0 float4 0 0 0 0
466 if(sm>=4) uniform 0 uint4 0 0 0 0
467 todo(sm<4 | msl) draw quad
468 probe (0, 0) rgba (4.0, 5.0, 6.0, 7.0)
469 if(sm<4) uniform 0 float4 2 0 0 0
470 if(sm>=4) uniform 0 uint4 2 0 0 0
471 todo(sm<4 | msl) draw quad
472 probe (0, 0) rgba (2.0, 3.0, 4.0, 5.0)
473 if(sm<4) uniform 0 float4 3 0 0 0
474 if(sm>=4) uniform 0 uint4 3 0 0 0
475 todo(sm<4 | msl) draw quad
476 probe (0, 0) rgba (4.0, 5.0, 6.0, 7.0)
479 [pixel shader todo(sm<4)]
482 float4 main() : sv_target
484 float4 c = {1.0f, 2.0f, 3.0f, 4.0f};
506 if(sm<4) uniform 0 float4 3 0 0 0
507 if(sm>=4) uniform 0 uint4 3 0 0 0
508 todo(sm<4 | msl) draw quad
509 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
510 if(sm<4) uniform 0 float4 0 0 0 0
511 if(sm>=4) uniform 0 uint4 0 0 0 0
512 todo(sm<4 | msl) draw quad
513 probe (0, 0) rgba (4.0, 5.0, 6.0, 7.0)
514 if(sm<4) uniform 0 float4 5 0 0 0
515 if(sm>=4) uniform 0 uint4 5 0 0 0
516 todo(sm<4 | msl) draw quad
517 probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
519 % 'continue' is not supported in switches
520 [pixel shader fail(sm<6)]
523 float4 main() : sv_target
525 float4 c = {1.0, 2.0, 3.0, 4.0};
528 for (i = 0; i < v.z; i++)
545 [pixel shader fail(sm<4) todo(sm<4)]
548 float4 main() : sv_target
550 float4 c = {1.0, 2.0, 3.0, 4.0};
553 for (i = 0; i < v.z; i++)
558 for (j = 0; j < v.z; j++)
575 if(sm<4) uniform 0 float4 1 0 3 1
576 if(sm>=4) uniform 0 uint4 1 0 3 1
578 probe (0, 0) rgba (10.0, 11.0, 12.0, 13.0)
579 if(sm<4) uniform 0 float4 0 0 3 1
580 if(sm>=4) uniform 0 uint4 0 0 3 1
582 probe (0, 0) rgba (7.0, 8.0, 9.0, 10.0)
584 % return from a switch nested in a loop
585 [pixel shader fail(sm<4) todo(sm<4)]
586 /* In theory this could be directly defined as uint4, but that hits some kind
587 * of optimization bug on Metal, which we work around this way. */
590 float4 main() : sv_target
592 float4 c = {1.0, 2.0, 3.0, 4.0};
596 for (i = 0; i < v.z; i++)
614 uniform 0 float4 0 0 3 1
616 probe (0, 0) rgba (304.0, 305.0, 306.0, 307.0)
617 uniform 0 float4 1 0 3 1
619 probe (0, 0) rgba (3.0, 4.0, 5.0, 6.0)
627 float4 main() : sv_target
629 // Need three cases because dxcompiler optimises two case values to a pair of vselect instructions.
644 uniform 0 uint64_t2 2 0
646 probe (0, 0) rgba (5.0, 5.0, 5.0, 5.0)
647 uniform 0 uint64_t2 0x100000002 0
649 probe (0, 0) rgba (4.0, 4.0, 4.0, 4.0)
650 uniform 0 uint64_t2 0 0
652 probe (0, 0) rgba (3.0, 3.0, 3.0, 3.0)