#include <metal_stdlib>

using namespace metal;

template<typename T, int N, int M>
inline vec<T, M> operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
  return lhs * vec<T, N>(rhs);
}

template<typename T, int N, int M>
inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
  return vec<T, M>(lhs) * rhs;
}

struct Simulation {
  /* 0x0000 */ uint i;
};
struct tint_array_wrapper {
  /* 0x0000 */ float3 arr[8];
};
struct Particle {
  /* 0x0000 */ tint_array_wrapper position;
  /* 0x0080 */ float lifetime;
  /* 0x0084 */ int8_t tint_pad[12];
  /* 0x0090 */ float4 color;
  /* 0x00a0 */ packed_float3 velocity;
  /* 0x00ac */ int8_t tint_pad_1[4];
};
struct Particles {
  /* 0x0000 */ Particle p[1];
};

kernel void tint_symbol(const device Particles* tint_symbol_1 [[buffer(1)]], const constant Simulation* tint_symbol_2 [[buffer(0)]]) {
  Particle particle = (*(tint_symbol_1)).p[0];
  particle.position.arr[(*(tint_symbol_2)).i] = particle.position.arr[(*(tint_symbol_2)).i];
  return;
}

