| #pragma clang diagnostic ignored "-Wunused-variable" |
| |
| #include <metal_stdlib> |
| #include <simd/simd.h> |
| #include <metal_atomic> |
| |
| using namespace metal; |
| |
| struct DataBuf |
| { |
| uint data[1]; |
| }; |
| |
| struct Result |
| { |
| uint r0; |
| uint r1; |
| uint r2; |
| uint r3; |
| }; |
| |
| struct OutBuf |
| { |
| Result r[1]; |
| }; |
| |
| constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(256u, 1u, 1u); |
| |
| kernel void main0(device DataBuf& data_buf [[buffer(0)]], device OutBuf& out_buf [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) |
| { |
| uint ix = gl_GlobalInvocationID.x; |
| uint role_0_ix = (ix * 661u) & 65535u; |
| uint role_1_ix = (ix * 1087u) & 65535u; |
| uint role_2_ix = (ix * 2749u) & 65535u; |
| uint role_3_ix = (ix * 3433u) & 65535u; |
| atomic_store_explicit((device atomic_uint*)&data_buf.data[role_0_ix], 1u, memory_order_relaxed); |
| uint _52 = atomic_load_explicit((device atomic_uint*)&data_buf.data[role_1_ix], memory_order_relaxed); |
| uint r0 = _52; |
| uint _56 = atomic_load_explicit((device atomic_uint*)&data_buf.data[role_1_ix], memory_order_relaxed); |
| uint r1 = _56; |
| atomic_store_explicit((device atomic_uint*)&data_buf.data[role_2_ix], 2u, memory_order_relaxed); |
| uint _63 = atomic_load_explicit((device atomic_uint*)&data_buf.data[role_3_ix], memory_order_relaxed); |
| uint r2 = _63; |
| uint _67 = atomic_load_explicit((device atomic_uint*)&data_buf.data[role_3_ix], memory_order_relaxed); |
| uint r3 = _67; |
| out_buf.r[role_1_ix].r0 = r0; |
| out_buf.r[role_1_ix].r1 = r1; |
| out_buf.r[role_3_ix].r2 = r2; |
| out_buf.r[role_3_ix].r3 = r3; |
| } |
| |