#pragma clang diagnostic ignored "-Wmissing-prototypes" #pragma clang diagnostic ignored "-Wmissing-braces" #include #include using namespace metal; template struct spvUnsafeArray { T elements[Num ? Num : 1]; thread T& operator [] (size_t pos) thread { return elements[pos]; } constexpr const thread T& operator [] (size_t pos) const thread { return elements[pos]; } device T& operator [] (size_t pos) device { return elements[pos]; } constexpr const device T& operator [] (size_t pos) const device { return elements[pos]; } constexpr const constant T& operator [] (size_t pos) const constant { return elements[pos]; } threadgroup T& operator [] (size_t pos) threadgroup { return elements[pos]; } constexpr const threadgroup T& operator [] (size_t pos) const threadgroup { return elements[pos]; } }; struct SSBO { uint size; spvUnsafeArray v; }; struct SSBO1 { spvUnsafeArray bz; }; struct SSBO2 { uint size2; spvUnsafeArray w; }; struct SSBO3 { spvUnsafeArray bz; }; struct spvDescriptorSetBuffer0 { device SSBO* v_16 [[id(0)]]; constant uint* spvBufferSizeConstants [[id(1)]]; }; struct spvDescriptorSetBuffer1 { spvUnsafeArray ssbos [[id(0)]]; constant uint* spvBufferSizeConstants [[id(2)]]; }; static inline __attribute__((always_inline)) uint get_size(device SSBO& v_16, constant uint& v_16BufferSize, constant spvUnsafeArray (&ssbos), constant uint* ssbosBufferSize, device SSBO2& v_38, constant uint& v_38BufferSize, thread spvUnsafeArray (&ssbos2), constant uint* ssbos2BufferSize) { uint len = uint(int((v_16BufferSize - 16) / 16)); len += uint(int((ssbosBufferSize[1] - 0) / 4)); len += uint(int((v_38BufferSize - 16) / 16)); len += uint(int((ssbos2BufferSize[0] - 0) / 4)); return len; } kernel void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant uint* spvBufferSizeConstants [[buffer(5)]], device SSBO2& v_38 [[buffer(2)]], device SSBO3* ssbos2_0 [[buffer(3)]], device SSBO3* ssbos2_1 [[buffer(4)]]) { spvUnsafeArray ssbos2 = { ssbos2_0, ssbos2_1, }; constant uint& spvDescriptorSet0_v_16BufferSize = spvDescriptorSet0.spvBufferSizeConstants[0]; constant uint* spvDescriptorSet1_ssbosBufferSize = &spvDescriptorSet1.spvBufferSizeConstants[0]; constant uint& v_38BufferSize = spvBufferSizeConstants[6]; constant uint* ssbos2BufferSize = &spvBufferSizeConstants[7]; (*spvDescriptorSet0.v_16).size = get_size((*spvDescriptorSet0.v_16), spvDescriptorSet0_v_16BufferSize, spvDescriptorSet1.ssbos, spvDescriptorSet1_ssbosBufferSize, v_38, v_38BufferSize, ssbos2, ssbos2BufferSize); }