| 
									
										
										
										
											2023-11-15 17:41:33 -03:00
										 |  |  | [pixel shader todo(sm<4)] | 
					
						
							| 
									
										
										
										
											2023-11-23 12:59:31 -03:00
										 |  |  | float cond; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a = {1, 2, 3, 4}; | 
					
						
							|  |  |  |     float4 b; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // invalidate a | 
					
						
							|  |  |  |     if (cond) | 
					
						
							|  |  |  |         a = float4(-1, -2, -3, -4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     b = a; | 
					
						
							|  |  |  |     a.y = 357; | 
					
						
							|  |  |  |     return b.y; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float 0.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (2.0, 2.0, 2.0, 2.0) | 
					
						
							| 
									
										
										
										
											2023-11-23 12:59:31 -03:00
										 |  |  | uniform 0 float 1.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (-2.0, -2.0, -2.0, -2.0) | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-15 17:41:33 -03:00
										 |  |  | [pixel shader todo(sm<4)] | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | float cond; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 r = {1, 2}; | 
					
						
							|  |  |  |     float2 tmp; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // invalidate r | 
					
						
							|  |  |  |     if (cond) | 
					
						
							|  |  |  |         r = float2(10, 20); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tmp = r; | 
					
						
							|  |  |  |     r = tmp; | 
					
						
							|  |  |  |     return r.y; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float 0.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (2.0, 2.0, 2.0, 2.0) | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | uniform 0 float 1.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (20.0, 20.0, 20.0, 20.0) | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-15 17:41:33 -03:00
										 |  |  | [pixel shader todo(sm<4)] | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | float cond; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 r = {3, 4}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // invalidate r | 
					
						
							|  |  |  |     if (cond) | 
					
						
							|  |  |  |         r = float2(30, 40); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     r = r; | 
					
						
							|  |  |  |     r = float2(1, r.y); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return float4(r, 0, 0); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-11-15 17:41:33 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float 0.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (1.0, 4.0, 0.0, 0.0) | 
					
						
							| 
									
										
										
										
											2023-11-21 19:48:50 -03:00
										 |  |  | uniform 0 float 1.0 | 
					
						
							| 
									
										
										
										
											2024-12-03 00:06:32 +08:00
										 |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2024-02-10 13:16:22 -06:00
										 |  |  | probe (0, 0) rgba (1.0, 40.0, 0.0, 0.0) | 
					
						
							| 
									
										
										
										
											2025-02-14 16:20:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | float x[6]; | 
					
						
							|  |  |  | float y[3]; | 
					
						
							|  |  |  | uint4 i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 r; | 
					
						
							|  |  |  |     float z[3][2]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     z[0][0] = x[0]; | 
					
						
							|  |  |  |     z[1][0] = x[1]; | 
					
						
							|  |  |  |     z[2][0] = x[2]; | 
					
						
							|  |  |  |     z[0][1] = x[1]; | 
					
						
							|  |  |  |     z[1][1] = x[3]; | 
					
						
							|  |  |  |     z[2][1] = x[5]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     r.x = z[i.x][0]; | 
					
						
							|  |  |  |     r.y = z[i.y][1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     z[0][1] = y[2]; | 
					
						
							|  |  |  |     z[1][1] = y[1]; | 
					
						
							|  |  |  |     z[2][1] = y[0]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     r.z = z[i.z][1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     z[2][0] = x[1]; | 
					
						
							|  |  |  |     z[2][1] = x[5]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     r.w = z[2][i.w]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return r; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0  float 1.0 | 
					
						
							|  |  |  | uniform 4  float 2.0 | 
					
						
							|  |  |  | uniform 8  float 3.0 | 
					
						
							|  |  |  | uniform 12 float 4.0 | 
					
						
							|  |  |  | uniform 16 float 5.0 | 
					
						
							|  |  |  | uniform 20 float 6.0 | 
					
						
							|  |  |  | uniform 24 float -1.0 | 
					
						
							|  |  |  | uniform 28 float -2.0 | 
					
						
							|  |  |  | uniform 32 float -3.0 | 
					
						
							|  |  |  | if(sm<4)  uniform 36 float4 0 1 2 0 | 
					
						
							|  |  |  | if(sm>=4) uniform 36 uint4  0 1 2 0 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(1.0, 4.0, -1.0, 2.0) | 
					
						
							|  |  |  | if(sm<4)  uniform 36 float4 2 0 1 1 | 
					
						
							|  |  |  | if(sm>=4) uniform 36 uint4  2 0 1 1 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(3.0, 2.0, -2.0, 6.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | float x[4]; | 
					
						
							|  |  |  | uint4 i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float y[2][2]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     y[0][0] = x[0 + 2*0]; | 
					
						
							|  |  |  |     y[0][1] = x[0 + 2*1]; | 
					
						
							|  |  |  |     y[1][0] = x[1 + 2*0]; | 
					
						
							|  |  |  |     y[1][1] = x[1 + 2*1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return y[i.x][i.y]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0  float 1.0 | 
					
						
							|  |  |  | uniform 4  float 2.0 | 
					
						
							|  |  |  | uniform 8  float 3.0 | 
					
						
							|  |  |  | uniform 12 float 4.0 | 
					
						
							|  |  |  | if(sm<4)  uniform 16 float4 0 1 0 0 | 
					
						
							|  |  |  | if(sm>=4) uniform 16 uint4  0 1 0 0 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(3.0, 3.0, 3.0, 3.0) | 
					
						
							|  |  |  | if(sm<4)  uniform 16 float4 1 1 0 0 | 
					
						
							|  |  |  | if(sm>=4) uniform 16 uint4  1 1 0 0 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(4.0, 4.0, 4.0, 4.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Copy-prop is currently unable to propagate the following, | 
					
						
							|  |  |  | % as structs don't yet support dynamic indexing. | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a, b; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct s x; | 
					
						
							|  |  |  | uint4 i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 y[2] = {x.a, x.b}; | 
					
						
							|  |  |  |     return y[i.x]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 2.0 2.0 2.0 2.0 | 
					
						
							|  |  |  | uniform 4 float4 3.0 3.0 3.0 3.0 | 
					
						
							|  |  |  | if(sm<4)  uniform 8 float4 0 0 0 0 | 
					
						
							|  |  |  | if(sm>=4) uniform 8 uint4  0 0 0 0 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0) | 
					
						
							|  |  |  | if(sm<4)  uniform 8 float4 1 0 0 0 | 
					
						
							|  |  |  | if(sm>=4) uniform 8 uint4  1 0 0 0 | 
					
						
							|  |  |  | todo(msl) draw quad | 
					
						
							|  |  |  | probe (0, 0) rgba(3.0, 3.0, 3.0, 3.0) | 
					
						
							| 
									
										
										
										
											2025-03-10 16:51:20 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | % OOB indexes are illegal, but sm < 6 allows them in dead code. | 
					
						
							|  |  |  | % We need copy-prop to know if the code is dead. | 
					
						
							|  |  |  | % This means copy-prop needs to be able to handle OOB indexes. | 
					
						
							|  |  |  | [pixel shader fail(sm>=6)] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     static float4 arr[4]; | 
					
						
							|  |  |  |     bool x = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (x) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         arr[100] = 0; | 
					
						
							|  |  |  |         return arr[100]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-03-11 14:51:38 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | [pixel shader todo(sm<4)] | 
					
						
							|  |  |  | float a; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float arr[2][2] = {1, 2, 3, 4}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (a > 0) | 
					
						
							|  |  |  |         arr[1][1] = 5; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return float4(arr[0][0], arr[0][1], arr[1][0], arr[1][1]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float 11.0 | 
					
						
							|  |  |  | todo(sm<4) draw quad | 
					
						
							| 
									
										
										
										
											2025-03-11 14:26:27 -03:00
										 |  |  | probe (0, 0) rgba(1, 2, 3, 5) | 
					
						
							| 
									
										
										
										
											2025-03-18 16:59:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [require] | 
					
						
							|  |  |  | shader model < 5.1 | 
					
						
							|  |  |  | options: backcompat | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | sampler s; | 
					
						
							|  |  |  | Texture2D t1, t2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Texture2D t = t1; | 
					
						
							|  |  |  |     t1 = t2; | 
					
						
							|  |  |  |     t2 = t; | 
					
						
							|  |  |  |     return t1.Sample(s, float2(0, 0)) + t2.Sample(s, float2(0, 0)); | 
					
						
							|  |  |  | } |