#version 310 es
#extension GL_OES_sample_variables : require
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 0) flat in int loc0_1;
layout(location = 1) flat in uint loc1_1;
layout(location = 3) in vec4 loc3_1;
layout(location = 5) in f16vec3 loc5_1;
layout(location = 2) in float loc2_1;
layout(location = 4) in float16_t loc4_1;
struct FragmentInputs0 {
  vec4 position;
  int loc0;
};

struct FragmentInputs1 {
  vec4 loc3;
  f16vec3 loc5;
  uint sample_mask;
};

void tint_symbol(FragmentInputs0 inputs0, bool front_facing, uint loc1, uint sample_index, FragmentInputs1 inputs1, float loc2, float16_t loc4) {
  if (front_facing) {
    vec4 foo = inputs0.position;
    uint bar = (sample_index + inputs1.sample_mask);
    int i = inputs0.loc0;
    uint u = loc1;
    float f = loc2;
    vec4 v = inputs1.loc3;
    float16_t x = loc4;
    f16vec3 y = inputs1.loc5;
  }
}

void main() {
  FragmentInputs0 tint_symbol_1 = FragmentInputs0(gl_FragCoord, loc0_1);
  FragmentInputs1 tint_symbol_2 = FragmentInputs1(loc3_1, loc5_1, uint(gl_SampleMaskIn[0]));
  tint_symbol(tint_symbol_1, gl_FrontFacing, loc1_1, uint(gl_SampleID), tint_symbol_2, loc2_1, loc4_1);
  return;
}
