blob: 7556b80978936ce13e8de1446994627c78bb24fe [file] [log] [blame]
#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;
}