| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | [require] | 
					
						
							|  |  |  | shader model >= 6.0 | 
					
						
							| 
									
										
										
										
											2024-04-24 11:29:17 +10:00
										 |  |  | wave ops | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | [uav 0] | 
					
						
							|  |  |  | format r32 uint | 
					
						
							|  |  |  | size (buffer, 4) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 8 15 8 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [uav 1] | 
					
						
							|  |  |  | format r32 uint | 
					
						
							|  |  |  | size (buffer, 8) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0 0 0 0 0 0 0 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u1 : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveIsFirstLane(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:56:26 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (1) | 
					
						
							|  |  |  | probe uav 1 (1) rui (0) | 
					
						
							|  |  |  | probe uav 1 (2) rui (0) | 
					
						
							|  |  |  | probe uav 1 (3) rui (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u1 : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!id) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         u1[0] = 0; | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     u1[id] = WaveIsFirstLane(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:56:26 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (0) | 
					
						
							|  |  |  | probe uav 1 (1) rui (1) | 
					
						
							|  |  |  | probe uav 1 (2) rui (0) | 
					
						
							|  |  |  | probe uav 1 (3) rui (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u1 : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveGetLaneIndex(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-18 10:59:08 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (0) | 
					
						
							|  |  |  | probe uav 1 (1) rui (1) | 
					
						
							|  |  |  | probe uav 1 (2) rui (2) | 
					
						
							|  |  |  | probe uav 1 (3) rui (3) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u1 : register(u1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // Between 4 and 128, and includes inactive and/or helper lanes. | 
					
						
							|  |  |  |     uint count = WaveGetLaneCount(); | 
					
						
							|  |  |  |     u1[id] = count >= 4 && count <= 128; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:52 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (1) | 
					
						
							|  |  |  | probe uav 1 (1) rui (1) | 
					
						
							|  |  |  | probe uav 1 (2) rui (1) | 
					
						
							|  |  |  | probe uav 1 (3) rui (1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint i = (id & 1) ? -u0[id] : u0[id]; | 
					
						
							|  |  |  |     u1[id] = WaveActiveMin(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:35:27 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (8) | 
					
						
							|  |  |  | probe uav 1 (1) rui (8) | 
					
						
							|  |  |  | probe uav 1 (2) rui (8) | 
					
						
							|  |  |  | probe uav 1 (3) rui (8) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     bool b = u0[id] == 8; | 
					
						
							|  |  |  |     u1[id] = WaveActiveBallot(b).x; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:00:56 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (5) | 
					
						
							|  |  |  | probe uav 1 (1) rui (5) | 
					
						
							|  |  |  | probe uav 1 (2) rui (5) | 
					
						
							|  |  |  | probe uav 1 (3) rui (5) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint i = u0[id] + u0[id ^ 1]; | 
					
						
							|  |  |  |     u1[id] = WaveReadLaneFirst(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | todo dispatch 4 1 1 | 
					
						
							|  |  |  | probe uav 1 (0) rui (23) | 
					
						
							|  |  |  | probe uav 1 (1) rui (23) | 
					
						
							|  |  |  | probe uav 1 (2) rui (23) | 
					
						
							|  |  |  | probe uav 1 (3) rui (23) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint i = u0[id] + u0[id ^ 1]; | 
					
						
							|  |  |  |     u1[id] = WaveReadLaneAt(i, 3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-05-09 12:25:44 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (18) | 
					
						
							|  |  |  | probe uav 1 (1) rui (18) | 
					
						
							|  |  |  | probe uav 1 (2) rui (18) | 
					
						
							|  |  |  | probe uav 1 (3) rui (18) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-09 12:22:03 +10:00
										 |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint i = u0[id] + u0[id ^ 1]; | 
					
						
							|  |  |  |     // Non-uniform lane index | 
					
						
							|  |  |  |     u1[id] = WaveReadLaneAt(i, (id + 2) & 3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-05-09 12:25:44 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-05-09 12:22:03 +10:00
										 |  |  | probe uav 1 (0) rui (18) | 
					
						
							|  |  |  | probe uav 1 (1) rui (18) | 
					
						
							|  |  |  | probe uav 1 (2) rui (23) | 
					
						
							|  |  |  | probe uav 1 (3) rui (23) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     bool b = u0[id] == 8; | 
					
						
							|  |  |  |     u1[id] = WaveActiveCountBits(b); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:52:12 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (2) | 
					
						
							|  |  |  | probe uav 1 (1) rui (2) | 
					
						
							|  |  |  | probe uav 1 (2) rui (2) | 
					
						
							|  |  |  | probe uav 1 (3) rui (2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     bool b = u0[id] == 8; | 
					
						
							|  |  |  |     u1[id] = WavePrefixCountBits(b); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 22:03:14 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (0) | 
					
						
							|  |  |  | probe uav 1 (1) rui (1) | 
					
						
							|  |  |  | probe uav 1 (2) rui (1) | 
					
						
							|  |  |  | probe uav 1 (3) rui (2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveActiveSum(u0[id]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:35:27 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (41) | 
					
						
							|  |  |  | probe uav 1 (1) rui (41) | 
					
						
							|  |  |  | probe uav 1 (2) rui (41) | 
					
						
							|  |  |  | probe uav 1 (3) rui (41) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveActiveBitAnd(u0[id]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:14:22 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (8) | 
					
						
							|  |  |  | probe uav 1 (1) rui (8) | 
					
						
							|  |  |  | probe uav 1 (2) rui (8) | 
					
						
							|  |  |  | probe uav 1 (3) rui (8) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveActiveBitOr(u0[id]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:14:22 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (15) | 
					
						
							|  |  |  | probe uav 1 (1) rui (15) | 
					
						
							|  |  |  | probe uav 1 (2) rui (15) | 
					
						
							|  |  |  | probe uav 1 (3) rui (15) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     u1[id] = WaveActiveBitXor(u0[id]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							| 
									
										
										
										
											2024-04-23 21:14:22 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (5) | 
					
						
							|  |  |  | probe uav 1 (1) rui (5) | 
					
						
							|  |  |  | probe uav 1 (2) rui (5) | 
					
						
							|  |  |  | probe uav 1 (3) rui (5) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [compute shader] | 
					
						
							|  |  |  | uniform uint2 u; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RWBuffer<uint> u0; | 
					
						
							|  |  |  | RWBuffer<uint> u1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [numthreads(4, 1, 1)] | 
					
						
							|  |  |  | void main(uint id : SV_GroupIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     uint table[] = {u.x, u.y}; | 
					
						
							|  |  |  |     uint i; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Value depends on control flow. | 
					
						
							|  |  |  |     if (id & 1) | 
					
						
							|  |  |  |         i = table[id / 2u]; | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         i = u0[id / 2u]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     u1[id] = WaveActiveSum(i); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [test] | 
					
						
							|  |  |  | uniform 0 uint4 1 5 0 0 | 
					
						
							| 
									
										
										
										
											2024-04-23 21:35:27 +10:00
										 |  |  | dispatch 4 1 1 | 
					
						
							| 
									
										
										
										
											2024-04-16 14:30:12 +10:00
										 |  |  | probe uav 1 (0) rui (29) | 
					
						
							|  |  |  | probe uav 1 (1) rui (29) | 
					
						
							|  |  |  | probe uav 1 (2) rui (29) | 
					
						
							|  |  |  | probe uav 1 (3) rui (29) |