#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  const device half3x3* in;
  device half3x3* out;
};

void tint_store_and_preserve_padding(device half3x3* const target, half3x3 value_param) {
  (*target)[0u] = value_param[0u];
  (*target)[1u] = value_param[1u];
  (*target)[2u] = value_param[2u];
}

kernel void tint_symbol(const device half3x3* in [[buffer(1)]], device half3x3* out [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.in=in, .out=out};
  tint_store_and_preserve_padding(tint_module_vars.out, (*tint_module_vars.in));
}
