#include <metal_stdlib>
using namespace metal;
struct tint_module_vars_struct {
  device half3x2* prevent_dce;
};
struct vertex_main_outputs {
  float4 tint_symbol [[position]];
};

void transpose_d6faec(tint_module_vars_struct tint_module_vars) {
  half2x3 arg_0 = half2x3(half3(1.0h), half3(1.0h));
  half3x2 res = transpose(arg_0);
  (*tint_module_vars.prevent_dce) = res;
}
float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
  transpose_d6faec(tint_module_vars);
  return float4(0.0f);
}
fragment void fragment_main(device half3x2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  transpose_d6faec(tint_module_vars);
}
kernel void compute_main(device half3x2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  transpose_d6faec(tint_module_vars);
}
vertex vertex_main_outputs vertex_main(device half3x2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
}
