#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void faceForward_fe522b() {
  float3 res = float3(-1.0f);
}

fragment void fragment_main() {
  faceForward_fe522b();
}

kernel void compute_main() {
  faceForward_fe522b();
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  faceForward_fe522b();
  return out;
}

vertex vertex_main_outputs vertex_main() {
  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
}
