SKIP: FAILED

#version 310 es
precision mediump float;

layout(location = 0) out vec4 x_GLF_color_1_1;
struct buf0 {
  vec2 resolution;
};

vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
layout(binding = 0) uniform buf0_1 {
  vec2 resolution;
} x_24;

vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
float cross2d_vf2_vf2_(inout vec2 a, inout vec2 b) {
  float x_76 = a.x;
  float x_78 = b.y;
  float x_81 = b.x;
  float x_83 = a.y;
  return ((x_76 * x_78) - (x_81 * x_83));
}

int pointInTriangle_vf2_vf2_vf2_vf2_(inout vec2 p, inout vec2 a_1, inout vec2 b_1, inout vec2 c) {
  float pab = 0.0f;
  vec2 param = vec2(0.0f, 0.0f);
  vec2 param_1 = vec2(0.0f, 0.0f);
  float pbc = 0.0f;
  vec2 param_2 = vec2(0.0f, 0.0f);
  vec2 param_3 = vec2(0.0f, 0.0f);
  float pca = 0.0f;
  vec2 param_4 = vec2(0.0f, 0.0f);
  vec2 param_5 = vec2(0.0f, 0.0f);
  bool x_145 = false;
  bool x_185 = false;
  bool x_146_phi = false;
  bool x_186_phi = false;
  float x_88 = p.x;
  float x_90 = a_1.x;
  float x_93 = p.y;
  float x_95 = a_1.y;
  float x_99 = b_1.x;
  float x_101 = a_1.x;
  float x_104 = b_1.y;
  float x_106 = a_1.y;
  param = vec2((x_88 - x_90), (x_93 - x_95));
  param_1 = vec2((x_99 - x_101), (x_104 - x_106));
  float x_109 = cross2d_vf2_vf2_(param, param_1);
  pab = x_109;
  float x_111 = p.x;
  float x_113 = b_1.x;
  float x_116 = p.y;
  float x_118 = b_1.y;
  float x_122 = c.x;
  float x_124 = b_1.x;
  float x_127 = c.y;
  float x_129 = b_1.y;
  param_2 = vec2((x_111 - x_113), (x_116 - x_118));
  param_3 = vec2((x_122 - x_124), (x_127 - x_129));
  float x_132 = cross2d_vf2_vf2_(param_2, param_3);
  pbc = x_132;
  bool x_137 = ((pab < 0.0f) & (pbc < 0.0f));
  x_146_phi = x_137;
  if (!(x_137)) {
    x_145 = ((pab >= 0.0f) & (pbc >= 0.0f));
    x_146_phi = x_145;
  }
  if (!(x_146_phi)) {
    return 0;
  }
  float x_151 = p.x;
  float x_153 = c.x;
  float x_156 = p.y;
  float x_158 = c.y;
  float x_162 = a_1.x;
  float x_164 = c.x;
  float x_167 = a_1.y;
  float x_169 = c.y;
  param_4 = vec2((x_151 - x_153), (x_156 - x_158));
  param_5 = vec2((x_162 - x_164), (x_167 - x_169));
  float x_172 = cross2d_vf2_vf2_(param_4, param_5);
  pca = x_172;
  bool x_177 = ((pab < 0.0f) & (pca < 0.0f));
  x_186_phi = x_177;
  if (!(x_177)) {
    x_185 = ((pab >= 0.0f) & (pca >= 0.0f));
    x_186_phi = x_185;
  }
  if (!(x_186_phi)) {
    return 0;
  }
  return 1;
}

void main_1() {
  vec2 pos = vec2(0.0f, 0.0f);
  vec2 param_6 = vec2(0.0f, 0.0f);
  vec2 param_7 = vec2(0.0f, 0.0f);
  vec2 param_8 = vec2(0.0f, 0.0f);
  vec2 param_9 = vec2(0.0f, 0.0f);
  vec4 x_63 = tint_symbol;
  vec2 x_66 = x_24.resolution;
  pos = (vec2(x_63.x, x_63.y) / x_66);
  param_6 = pos;
  param_7 = vec2(0.699999988f, 0.300000012f);
  param_8 = vec2(0.5f, 0.899999976f);
  param_9 = vec2(0.100000001f, 0.400000006f);
  int x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
  if ((x_69 == 1)) {
    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 1.0f);
  }
  return;
}

struct main_out {
  vec4 x_GLF_color_1;
};

main_out tint_symbol_1(vec4 tint_symbol_2) {
  tint_symbol = tint_symbol_2;
  main_1();
  main_out tint_symbol_3 = main_out(x_GLF_color);
  return tint_symbol_3;
}

void main() {
  main_out inner_result = tint_symbol_1(gl_FragCoord);
  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
  return;
}
Error parsing GLSL shader:
ERROR: 0:61: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp bool' and a right operand of type ' temp bool' (or there is no acceptable conversion)
ERROR: 0:61: '' : compilation terminated 
ERROR: 2 compilation errors.  No code generated.



