//
// fragment_main
//
#include <metal_stdlib>
using namespace metal;

void asin_a5dd88() {
  float2 res = float2(0.5f);
}

fragment void fragment_main() {
  asin_a5dd88();
}
//
// compute_main
//
#include <metal_stdlib>
using namespace metal;

void asin_a5dd88() {
  float2 res = float2(0.5f);
}

kernel void compute_main() {
  asin_a5dd88();
}
//
// vertex_main
//
#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

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

void asin_a5dd88() {
  float2 res = float2(0.5f);
}

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

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