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

void radians_44a9f8() {
  float2 res = float2(0.01745329238474369049f);
}

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

void radians_44a9f8() {
  float2 res = float2(0.01745329238474369049f);
}

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

struct VertexOutput {
  float4 pos;
};

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

void radians_44a9f8() {
  float2 res = float2(0.01745329238474369049f);
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  radians_44a9f8();
  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;
}
