cbuffer cbuffer_x_15 : register(b0, space0) {
  uint4 x_15[1];
};
static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
  const float x_85 = a.x;
  const float x_87 = b.y;
  const float x_90 = b.x;
  const float x_92 = a.y;
  return ((x_85 * x_87) - (x_90 * x_92));
}

int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
  float var_y = 0.0f;
  float x_96 = 0.0f;
  float x_97 = 0.0f;
  float clamp_y = 0.0f;
  float pab = 0.0f;
  float2 param = float2(0.0f, 0.0f);
  float2 param_1 = float2(0.0f, 0.0f);
  float pbc = 0.0f;
  float2 param_2 = float2(0.0f, 0.0f);
  float2 param_3 = float2(0.0f, 0.0f);
  float pca = 0.0f;
  float2 param_4 = float2(0.0f, 0.0f);
  float2 param_5 = float2(0.0f, 0.0f);
  bool x_173 = false;
  bool x_205 = false;
  bool x_174_phi = false;
  bool x_206_phi = false;
  const float x_99 = asfloat(x_15[0].x);
  const float x_101 = asfloat(x_15[0].y);
  if ((x_99 == x_101)) {
    const float x_107 = c.y;
    const float2 x_108 = float2(0.0f, x_107);
    if (true) {
      const float x_112 = c.y;
      x_97 = x_112;
    } else {
      x_97 = 1.0f;
    }
    const float x_113 = x_97;
    const float x_114 = c.y;
    const float2 x_116 = float2(1.0f, max(x_113, x_114));
    const float2 x_117 = float2(x_108.x, x_108.y);
    x_96 = x_107;
  } else {
    x_96 = -1.0f;
  }
  var_y = x_96;
  const float x_120 = c.y;
  const float x_121 = c.y;
  clamp_y = clamp(x_120, x_121, var_y);
  const float x_125 = p.x;
  const float x_127 = a_1.x;
  const float x_130 = p.y;
  const float x_132 = a_1.y;
  const float x_136 = b_1.x;
  const float x_137 = a_1.x;
  const float x_140 = b_1.y;
  const float x_141 = a_1.y;
  param = float2((x_125 - x_127), (x_130 - x_132));
  param_1 = float2((x_136 - x_137), (x_140 - x_141));
  const float x_144 = cross2d_vf2_vf2_(param, param_1);
  pab = x_144;
  const float x_145 = p.x;
  const float x_146 = b_1.x;
  const float x_148 = p.y;
  const float x_149 = b_1.y;
  const float x_153 = c.x;
  const float x_154 = b_1.x;
  const float x_156 = clamp_y;
  const float x_157 = b_1.y;
  param_2 = float2((x_145 - x_146), (x_148 - x_149));
  param_3 = float2((x_153 - x_154), (x_156 - x_157));
  const float x_160 = cross2d_vf2_vf2_(param_2, param_3);
  pbc = x_160;
  const bool x_165 = ((pab < 0.0f) & (pbc < 0.0f));
  x_174_phi = x_165;
  if (!(x_165)) {
    x_173 = ((pab >= 0.0f) & (pbc >= 0.0f));
    x_174_phi = x_173;
  }
  if (!(x_174_phi)) {
    return 0;
  }
  const float x_178 = p.x;
  const float x_179 = c.x;
  const float x_181 = p.y;
  const float x_182 = c.y;
  const float x_185 = a_1.x;
  const float x_186 = c.x;
  const float x_188 = a_1.y;
  const float x_189 = c.y;
  param_4 = float2((x_178 - x_179), (x_181 - x_182));
  param_5 = float2((x_185 - x_186), (x_188 - x_189));
  const float x_192 = cross2d_vf2_vf2_(param_4, param_5);
  pca = x_192;
  const bool x_197 = ((pab < 0.0f) & (pca < 0.0f));
  x_206_phi = x_197;
  if (!(x_197)) {
    x_205 = ((pab >= 0.0f) & (pca >= 0.0f));
    x_206_phi = x_205;
  }
  if (!(x_206_phi)) {
    return 0;
  }
  return 1;
}

void main_1() {
  float2 pos = float2(0.0f, 0.0f);
  float2 param_6 = float2(0.0f, 0.0f);
  float2 param_7 = float2(0.0f, 0.0f);
  float2 param_8 = float2(0.0f, 0.0f);
  float2 param_9 = float2(0.0f, 0.0f);
  const float4 x_72 = gl_FragCoord;
  const float2 x_75 = asfloat(x_15[0].xy);
  pos = (float2(x_72.x, x_72.y) / x_75);
  param_6 = pos;
  param_7 = float2(0.699999988f, 0.300000012f);
  param_8 = float2(0.5f, 0.899999976f);
  param_9 = float2(0.100000001f, 0.400000006f);
  const int x_78 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
  if ((x_78 == 1)) {
    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 gl_FragCoord_param : SV_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  const main_out tint_symbol_3 = {x_GLF_color};
  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.x_GLF_color_1};
  return tint_symbol_6;
}
