| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | [require] | 
					
						
							|  |  |  | shader model >= 5.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-10 10:01:05 +02:00
										 |  |  | % UAVs are implicitly allocated starting from the highest render target slot. | 
					
						
							|  |  |  | % They cannot overlap render target slots, and also cannot be allocated any | 
					
						
							|  |  |  | % lower than the highest render target. | 
					
						
							|  |  |  | % This ceases to be true with shader model 5.1. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [rtv 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32g32b32a32-float | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | size (2d, 640, 480) | 
					
						
							| 
									
										
										
										
											2023-05-10 10:01:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | [pixel shader] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float3 a; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RWBuffer<float4> u : register(u2); | 
					
						
							|  |  |  | RWBuffer<float> u1; | 
					
						
							|  |  |  | RWBuffer<float2x2> u2; | 
					
						
							|  |  |  | RWBuffer<struct s> u3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = float4(11.1, 12.2, 13.3, 14.4); | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-12 12:32:02 -05:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-10-13 16:35:12 -05:00
										 |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float3 a; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RasterizerOrderedBuffer<float4> u : register(u2); | 
					
						
							|  |  |  | RasterizerOrderedBuffer<float> u1; | 
					
						
							|  |  |  | RasterizerOrderedBuffer<float2x2> u2; | 
					
						
							|  |  |  | RasterizerOrderedBuffer<struct s> u3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = float4(11.1, 12.2, 13.3, 14.4); | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | % Type size is too wide | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float3 a; | 
					
						
							|  |  |  |     float2 b; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | RWBuffer<struct s> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6) todo] | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | RWBuffer<double3> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | RWBuffer<double2> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-13 16:35:12 -05:00
										 |  |  | [pixel shader fail] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float3 a; | 
					
						
							|  |  |  |     float2 b; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | RasterizerOrderedBuffer<struct s> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-12 12:32:02 -05:00
										 |  |  | [pixel shader fail(sm<6) todo] | 
					
						
							| 
									
										
										
										
											2023-10-13 16:35:12 -05:00
										 |  |  | RasterizerOrderedBuffer<double3> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-12 12:32:02 -05:00
										 |  |  | [pixel shader] | 
					
						
							| 
									
										
										
										
											2023-10-13 16:35:12 -05:00
										 |  |  | RasterizerOrderedBuffer<double2> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | % Array type | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | typedef float arr[2]; | 
					
						
							|  |  |  | RWBuffer<arr> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Object types | 
					
						
							| 
									
										
										
										
											2023-09-14 19:29:24 +10:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							| 
									
										
										
										
											2023-05-04 01:25:24 +02:00
										 |  |  | RWBuffer<Texture2D> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Texture2D t; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | RWBuffer<struct s> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-05-10 10:01:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-13 16:35:12 -05:00
										 |  |  | [pixel shader fail(sm<6)] | 
					
						
							|  |  |  | typedef float arr[2]; | 
					
						
							|  |  |  | RasterizerOrderedBuffer<arr> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Object types | 
					
						
							|  |  |  | [pixel shader fail(sm<6)] | 
					
						
							|  |  |  | RasterizerOrderedBuffer<Texture2D> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader fail] | 
					
						
							|  |  |  | struct s | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Texture2D t; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | RasterizerOrderedBuffer<struct s> u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-01 19:13:31 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [require] | 
					
						
							|  |  |  | shader model >= 5.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-01 16:02:58 +10:00
										 |  |  | [uav 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32g32b32a32-sint | 
					
						
							| 
									
										
										
										
											2024-02-01 16:02:58 +10:00
										 |  |  | size (buffer, 2) | 
					
						
							|  |  |  | 1 2 3 4 5 6 7 8 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | RWBuffer<int4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = int4(11, -12, 13, -14); | 
					
						
							|  |  |  |     u[1] = int4(-15, 16, -17, 18); | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2025-05-28 22:52:18 +02:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2025-06-05 23:48:18 +02:00
										 |  |  | probe uav 1 (0) i32(11, -12, 13, -14) | 
					
						
							|  |  |  | probe uav 1 (1) i32(-15, 16, -17, 18) | 
					
						
							| 
									
										
										
										
											2024-02-01 16:02:58 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | [uav 2] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32g32b32a32-float | 
					
						
							| 
									
										
										
										
											2024-01-24 16:11:17 -03:00
										 |  |  | size (buffer, 1) | 
					
						
							| 
									
										
										
										
											2023-05-10 10:01:05 +02:00
										 |  |  | 0.1 0.2 0.3 0.4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | RWBuffer<float4> u : register(u2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float4 main() : sv_target1 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = float4(11.1, 12.2, 13.3, 14.4); | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2025-05-28 22:52:18 +02:00
										 |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2025-06-06 01:02:45 +02:00
										 |  |  | probe uav 2 (0) f32(11.1, 12.2, 13.3, 14.4) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [require] | 
					
						
							|  |  |  | shader model >= 6.2 | 
					
						
							|  |  |  | native-16-bit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32g32b32a32-float | 
					
						
							|  |  |  | size (buffer, 1) | 
					
						
							|  |  |  | 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform half4 h; | 
					
						
							|  |  |  | RWBuffer<float4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(1, 1, 1)] | 
					
						
							|  |  |  | void main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = h; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 uint4 0x4a204990 0x4b404ab0 0 0 | 
					
						
							|  |  |  | dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2025-06-06 01:02:45 +02:00
										 |  |  | probe uav 1 (0) f32(11.125, 12.25, 13.375, 14.5) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform half4 h; | 
					
						
							|  |  |  | RWBuffer<half4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(1, 1, 1)] | 
					
						
							|  |  |  | void main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = h; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 uint4 0x4a204990 0x4b404ab0 0 0 | 
					
						
							|  |  |  | dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2025-06-06 01:02:45 +02:00
										 |  |  | probe uav 1 (0) f32(11.125, 12.25, 13.375, 14.5) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform half h; | 
					
						
							|  |  |  | RWBuffer<half> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(1, 1, 1)] | 
					
						
							|  |  |  | void main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = h; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 uint 0x4990 | 
					
						
							|  |  |  | dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2025-06-06 01:02:45 +02:00
										 |  |  | probe uav 1 (0) f32(11.125) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32g32b32a32-uint | 
					
						
							|  |  |  | size (buffer, 1) | 
					
						
							|  |  |  | 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform uint16_t4 h; | 
					
						
							|  |  |  | RWBuffer<uint16_t4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(1, 1, 1)] | 
					
						
							|  |  |  | void main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = h; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2025-04-11 13:12:27 +02:00
										 |  |  | % Even if everything is defined as unsigned, implementations differ: WARP and | 
					
						
							|  |  |  | % NVIDIA zero-extend, while AMD sign-extends; therefore we test neither. | 
					
						
							|  |  |  | uniform 0 uint4 0x7ff4000b 0xe7ff3 0 0 | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2025-06-06 00:25:11 +02:00
										 |  |  | probe uav 1 (0) u32(0xb, 0x7ff4, 0x7ff3, 0xe) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32g32b32a32-sint | 
					
						
							|  |  |  | size (buffer, 1) | 
					
						
							|  |  |  | 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform int16_t4 h; | 
					
						
							|  |  |  | RWBuffer<int16_t4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(1, 1, 1)] | 
					
						
							|  |  |  | void main() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u[0] = h; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2025-04-11 13:12:27 +02:00
										 |  |  | % Again, implementations behave inconsistently for negative numbers. | 
					
						
							|  |  |  | uniform 0 uint4 0x7ff4000b 0xe7ff3 0 0 | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2025-06-05 23:48:18 +02:00
										 |  |  | probe uav 1 (0) i32(11, 0x7ff4, 0x7ff3, 14) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32g32b32a32-sint | 
					
						
							|  |  |  | size (buffer, 1) | 
					
						
							| 
									
										
										
										
											2025-04-11 13:12:27 +02:00
										 |  |  | -100 -1 1 100 | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | RWBuffer<int16_t4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return u[0]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2025-06-05 23:48:18 +02:00
										 |  |  | probe (0, 0) i32(-100, -1, 1, 100) | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32g32b32a32-uint | 
					
						
							|  |  |  | size (buffer, 1) | 
					
						
							| 
									
										
										
										
											2025-04-11 13:12:27 +02:00
										 |  |  | 0 1 10 100 | 
					
						
							| 
									
										
										
										
											2025-02-04 13:22:48 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [pixel shader] | 
					
						
							|  |  |  | RWBuffer<uint16_t4> u : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint4 main() : sv_target | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return u[0]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | draw quad | 
					
						
							| 
									
										
										
										
											2025-06-06 00:25:11 +02:00
										 |  |  | probe (0, 0) u32(0, 1, 10, 100) |