| 
									
										
										
										
											2023-04-16 19:38:58 +02:00
										 |  |  | % Uppercase register set names | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer Constants : register(B1) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | Texture2D tex : register(T1); | 
					
						
							|  |  |  | float4 foo : register(C0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return foo; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 2.0 3.0 4.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-04-16 19:38:58 +02:00
										 |  |  | probe all rgba (1.0, 2.0, 3.0, 4.0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-31 18:13:26 -03:00
										 |  |  | [pixel shader] | 
					
						
							|  |  |  | // Test empty constant buffer. | 
					
						
							|  |  |  | cbuffer Constants : register(b1) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 foo; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return foo; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 2.0 3.0 4.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2022-10-31 18:13:26 -03:00
										 |  |  | probe all rgba (1.0, 2.0, 3.0, 4.0) | 
					
						
							| 
									
										
										
										
											2023-02-21 20:16:23 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | % SM1 buffer offset allocation follows different rules than SM4. | 
					
						
							|  |  |  | % Those would have to be tested separately. | 
					
						
							|  |  |  | [require] | 
					
						
							|  |  |  | shader model >= 4.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c1invalid_extra_chars); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 20:16:23 -03:00
										 |  |  | % Respect register boundaries | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 a; | 
					
						
							|  |  |  |     float2 b; | 
					
						
							|  |  |  |     float2 c; | 
					
						
							|  |  |  |     float3 d; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return float4(a.x, b.x, c.x, d.x); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 0.0 1.0 2.0 3.0 | 
					
						
							|  |  |  | uniform 4 float4 4.0 5.0 6.0 7.0 | 
					
						
							|  |  |  | uniform 8 float4 8.0 9.0 10.0 11.0 | 
					
						
							|  |  |  | uniform 12 float4 12.0 13.0 14.0 15.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 20:16:23 -03:00
										 |  |  | probe all rgba (0.0, 2.0, 4.0, 8.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float a; | 
					
						
							|  |  |  |     float b[2]; | 
					
						
							|  |  |  |     float c; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return float4(a, b[0], b[1], c); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 0.0 1.0 2.0 3.0 | 
					
						
							|  |  |  | uniform 4 float4 4.0 5.0 6.0 7.0 | 
					
						
							|  |  |  | uniform 8 float4 8.0 9.0 10.0 11.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 20:16:23 -03:00
										 |  |  | probe all rgba (0.0, 4.0, 8.0, 9.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float a; | 
					
						
							|  |  |  |     struct | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         float b; | 
					
						
							|  |  |  |         float c; | 
					
						
							|  |  |  |     } p; | 
					
						
							|  |  |  |     float d; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return float4(a, p.b, p.c, d); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 0.0 1.0 2.0 3.0 | 
					
						
							|  |  |  | uniform 4 float4 4.0 5.0 6.0 7.0 | 
					
						
							|  |  |  | uniform 8 float4 8.0 9.0 10.0 11.0 | 
					
						
							|  |  |  | uniform 12 float4 12.0 13.0 14.0 15.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 20:16:23 -03:00
										 |  |  | probe all rgba (0.0, 4.0, 5.0, 6.0) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Elements cannot overlap if buffer is used. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float c : packoffset(c0); | 
					
						
							|  |  |  |     float4 a[2] : packoffset(c1); | 
					
						
							|  |  |  |     float4 b[2] : packoffset(c2); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  |     return float4(c, a[1].x, b[0].x, b[1].x); | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 0.0 0.0 0.0 | 
					
						
							|  |  |  | uniform 4 float4 2.0 0.0 0.0 0.0 | 
					
						
							|  |  |  | uniform 8 float4 3.0 0.0 0.0 0.0 | 
					
						
							|  |  |  | uniform 12 float4 4.0 0.0 0.0 0.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | todo(sm<6) draw quad | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | probe all rgba (1.0, 3.0, 3.0, 4.0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Elements can overlap if buffer is not used. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a[2] : packoffset(c1); | 
					
						
							|  |  |  |     float4 b[2] : packoffset(c2); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c1); | 
					
						
							| 
									
										
										
										
											2023-04-16 19:43:14 +02:00
										 |  |  |     float4 b : packoffset(C2); | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 100 * a + b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 2.0 3.0 4.0 | 
					
						
							|  |  |  | uniform 4 float4 5.0 6.0 7.0 8.0 | 
					
						
							|  |  |  | uniform 8 float4 9.0 10.0 11.0 12.0 | 
					
						
							| 
									
										
										
										
											2023-10-16 15:41:17 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | probe all rgba (509, 610, 711, 812) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | struct apple | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 a; | 
					
						
							|  |  |  |     float b; | 
					
						
							|  |  |  |     float4 c; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c3); | 
					
						
							|  |  |  |     struct apple bar : packoffset(c1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 1000 * foo + 100 * float4(bar.a, 0, 0) + 10 * float4(bar.b, 0, 0, 0) + bar.c; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 0.0 1.0 2.0 3.0 | 
					
						
							|  |  |  | uniform 4 float4 4.0 5.0 6.0 7.0 | 
					
						
							|  |  |  | uniform 8 float4 8.0 9.0 10.0 11.0 | 
					
						
							|  |  |  | uniform 12 float4 12.0 13.0 14.0 15.0 | 
					
						
							| 
									
										
										
										
											2023-10-16 15:41:17 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | probe all rgba (12468.0, 13509.0, 14010.0, 15011.0) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 c : packoffset(c0.y); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return float4(c, c); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 2.0 3.0 4.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | probe all rgba (2.0, 3.0, 2.0, 3.0) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | [pixel shader fail] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Elements must respect register boundaries. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 c : packoffset(c0.z); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Matrices must be aligned. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float1x1 m : packoffset(c0.y); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Arrays must be aligned. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float a[1] : packoffset(c0.y); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Structs must be aligned. | 
					
						
							|  |  |  | struct apple | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float p; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     struct apple a : packoffset(c0.y); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | [pixel shader fail] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Invalid offset on unused buffer. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float3 a : packoffset(c0.z); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | [pixel shader fail] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // Invalid offset on unused variable. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float a : packoffset(c0); | 
					
						
							|  |  |  |     float3 b : packoffset(c0.z); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c1); | 
					
						
							|  |  |  |     float1 b : packoffset(c0); | 
					
						
							|  |  |  |     float1 c : packoffset(c0.y); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 100 * a + 10 * b + c; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float 1.0 | 
					
						
							|  |  |  | uniform 1 float 2.0 | 
					
						
							|  |  |  | uniform 4 float4 5.0 6.0 7.0 8.0 | 
					
						
							| 
									
										
										
										
											2023-10-16 15:41:17 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | probe all rgba (512.0, 612.0, 712.0, 812.0) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | // packoffset cannot be used unless all elements use it. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c0); | 
					
						
							|  |  |  |     float4 b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a + b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-22 14:53:17 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 c : packoffset(c0.b); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return float4(c, c); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 2.0 3.0 4.0 | 
					
						
							| 
									
										
										
										
											2023-10-11 14:33:27 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-02-21 17:08:39 -03:00
										 |  |  | probe all rgba (3.0, 4.0, 3.0, 4.0) | 
					
						
							| 
									
										
										
										
											2023-02-06 19:17:24 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 c : packoffset(c0.xy); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4x4 mat : packoffset(c0._m00); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c0._m00); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 c : packoffset(c0.xz); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % packoffset cannot be used outside a constant buffer. | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | float4 a : packoffset(c0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | float4 foo(float4 a : packoffset(c0)) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | float4 foo(float4 a) : packoffset(c0) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | struct apple | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a : packoffset(c0); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     struct apple a; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     struct | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         float4 a : packoffset(c0); | 
					
						
							|  |  |  |     } s; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [srv 0] | 
					
						
							|  |  |  | size (2d, 1, 1) | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | 0.0 0.0 0.0 4.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [sampler 0] | 
					
						
							|  |  |  | filter linear linear linear | 
					
						
							|  |  |  | address clamp clamp clamp | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | // Resources are allowed inside constant buffers but they behave as regular resources. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 a; | 
					
						
							|  |  |  |     Texture2D tex; | 
					
						
							|  |  |  |     sampler sam; | 
					
						
							|  |  |  |     float4 b; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a + b + tex.Sample(sam, float2(0, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 1.0 0.0 0.0 0.0 | 
					
						
							|  |  |  | uniform 4 float4 0.0 2.0 0.0 0.0 | 
					
						
							|  |  |  | uniform 8 float4 0.0 0.0 3.0 0.0 | 
					
						
							| 
									
										
										
										
											2024-02-12 16:56:09 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | probe all rgba (1.0, 2.0, 0.0, 4.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % packoffset() cannot be used to specify other types of registers | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sampler sam : packoffset(s0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Texture2D tex : packoffset(t0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [srv 0] | 
					
						
							|  |  |  | size (2d, 1, 1) | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | 1.0 1.0 1.0 1.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [srv 1] | 
					
						
							|  |  |  | size (2d, 1, 1) | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | 2.0 2.0 2.0 2.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | // packoffset() can be used in Textures, doesn't change the allocated t register. | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Texture2D tex : packoffset(c1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return tex.Load(int3(0, 0, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-01-25 13:28:46 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | probe all rgba (1.0, 1.0, 1.0, 1.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Samplers cannot have packoffset(), unless register() is also specified, or they are not used. | 
					
						
							|  |  |  | % Note: In SM1 the rules are different: packoffset() is allowed for samplers, but they cannot be | 
					
						
							|  |  |  | % used together with other numeric fields, which seems like a bug. | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6) todo] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | Texture2D tex; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sampler sam : packoffset(c1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return tex.Sample(sam, float2(0, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader todo] | 
					
						
							|  |  |  | Texture2D tex; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sampler sam : packoffset(c1) : register(s0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return tex.Sample(sam, float2(0, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sampler sam : packoffset(c1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sampler sam : packoffset(c1); | 
					
						
							|  |  |  |     float4 a : packoffset(c0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return a; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % When packoffset is used in one field, resources are also expected to have a reservation. | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c0); | 
					
						
							|  |  |  |     Texture2D tex; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c0); | 
					
						
							|  |  |  |     sampler sam; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % register() can be used instead of packoffset(). | 
					
						
							| 
									
										
										
										
											2023-03-01 15:57:31 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c0); | 
					
						
							| 
									
										
										
										
											2023-04-16 19:38:58 +02:00
										 |  |  |     Texture2D tex : register(T1); | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-01 15:57:31 -03:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c0); | 
					
						
							|  |  |  |     sampler sam : register(s1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Using register() alone is considered manual packing for resources, so the other fields expect packoffset(). | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo; | 
					
						
							|  |  |  |     Texture2D tex : register(t1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo; | 
					
						
							|  |  |  |     sampler sam : register(s1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Using register() alone is not considered manual packing for non-resources. | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : register(c0); | 
					
						
							|  |  |  |     Texture2D tex; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [require] | 
					
						
							|  |  |  | shader model >= 5.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [srv 0] | 
					
						
							|  |  |  | size (2d, 1, 1) | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | 0.0 0.0 0.0 0.5 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-29 19:51:10 -04:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-03-01 14:28:12 -03:00
										 |  |  | struct apple | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float2 a; | 
					
						
							|  |  |  |     Texture2D tex; | 
					
						
							|  |  |  |     float b; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cbuffer buffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float4 foo : packoffset(c3); | 
					
						
							|  |  |  |     struct apple bar : packoffset(c1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 10 * foo + float4(bar.a, 0, 0) + float4(0, 0, bar.b, 0) + bar.tex.Load(int3(0, 0, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 float4 0.0 1.0 2.0 3.0 | 
					
						
							|  |  |  | uniform 4 float4 4.0 5.0 6.0 7.0 | 
					
						
							|  |  |  | uniform 8 float4 8.0 9.0 10.0 11.0 | 
					
						
							|  |  |  | uniform 12 float4 12.0 13.0 14.0 15.0 | 
					
						
							| 
									
										
										
										
											2024-01-25 13:28:46 +10:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2023-05-29 19:51:10 -04:00
										 |  |  | probe all rgba (124.0, 135.0, 146.0, 150.5) |