#include <metal_stdlib>

using namespace metal;
uint pack4x8unorm_95c456() {
  float4 arg_0 = float4(1.0f);
  uint res = pack_float_to_unorm4x8(arg_0);
  return res;
}

fragment void fragment_main(device uint* tint_symbol_1 [[buffer(0)]]) {
  *(tint_symbol_1) = pack4x8unorm_95c456();
  return;
}

kernel void compute_main(device uint* tint_symbol_2 [[buffer(0)]]) {
  *(tint_symbol_2) = pack4x8unorm_95c456();
  return;
}

struct VertexOutput {
  float4 pos;
  uint prevent_dce;
};

struct tint_symbol {
  uint prevent_dce [[user(locn0)]] [[flat]];
  float4 pos [[position]];
};

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

vertex tint_symbol vertex_main() {
  VertexOutput const inner_result = vertex_main_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.pos = inner_result.pos;
  wrapper_result.prevent_dce = inner_result.prevent_dce;
  return wrapper_result;
}

