| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | [require] | 
					
						
							|  |  |  | shader model >= 5.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32-typeless | 
					
						
							| 
									
										
										
										
											2024-05-31 23:46:38 +10:00
										 |  |  | size (raw_buffer, 4) | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 1 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader todo] | 
					
						
							|  |  |  | RWByteAddressBuffer u : register(u1); | 
					
						
							|  |  |  | groupshared uint m; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(32, 1, 1)] | 
					
						
							|  |  |  | void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         m = group_id.x; | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     InterlockedAdd(m, group_id.x); | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         u.Store(4 * group_id.x, m); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-03-01 16:03:47 +10:00
										 |  |  | todo(sm<6) dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | probe uav 1 (0) rui (0) | 
					
						
							|  |  |  | probe uav 1 (1) rui (33) | 
					
						
							|  |  |  | probe uav 1 (2) rui (66) | 
					
						
							|  |  |  | probe uav 1 (3) rui (99) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32-typeless | 
					
						
							| 
									
										
										
										
											2024-05-31 23:46:38 +10:00
										 |  |  | size (raw_buffer, 4) | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 1 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader todo] | 
					
						
							|  |  |  | RWByteAddressBuffer u : register(u1); | 
					
						
							|  |  |  | groupshared int m; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(32, 1, 1)] | 
					
						
							|  |  |  | void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         m = group_id.x; | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     InterlockedAdd(m, -group_id.x); | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         u.Store(4 * group_id.x, m); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-03-01 16:03:47 +10:00
										 |  |  | todo(sm<6) dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | probe uav 1 (0) ri (0) | 
					
						
							|  |  |  | probe uav 1 (1) ri (-31) | 
					
						
							|  |  |  | probe uav 1 (2) ri (-62) | 
					
						
							|  |  |  | probe uav 1 (3) ri (-93) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32-float | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | size (buffer, 8) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1 1 1 1 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 2] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32-sint | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | size (buffer, 8) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1 1 1 1 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader todo] | 
					
						
							|  |  |  | uniform uint idx; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define GROUP_SIZE 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct data | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     float f; | 
					
						
							|  |  |  |     uint u; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RWBuffer<float> u : register(u1); | 
					
						
							|  |  |  | RWBuffer<uint> u2 : register(u2); | 
					
						
							|  |  |  | groupshared data m[GROUP_SIZE]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(GROUP_SIZE, 1, 1)] | 
					
						
							|  |  |  | void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID, | 
					
						
							|  |  |  |         uint thread_id : SV_DispatchThreadID) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint i; | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         for (i = 0; i < GROUP_SIZE; ++i) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             m[i].f = group_id.x; | 
					
						
							|  |  |  |             m[i].u = group_id.x; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     InterlockedAdd(m[0].u, 2); | 
					
						
							|  |  |  |     InterlockedAdd(m[idx].u, 1); | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     for (i = 0; i < local_idx; ++i) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m[local_idx].f += group_id.x; | 
					
						
							|  |  |  |         m[local_idx].u += group_id.x; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     u[thread_id.x] = m[local_idx].f; | 
					
						
							|  |  |  |     u2[thread_id.x] = m[local_idx].u; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 uint 1 | 
					
						
							| 
									
										
										
										
											2024-03-01 13:25:32 +10:00
										 |  |  | todo(sm<6) dispatch 2 1 1 | 
					
						
							| 
									
										
										
										
											2024-03-12 14:45:39 +10:00
										 |  |  | probe uav 1 (0)  r (0.0) | 
					
						
							|  |  |  | probe uav 1 (1)  r (0.0) | 
					
						
							|  |  |  | probe uav 1 (2)  r (0.0) | 
					
						
							|  |  |  | probe uav 1 (3)  r (0.0) | 
					
						
							|  |  |  | probe uav 1 (4)  r (1.0) | 
					
						
							|  |  |  | probe uav 1 (5)  r (2.0) | 
					
						
							|  |  |  | probe uav 1 (6)  r (3.0) | 
					
						
							|  |  |  | probe uav 1 (7)  r (4.0) | 
					
						
							|  |  |  | probe uav 2 (0)  ri (8) | 
					
						
							|  |  |  | probe uav 2 (1)  ri (4) | 
					
						
							|  |  |  | probe uav 2 (2)  ri (0) | 
					
						
							|  |  |  | probe uav 2 (3)  ri (0) | 
					
						
							|  |  |  | probe uav 2 (4)  ri (9) | 
					
						
							|  |  |  | probe uav 2 (5)  ri (6) | 
					
						
							|  |  |  | probe uav 2 (6)  ri (3) | 
					
						
							|  |  |  | probe uav 2 (7)  ri (4) | 
					
						
							| 
									
										
										
										
											2024-04-04 19:13:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							| 
									
										
										
										
											2024-08-01 21:03:46 -04:00
										 |  |  | format r32-typeless | 
					
						
							| 
									
										
										
										
											2024-05-31 23:46:38 +10:00
										 |  |  | size (raw_buffer, 1) | 
					
						
							| 
									
										
										
										
											2024-04-04 19:13:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader todo] | 
					
						
							|  |  |  | RWByteAddressBuffer u : register(u1); | 
					
						
							|  |  |  | groupshared uint m; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(32, 1, 1)] | 
					
						
							|  |  |  | void main(uint local_idx : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint orig; | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         m = 7; | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     InterlockedCompareExchange(m, local_idx, local_idx + 32, orig); | 
					
						
							|  |  |  |     GroupMemoryBarrierWithGroupSync(); | 
					
						
							|  |  |  |     if (!local_idx) | 
					
						
							|  |  |  |         u.Store(0, m); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2023-06-06 19:25:13 +10:00
										 |  |  | todo(sm<6) dispatch 1 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-04 19:13:07 +10:00
										 |  |  | probe uav 1 (0) rui (39) |