#include <metal_stdlib>

using namespace metal;

template<typename T, int N, int M>
inline auto 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 auto operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
  return vec<T, M>(lhs) * rhs;
}

struct S {
  /* 0x0000 */ float3x2 tint_symbol;
  /* 0x0018 */ int8_t tint_pad[8];
  /* 0x0020 */ packed_float3 vector;
  /* 0x002c */ int8_t tint_pad_1[4];
};

fragment void tint_symbol_1(const constant S* tint_symbol_2 [[buffer(0)]]) {
  float2 const x = ((*(tint_symbol_2)).tint_symbol * (*(tint_symbol_2)).vector);
  return;
}

