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

layout(location = 0) out int value;
int main0() {
  return 1;
}

void main() {
  int inner_result = main0();
  value = inner_result;
  return;
}
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 1) out uint value;
uint main1() {
  return 1u;
}

void main() {
  uint inner_result = main1();
  value = inner_result;
  return;
}
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 2) out float value;
float main2() {
  return 1.0f;
}

void main() {
  float inner_result = main2();
  value = inner_result;
  return;
}
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 3) out vec4 value;
vec4 main3() {
  return vec4(1.0f, 2.0f, 3.0f, 4.0f);
}

void main() {
  vec4 inner_result = main3();
  value = inner_result;
  return;
}
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 4) out float16_t value;
float16_t main4() {
  return 2.25hf;
}

void main() {
  float16_t inner_result = main4();
  value = inner_result;
  return;
}
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
precision mediump float;

layout(location = 5) out f16vec3 value;
f16vec3 main5() {
  return f16vec3(3.0hf, 5.0hf, 8.0hf);
}

void main() {
  f16vec3 inner_result = main5();
  value = inner_result;
  return;
}
