• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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