1#pragma clang diagnostic ignored "-Wmissing-prototypes" 2 3#include <metal_stdlib> 4#include <simd/simd.h> 5 6using namespace metal; 7 8struct SSBO 9{ 10 float4 in_data[1]; 11}; 12 13struct SSBO2 14{ 15 float4 out_data[1]; 16}; 17 18constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(1u); 19 20// Implementation of the GLSL mod() function, which is slightly different than Metal fmod() 21template<typename Tx, typename Ty> 22inline Tx mod(Tx x, Ty y) 23{ 24 return x - y * floor(x / y); 25} 26 27kernel void main0(const device SSBO& _23 [[buffer(0)]], device SSBO2& _33 [[buffer(1)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]]) 28{ 29 _33.out_data[gl_GlobalInvocationID.x] = mod(_23.in_data[gl_GlobalInvocationID.x], _33.out_data[gl_GlobalInvocationID.x]); 30 _33.out_data[gl_GlobalInvocationID.x] = as_type<float4>(as_type<uint4>(_23.in_data[gl_GlobalInvocationID.x]) % as_type<uint4>(_33.out_data[gl_GlobalInvocationID.x])); 31 _33.out_data[gl_GlobalInvocationID.x] = as_type<float4>(as_type<int4>(_23.in_data[gl_GlobalInvocationID.x]) % as_type<int4>(_33.out_data[gl_GlobalInvocationID.x])); 32} 33 34