glslang testing: Remove dependence on testfiles from LunarGLASS.


git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@31512 e7fa87d3-cd2b-0410-9028-fcbf551c1848
diff --git a/Test/Operations.frag b/Test/Operations.frag
new file mode 100644
index 0000000..820048f
--- /dev/null
+++ b/Test/Operations.frag
@@ -0,0 +1,166 @@
+#version 130

+

+uniform ivec4 uiv4;

+uniform vec4 uv4;

+uniform bool ub;

+uniform bvec4 ub41, ub42;

+uniform float uf;

+uniform int ui;

+

+#ifdef TEST_POST_110

+uniform uvec4 uuv4;

+uniform unsigned int uui;

+#endif

+

+void main()

+{

+    vec4 v;

+	float f;

+	bool b;

+	bvec4 bv4;

+	int i;

+#ifdef TEST_POST_110

+	uint u;

+#endif

+

+	// floating point

+    v = radians(uv4);

+    v += degrees(v);

+    v += (i = ui*ui, sin(v));

+    v += cos(v);

+    v += tan(v);

+    v += asin(v);

+    v += acos(v);

+

+    v += atan(v);

+    v += sinh(v);

+    v += cosh(v);

+    v += tanh(v);

+    v += asinh(v);

+    v += acosh(v);

+    v += atanh(v);

+

+    v += pow(v, v);

+    v += exp(v);

+    v += log(v);

+    v += exp2(v);

+    v += log2(v);

+    v += sqrt(v);

+    v += inversesqrt(v);

+    v += abs(v);

+    v += sign(v);

+    v += floor(v);

+

+#ifdef TEST_POST_110

+    v += trunc(v);

+    v += round(v);

+    v += roundEven(v);

+#endif

+

+    v += ceil(v);

+    v += fract(v);

+    v += mod(v, v);

+	v += mod(v, v.x);

+

+#ifdef TEST_POST_110

+    v += modf(v, v);

+#endif

+

+    v += min(v, uv4);

+    v += max(v, uv4);

+    v += clamp(v, uv4, uv4);

+    v += mix(v,v,v);

+

+#ifdef TEST_POST_110

+    v += mix(v,v,ub);

+    v += intBitsToFloat(v);

+    v += uintBitsToFloat(v);

+    v += fma(v);

+    v += frexp(v);

+    v += ldexp(v);

+    v += unpackUnorm2x16(v);

+    v += unpackUnorm4x8(v);

+    v += unpackSnorm4x8(v);

+#endif

+

+    v += step(v,v);

+    v += smoothstep(v,v,v);

+    v += step(uf,v);

+    v += smoothstep(uf,uf,v);

+    v += normalize(v);

+    v += faceforward(v, v, v);

+    v += reflect(v, v);

+    v += refract(v, v, uf);

+    v += dFdx(v);

+    v += dFdy(v);

+    v += fwidth(v);

+	//noise*(v);

+

+#ifdef TEST_POST_110

+	// signed integer

+	i += abs(ui);

+	i += sign(i);

+	i += min(i, ui);

+	i += max(i, ui);

+	i += clamp(i, ui, ui);

+

+	floatsBitsToInt(v);

+	packUnorm2x16(v);

+	packUnorm4x8(v);

+	packSnorm4x8(v);

+

+	// unsigned integer

+    u = abs(uui);

+    u += sign(u);

+    u += min(u, uui);

+    u += max(u, uui);

+    u += clamp(u, uui, uui);

+    u += floatsBitToInt(v);

+    u += packUnorm2x16(v);

+    u += packUnorm4x8(v);

+    u += packSnorm4x8(v);

+    u += floatBitsToUInt(v);

+#endif

+

+	// bool

+#ifdef TEST_POST_110

+	b = isnan(uf);

+    b = isinf(v);

+#endif

+	b = any(lessThan(v, uv4));

+	b = (b && any(lessThanEqual(v, uv4)));

+    b = (b && any(greaterThan(v, uv4)));

+    b = (b && any(greaterThanEqual(v, uv4)));

+    b = (b && any(equal(ub41, ub42)));

+    b = (b && any(notEqual(ub41, ub42)));

+    b = (b && any(ub41));

+    b = (b && all(ub41));

+    b = (b && any(not(ub41)));

+	

+	i = ((i + ui) * i - ui) / i;

+	i = i % ui;

+	if (i == ui || i != ui && i == ui ^^ i != 2)

+	    ++i;

+	

+	f = ((uf + uf) * uf - uf) / uf;

+

+	f += length(v);

+    f += distance(v, v);

+    f += dot(v, v);

+    f += dot(f, uf);

+	f += cross(v.xyz, v.xyz).x;

+

+	if (f == uf || f != uf && f != 2.0)

+	    ++f;

+

+    i &= ui;

+    i |= 0x42;

+    i ^= ui;

+    i %= 17;

+    i >>= 2;

+    i <<= ui;

+    i = ~i;

+    b = !b;

+

+    gl_FragColor = b ? vec4(i) + vec4(f) + v : v;

+}

diff --git a/Test/aggOps.frag b/Test/aggOps.frag
new file mode 100644
index 0000000..a0450dc
--- /dev/null
+++ b/Test/aggOps.frag
@@ -0,0 +1,51 @@
+#version 130

+

+uniform sampler2D sampler;

+varying mediump vec2 coord;

+

+varying vec4 u, w;

+

+struct s1 {

+    int i;

+    float f;

+};

+

+struct s2 {

+    int i;

+    float f;

+	s1 s1_1;

+};

+

+uniform s1 foo1;

+uniform s2 foo2a;

+uniform s2 foo2b;

+

+void main()

+{

+    vec4 v;

+    s1 a[3], b[3];

+    a = s1[3](s1(int(u.x), u.y), s1(int(u.z), u.w), s1(14, 14.0));

+    b = s1[3](s1(17, 17.0), s1(int(w.x), w.y), s1(int(w.z), w.w));

+

+    if (foo2a == foo2b)

+        v = texture2D(sampler, coord);

+    else

+        v = texture2D(sampler, 2.0*coord);

+

+    if (u == v)

+        v *= 3.0;

+

+    if (u != v)

+        v *= 4.0;

+

+    if (coord == v.yw)

+        v *= 5.0;

+

+    if (a == b)

+        v *= 6.0;

+

+    if (a != b)

+        v *= 7.0;

+

+	gl_FragColor =  v;

+}

diff --git a/Test/always-discard.frag b/Test/always-discard.frag
new file mode 100644
index 0000000..cea4cee
--- /dev/null
+++ b/Test/always-discard.frag
@@ -0,0 +1,36 @@
+#version 110

+varying vec2 tex_coord;

+

+void main (void)

+{

+    vec4 white = vec4(1.0);

+    vec4 black = vec4(0.2);

+    vec4 color = white;

+

+    // First, cut out our circle

+    float x = tex_coord.x*2.0 - 1.0;

+    float y = tex_coord.y*2.0 - 1.0;

+

+    float radius = sqrt(x*x + y*y);

+    if (radius > 1.0) {

+        if (radius > 1.1) {

+            ++color;

+        }

+

+        gl_FragColor = color;

+

+        if (radius > 1.2) {

+            ++color;

+        }

+

+    }

+

+    discard;

+

+    // If we're near an edge, darken us a tiny bit

+    if (radius >= 0.75)

+        color -= abs(pow(radius, 16.0)/2.0);

+

+    gl_FragColor = color;

+

+}

diff --git a/Test/always-discard2.frag b/Test/always-discard2.frag
new file mode 100644
index 0000000..a619369
--- /dev/null
+++ b/Test/always-discard2.frag
@@ -0,0 +1,19 @@
+#version 110

+varying vec2 tex_coord;

+

+void main (void)

+{

+    vec4 white = vec4(1.0);

+    vec4 black = vec4(0.2);

+    vec4 color = white;

+

+    // First, cut out our circle

+    float x = tex_coord.x*2.0 - 1.0;

+    float y = tex_coord.y*2.0 - 1.0;

+

+    discard;

+

+

+    gl_FragColor = color;

+

+}

diff --git a/Test/baseResults/Operations.frag.out b/Test/baseResults/Operations.frag.out
index 008fdaa..c0a4d2d 100644
--- a/Test/baseResults/Operations.frag.out
+++ b/Test/baseResults/Operations.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/Operations.frag

+Operations.frag

 

 Shader version: 130

 0:? Sequence

diff --git a/Test/baseResults/aggOps.frag.out b/Test/baseResults/aggOps.frag.out
index 9faf8be..85916b6 100644
--- a/Test/baseResults/aggOps.frag.out
+++ b/Test/baseResults/aggOps.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/aggOps.frag

+aggOps.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 WARNING: 0:6: varying deprecated in version 130; may be removed in future release

 

diff --git a/Test/baseResults/always-discard.frag.out b/Test/baseResults/always-discard.frag.out
index dbb95ca..efd5d55 100644
--- a/Test/baseResults/always-discard.frag.out
+++ b/Test/baseResults/always-discard.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/always-discard.frag

+always-discard.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/always-discard2.frag.out b/Test/baseResults/always-discard2.frag.out
index fc1b4cf..27992c1 100644
--- a/Test/baseResults/always-discard2.frag.out
+++ b/Test/baseResults/always-discard2.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/always-discard2.frag

+always-discard2.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/conditionalDiscard.frag.out b/Test/baseResults/conditionalDiscard.frag.out
index 80ea0e4..902093d 100644
--- a/Test/baseResults/conditionalDiscard.frag.out
+++ b/Test/baseResults/conditionalDiscard.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/conditionalDiscard.frag

+conditionalDiscard.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/conversion.frag.out b/Test/baseResults/conversion.frag.out
index a400a75..2455083 100644
--- a/Test/baseResults/conversion.frag.out
+++ b/Test/baseResults/conversion.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/conversion.frag

+conversion.frag

 

 Shader version: 130

 0:? Sequence

diff --git a/Test/baseResults/dataOut.frag.out b/Test/baseResults/dataOut.frag.out
index 105b844..669a13d 100644
--- a/Test/baseResults/dataOut.frag.out
+++ b/Test/baseResults/dataOut.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/dataOut.frag

+dataOut.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/dataOutIndirect.frag.out b/Test/baseResults/dataOutIndirect.frag.out
index ac20659..41c9221 100644
--- a/Test/baseResults/dataOutIndirect.frag.out
+++ b/Test/baseResults/dataOutIndirect.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/dataOutIndirect.frag

+dataOutIndirect.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/deepRvalue.frag.out b/Test/baseResults/deepRvalue.frag.out
index 92d6b62..6640f25 100644
--- a/Test/baseResults/deepRvalue.frag.out
+++ b/Test/baseResults/deepRvalue.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/deepRvalue.frag

+deepRvalue.frag

 

 Shader version: 120

 0:? Sequence

diff --git a/Test/baseResults/depthOut.frag.out b/Test/baseResults/depthOut.frag.out
index ee01a9f..635ae6f 100644
--- a/Test/baseResults/depthOut.frag.out
+++ b/Test/baseResults/depthOut.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/depthOut.frag

+depthOut.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 

diff --git a/Test/baseResults/discard-dce.frag.out b/Test/baseResults/discard-dce.frag.out
index 034233d..c7d09a4 100644
--- a/Test/baseResults/discard-dce.frag.out
+++ b/Test/baseResults/discard-dce.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/discard-dce.frag

+discard-dce.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/doWhileLoop.frag.out b/Test/baseResults/doWhileLoop.frag.out
index 010f050..e89441a 100644
--- a/Test/baseResults/doWhileLoop.frag.out
+++ b/Test/baseResults/doWhileLoop.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/doWhileLoop.frag

+doWhileLoop.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/earlyReturnDiscard.frag.out b/Test/baseResults/earlyReturnDiscard.frag.out
index 8516ae5..f3b63cd 100644
--- a/Test/baseResults/earlyReturnDiscard.frag.out
+++ b/Test/baseResults/earlyReturnDiscard.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/earlyReturnDiscard.frag

+earlyReturnDiscard.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/flowControl.frag.out b/Test/baseResults/flowControl.frag.out
index fb90d4b..91fa850 100644
--- a/Test/baseResults/flowControl.frag.out
+++ b/Test/baseResults/flowControl.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/flowControl.frag

+flowControl.frag

 

 Shader version: 120

 0:? Sequence

diff --git a/Test/baseResults/forLoop.frag.out b/Test/baseResults/forLoop.frag.out
index 4100a2e..52d96ae 100644
--- a/Test/baseResults/forLoop.frag.out
+++ b/Test/baseResults/forLoop.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/forLoop.frag

+forLoop.frag

 

 Shader version: 130

 0:? Sequence

diff --git a/Test/baseResults/functionCall.frag.out b/Test/baseResults/functionCall.frag.out
index 70a1d6d..3996503 100644
--- a/Test/baseResults/functionCall.frag.out
+++ b/Test/baseResults/functionCall.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/functionCall.frag

+functionCall.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/functionSemantics.frag.out b/Test/baseResults/functionSemantics.frag.out
index 967d918..7117352 100644
--- a/Test/baseResults/functionSemantics.frag.out
+++ b/Test/baseResults/functionSemantics.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/functionSemantics.frag

+functionSemantics.frag

 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.

 

 Shader version: 400

diff --git a/Test/baseResults/length.frag.out b/Test/baseResults/length.frag.out
index 1820367..5f2182b 100644
--- a/Test/baseResults/length.frag.out
+++ b/Test/baseResults/length.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/length.frag

+length.frag

 

 Shader version: 120

 0:? Sequence

diff --git a/Test/baseResults/localAggregates.frag.out b/Test/baseResults/localAggregates.frag.out
index 7f2fd8d..538087a 100644
--- a/Test/baseResults/localAggregates.frag.out
+++ b/Test/baseResults/localAggregates.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/localAggregates.frag

+localAggregates.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 WARNING: 0:5: varying deprecated in version 130; may be removed in future release

 

diff --git a/Test/baseResults/loops.frag.out b/Test/baseResults/loops.frag.out
index 5a37384..36e8e5a 100644
--- a/Test/baseResults/loops.frag.out
+++ b/Test/baseResults/loops.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/loops.frag

+loops.frag

 WARNING: 0:14: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/loopsArtificial.frag.out b/Test/baseResults/loopsArtificial.frag.out
index cbe7e15..b5cb844 100644
--- a/Test/baseResults/loopsArtificial.frag.out
+++ b/Test/baseResults/loopsArtificial.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/loopsArtificial.frag

+loopsArtificial.frag

 WARNING: 0:14: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/matrix.frag.out b/Test/baseResults/matrix.frag.out
index 03a8513..9f20b85 100644
--- a/Test/baseResults/matrix.frag.out
+++ b/Test/baseResults/matrix.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/matrix.frag

+matrix.frag

 WARNING: 0:6: varying deprecated in version 130; may be removed in future release

 WARNING: 0:17: varying deprecated in version 130; may be removed in future release

 WARNING: 0:22: varying deprecated in version 130; may be removed in future release

diff --git a/Test/baseResults/matrix2.frag.out b/Test/baseResults/matrix2.frag.out
index 734b5b1..d5b6d7d 100644
--- a/Test/baseResults/matrix2.frag.out
+++ b/Test/baseResults/matrix2.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/matrix2.frag

+matrix2.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 WARNING: 0:13: varying deprecated in version 130; may be removed in future release

 WARNING: 0:15: varying deprecated in version 130; may be removed in future release

diff --git a/Test/baseResults/newTexture.frag.out b/Test/baseResults/newTexture.frag.out
index 7ce20f7..68094b3 100644
--- a/Test/baseResults/newTexture.frag.out
+++ b/Test/baseResults/newTexture.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/newTexture.frag

+newTexture.frag

 Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.

 

 Shader version: 430

diff --git a/Test/baseResults/prepost.frag.out b/Test/baseResults/prepost.frag.out
index 5af8dbb..581210c 100644
--- a/Test/baseResults/prepost.frag.out
+++ b/Test/baseResults/prepost.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/prepost.frag

+prepost.frag

 

 Shader version: 140

 0:? Sequence

diff --git a/Test/baseResults/simpleFunctionCall.frag.out b/Test/baseResults/simpleFunctionCall.frag.out
index de58dd4..cb55c55 100644
--- a/Test/baseResults/simpleFunctionCall.frag.out
+++ b/Test/baseResults/simpleFunctionCall.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/simpleFunctionCall.frag

+simpleFunctionCall.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 

 Shader version: 150

diff --git a/Test/baseResults/spv.140.vert.out b/Test/baseResults/spv.140.vert.out
index 35470dd..4e035e7 100644
--- a/Test/baseResults/spv.140.vert.out
+++ b/Test/baseResults/spv.140.vert.out
@@ -17,6 +17,7 @@
 (Each option must be specified separately, but can go anywhere in the command line.)

   -V  create SPIR-V in file <stage>.spv

   -H  print human readable form of SPIR-V; turns on -V

+  -E  print pre-processed glsl. Cannot be used with -V, -H or -l.

   -c  configuration dump; use to create default configuration file (redirect to a .conf file)

   -d  default to desktop (#version 110) when there is no version in the shader (default is ES version 100)

   -i  intermediate tree (glslang AST) is printed out

diff --git a/Test/baseResults/structAssignment.frag.out b/Test/baseResults/structAssignment.frag.out
index e29ffc6..5371c93 100644
--- a/Test/baseResults/structAssignment.frag.out
+++ b/Test/baseResults/structAssignment.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/structAssignment.frag

+structAssignment.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/structDeref.frag.out b/Test/baseResults/structDeref.frag.out
index a06a460..11109be 100644
--- a/Test/baseResults/structDeref.frag.out
+++ b/Test/baseResults/structDeref.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/structDeref.frag

+structDeref.frag

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/structure.frag.out b/Test/baseResults/structure.frag.out
index c97f31d..b37932d 100644
--- a/Test/baseResults/structure.frag.out
+++ b/Test/baseResults/structure.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/structure.frag

+structure.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/swizzle.frag.out b/Test/baseResults/swizzle.frag.out
index 551a14b..d706c6c 100644
--- a/Test/baseResults/swizzle.frag.out
+++ b/Test/baseResults/swizzle.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/swizzle.frag

+swizzle.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/syntaxError.frag.out b/Test/baseResults/syntaxError.frag.out
index 8648f27..2d9bc6a 100644
--- a/Test/baseResults/syntaxError.frag.out
+++ b/Test/baseResults/syntaxError.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/syntaxError.frag

+syntaxError.frag

 ERROR: 0:9: 'vec5' : undeclared identifier 

 ERROR: 0:9: '' :  syntax error

 ERROR: 2 compilation errors.  No code generated.

diff --git a/Test/baseResults/test.frag.out b/Test/baseResults/test.frag.out
index 43c6d7d..4fd96c2 100644
--- a/Test/baseResults/test.frag.out
+++ b/Test/baseResults/test.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/test.frag

+test.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/baseResults/texture.frag.out b/Test/baseResults/texture.frag.out
index 2ecae96..6e40f36 100644
--- a/Test/baseResults/texture.frag.out
+++ b/Test/baseResults/texture.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/texture.frag

+texture.frag

 WARNING: 0:14: varying deprecated in version 130; may be removed in future release

 WARNING: 0:15: varying deprecated in version 130; may be removed in future release

 

diff --git a/Test/baseResults/types.frag.out b/Test/baseResults/types.frag.out
index 9b53199..fb52b1a 100644
--- a/Test/baseResults/types.frag.out
+++ b/Test/baseResults/types.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/types.frag

+types.frag

 

 Shader version: 130

 0:? Sequence

diff --git a/Test/baseResults/uniformArray.frag.out b/Test/baseResults/uniformArray.frag.out
index 7f6796b..6c70af8 100644
--- a/Test/baseResults/uniformArray.frag.out
+++ b/Test/baseResults/uniformArray.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/uniformArray.frag

+uniformArray.frag

 

 Shader version: 130

 0:? Sequence

diff --git a/Test/baseResults/variableArrayIndex.frag.out b/Test/baseResults/variableArrayIndex.frag.out
index a7d1058..cf7cc2b 100644
--- a/Test/baseResults/variableArrayIndex.frag.out
+++ b/Test/baseResults/variableArrayIndex.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/variableArrayIndex.frag

+variableArrayIndex.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 

 Shader version: 130

diff --git a/Test/baseResults/varyingArray.frag.out b/Test/baseResults/varyingArray.frag.out
index 1ca2daa..f537e26 100644
--- a/Test/baseResults/varyingArray.frag.out
+++ b/Test/baseResults/varyingArray.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/varyingArray.frag

+varyingArray.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 WARNING: 0:6: varying deprecated in version 130; may be removed in future release

diff --git a/Test/baseResults/varyingArrayIndirect.frag.out b/Test/baseResults/varyingArrayIndirect.frag.out
index 7a79ab8..52a48a6 100644
--- a/Test/baseResults/varyingArrayIndirect.frag.out
+++ b/Test/baseResults/varyingArrayIndirect.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/varyingArrayIndirect.frag

+varyingArrayIndirect.frag

 WARNING: 0:3: varying deprecated in version 130; may be removed in future release

 WARNING: 0:4: varying deprecated in version 130; may be removed in future release

 WARNING: 0:6: varying deprecated in version 130; may be removed in future release

diff --git a/Test/baseResults/voidFunction.frag.out b/Test/baseResults/voidFunction.frag.out
index 065287e..342119d 100644
--- a/Test/baseResults/voidFunction.frag.out
+++ b/Test/baseResults/voidFunction.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/voidFunction.frag

+voidFunction.frag

 

 Shader version: 120

 0:? Sequence

diff --git a/Test/baseResults/whileLoop.frag.out b/Test/baseResults/whileLoop.frag.out
index 6d0700a..5147bff 100644
--- a/Test/baseResults/whileLoop.frag.out
+++ b/Test/baseResults/whileLoop.frag.out
@@ -1,4 +1,4 @@
-../../LunarGLASS/test/whileLoop.frag

+whileLoop.frag

 

 Shader version: 110

 0:? Sequence

diff --git a/Test/conditionalDiscard.frag b/Test/conditionalDiscard.frag
new file mode 100644
index 0000000..58e6fa5
--- /dev/null
+++ b/Test/conditionalDiscard.frag
@@ -0,0 +1,14 @@
+#version 110

+

+uniform sampler2D tex;

+varying vec2 coord;

+

+void main (void)

+{

+    vec4 v = texture2D(tex, coord);

+

+    if (v == vec4(0.1,0.2,0.3,0.4))

+        discard;

+

+    gl_FragColor = v;

+}

diff --git a/Test/conversion.frag b/Test/conversion.frag
new file mode 100644
index 0000000..f17293b
--- /dev/null
+++ b/Test/conversion.frag
@@ -0,0 +1,112 @@
+#version 130

+

+uniform bool  u_b;

+uniform bvec2 u_b2;

+uniform bvec3 u_b3;

+uniform bvec4 u_b4;

+

+uniform int   u_i;

+uniform ivec2 u_i2;

+uniform ivec3 u_i3;

+uniform ivec4 u_i4;

+ 

+uniform float u_f;

+uniform vec2 u_f2;

+uniform vec3 u_f3;

+uniform vec4 u_f4;

+

+uniform bool  i_b;

+uniform bvec2 i_b2;

+uniform bvec3 i_b3;

+uniform bvec4 i_b4;

+

+flat in int   i_i;

+flat in ivec2 i_i2;

+flat in ivec3 i_i3;

+flat in ivec4 i_i4;

+

+in float i_f;

+in vec2 i_f2;

+in vec3 i_f3;

+in vec4 i_f4;

+

+void main()

+{

+    bool   b = bool(u_i) ^^ bool(u_f);

+    bvec2 b2 = bvec2(u_i, u_f);

+    bvec3 b3 = bvec3(u_i, u_f, i_i);

+    bvec4 b4 = bvec4(u_i, u_f, i_i, i_f);

+

+    int    i = int(u_f)    + int(b);

+    ivec2 i2 = ivec2(u_f2) + ivec2(b2);

+    ivec3 i3 = ivec3(u_f3) + ivec3(b3);

+    ivec4 i4 = ivec4(u_f4) + ivec4(b4);

+

+    float f = i;

+    vec2 f2 = i2;

+    vec3 f3 = i3;

+    vec4 f4 = i4;

+

+    f  += (float(i) + float(b));

+    f2 -= vec2(i2) + vec2(b2);

+    f3 /= vec3(i3) + vec3(b3);

+    f4 += vec4(i4) + vec4(b4);

+

+    f4 += vec4(bvec4(i_i4));

+    f4 += vec4(bvec4(u_f4));

+    

+    f  += f                 - i;

+    f2 += vec2(f, i)       + i2;

+    f3 += i3 + vec3(f, i, f);

+    f4 += vec4(b, i, f, i) + i4;

+    

+    f2 += vec2(f, i)       * i;

+    f3 += vec3(f, i, f)    + i;

+    f4 += i - vec4(b, i, f, i);

+

+    i2 += ivec2(f, i);

+    i3 += ivec3(f, i, f);

+    i4 += ivec4(b, i, f, i);

+

+    if (f < i || i < f ||

+        f2 == i2 ||

+        i3 != f3)

+        f = (b ? i : f2.x) + (b2.x ? f3.x : i2.y);

+

+    gl_FragColor = 

+        b || 

+        b2.x ||

+        b2.y ||

+        b3.x ||

+        b3.y ||

+        b3.z ||

+        b4.x ||

+        b4.y ||

+        b4.z ||

+        b4.w ? vec4(

+        i  +

+        i2.x +

+        i2.y +

+        i3.x +

+        i3.y +

+        i3.z +

+        i4.x +

+        i4.y +

+        i4.z +

+        i4.w +

+        f  +

+        f2.x +

+        f2.y +

+        f3.x +

+        f3.y +

+        f3.z +

+        f4.x +

+        f4.y +

+        f4.z +

+        f4.w) : vec4(1.0);

+

+    // with constants...

+    ivec4 cv2 = ivec4(1.0);

+    bvec4 cv5 = bvec4(cv2);

+    gl_FragColor += float(cv5);

+}

diff --git a/Test/dataOut.frag b/Test/dataOut.frag
new file mode 100644
index 0000000..258f534
--- /dev/null
+++ b/Test/dataOut.frag
@@ -0,0 +1,8 @@
+#version 130 

+

+varying vec4 Color;

+

+void main()

+{

+    gl_FragData[1] = Color;

+}

diff --git a/Test/dataOutIndirect.frag b/Test/dataOutIndirect.frag
new file mode 100644
index 0000000..d6b8667
--- /dev/null
+++ b/Test/dataOutIndirect.frag
@@ -0,0 +1,10 @@
+#version 130 

+

+varying vec4 Color;

+

+uniform int i;

+

+void main()

+{

+    gl_FragData[i] = Color;

+}

diff --git a/Test/deepRvalue.frag b/Test/deepRvalue.frag
new file mode 100644
index 0000000..4d88086
--- /dev/null
+++ b/Test/deepRvalue.frag
@@ -0,0 +1,36 @@
+#version 120

+

+uniform sampler2D sampler;

+

+vec4 v1 = vec4(2.0, 3.0, 5.0, 7.0);

+vec4 v2 = vec4(11.0, 13.0, 17.0, 19.0);

+vec4 v3 = vec4(23.0, 29.0, 31.0, 37.0);

+vec4 v4 = vec4(41.0, 43.0, 47.0, 53.0);

+

+struct str {

+    int a;

+    vec2 b[3];

+    bool c;

+};

+

+void main()

+{

+    mat4 m = mat4(v1, v2, v3, v4);

+

+    mat4 mm  = matrixCompMult(m, m);

+    float f = mm[1].w; // should be 19 * 19 = 361

+

+    // do a deep access to a spontaneous r-value

+    float g = matrixCompMult(m, m)[2].y;  // should be 29 * 29 = 841

+

+    float h = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true).b[1][1];  // should be 5.0

+

+    float i = texture2D(sampler, vec2(0.5,0.5)).y;

+

+    i += (i > 0.1 ? v1 : v2)[3];

+

+    str t;

+    i += (t = str(1, vec2[3](vec2(2.0, 3.0), vec2(4.0, 5.0), vec2(6.0, 7.0)), true)).b[2].y;  // should be 7.0

+

+    gl_FragColor = vec4(f, g, h, i);

+}

diff --git a/Test/depthOut.frag b/Test/depthOut.frag
new file mode 100644
index 0000000..5a89271
--- /dev/null
+++ b/Test/depthOut.frag
@@ -0,0 +1,10 @@
+#version 130

+

+varying vec4 Color;

+varying float Depth;

+

+void main()

+{

+    gl_FragDepth = Depth;

+    gl_FragColor = Color;

+}

diff --git a/Test/discard-dce.frag b/Test/discard-dce.frag
new file mode 100644
index 0000000..f2fef4d
--- /dev/null
+++ b/Test/discard-dce.frag
@@ -0,0 +1,35 @@
+#version 110

+varying vec2 tex_coord;

+

+void main (void)

+{

+    vec4 white = vec4(1.0);

+    vec4 black = vec4(0.2);

+    vec4 color = white;

+

+    // First, cut out our circle

+    float x = tex_coord.x*2.0 - 1.0;

+    float y = tex_coord.y*2.0 - 1.0;

+

+    float radius = sqrt(x*x + y*y);

+    if (radius > 1.0) {

+        if (radius > 1.1) {

+            ++color;

+        }

+

+        gl_FragColor = color;

+

+        if (radius > 1.2) {

+            ++color;

+        }

+

+        discard;

+    }

+

+    // If we're near an edge, darken us a tiny bit

+    if (radius >= 0.75)

+        color -= abs(pow(radius, 16.0)/2.0);

+

+    gl_FragColor = color;

+

+}

diff --git a/Test/doWhileLoop.frag b/Test/doWhileLoop.frag
new file mode 100644
index 0000000..3d6f93c
--- /dev/null
+++ b/Test/doWhileLoop.frag
@@ -0,0 +1,16 @@
+#version 110

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+void main()

+{

+    vec4 color = BaseColor;

+

+    do {

+        color += bigColor;

+    } while (color.x < d);

+

+    gl_FragColor = color;

+}

diff --git a/Test/earlyReturnDiscard.frag b/Test/earlyReturnDiscard.frag
new file mode 100644
index 0000000..718ea72
--- /dev/null
+++ b/Test/earlyReturnDiscard.frag
@@ -0,0 +1,102 @@
+#version 110

+

+uniform float d;

+uniform vec4 bigColor, smallColor;

+uniform vec4 otherColor;

+

+varying float c;

+

+uniform float threshhold;

+uniform float threshhold2;

+uniform float threshhold3;

+

+uniform float minimum;

+

+varying vec4 BaseColor;

+

+uniform bool b;

+

+void main()

+{

+    vec4 color = BaseColor;

+    vec4 color2;

+

+    color2 = otherColor;

+

+    if (c > d)

+        color += bigColor;

+    else

+        color += smallColor;

+

+    if (color.z < minimum)

+        return;

+

+    color.z++;

+

+    if (color.z > threshhold)

+        discard;

+

+    color++;

+

+    // Two path, different rest

+    if (color.w > threshhold2) {

+        if (color.z > threshhold2)

+            return;

+        else if (b)

+            color.z++;

+        else {

+            if (color.x < minimum) {

+                discard;

+            } else {

+                color++;

+            }

+        }

+    } else {

+        if (b)

+            discard;

+        else

+            return;

+    }

+

+

+    // // Two path, shared rest

+    // if (color.w > threshhold2) {

+    //     if (color.z > threshhold2)

+    //         return;

+    //     else if (b)

+    //         color++;

+    //     else {

+    //         if (color.x < minimum) {

+    //             discard;

+    //         } else {

+    //             color++;

+    //         }

+    //     }

+    // } else {

+    //     if (b)

+    //         discard;

+    //     else

+    //         return;

+    // }

+

+

+    // // One path

+    // if (color.w > threshhold2) {

+    //     if (color.z > threshhold2)

+    //         return;

+    //     else {

+    //         if (color.x < minimum) {

+    //             discard;

+    //         } else {

+    //             color++;

+    //         }

+    //     }

+    // } else {

+    //     if (b)

+    //         discard;

+    //     else

+    //         return;

+    // }

+

+    gl_FragColor = color * color2;

+}

diff --git a/Test/flowControl.frag b/Test/flowControl.frag
new file mode 100644
index 0000000..eaa6fb1
--- /dev/null
+++ b/Test/flowControl.frag
@@ -0,0 +1,23 @@
+#version 120

+

+uniform float d;

+uniform vec4 bigColor, smallColor;

+uniform vec4 otherColor;

+

+varying float c;

+varying vec4 BaseColor;

+

+void main()

+{

+    vec4 color = BaseColor;

+    vec4 color2;

+

+    color2 = otherColor;

+

+    if (c > d)

+        color += bigColor;

+    else

+        color += smallColor;

+

+    gl_FragColor = color * color2;

+}

diff --git a/Test/forLoop.frag b/Test/forLoop.frag
new file mode 100644
index 0000000..117ecad
--- /dev/null
+++ b/Test/forLoop.frag
@@ -0,0 +1,41 @@
+#version 130

+

+uniform vec4 bigColor;

+in vec4 BaseColor;

+in float f;

+

+uniform int Count;

+uniform uvec4 v4;

+

+void main()

+{

+    vec4 color = BaseColor;

+

+    for (int i = 0; i < Count; ++i) {

+        color += bigColor;

+    }

+

+    gl_FragColor = color;

+

+    float sum = 0.0;

+    for (int i = 0; i < 4; ++i)

+        sum += v4[i];

+

+    vec4 tv4;

+

+    for (int i = 0; i < 4; ++i)

+        tv4[i] = v4[i] * 4u;

+

+    gl_FragColor += vec4(sum) + tv4;

+

+    vec4 r;

+    r.xyz = BaseColor.xyz;

+

+    for (int i = 0; i < Count; ++i)

+        r.w = f;

+

+    gl_FragColor.xyz += r.xyz;

+

+    for (int i = 0; i < 16; i += 4)

+        gl_FragColor *= f;

+}

diff --git a/Test/functionCall.frag b/Test/functionCall.frag
new file mode 100644
index 0000000..e1fc0e0
--- /dev/null
+++ b/Test/functionCall.frag
@@ -0,0 +1,44 @@
+#version 130

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+float h = 0.0;

+

+float foo(vec4 bar)

+{

+    return bar.x + bar.y;

+}

+

+void bar()

+{

+}

+

+float unreachableReturn()

+{

+    if (d < 4.2)

+        return 1.2;

+    else

+        return 4.5;

+    // might be another return inserted here by builders, has to be correct type

+}

+

+float missingReturn()

+{

+    if (d < 4.5) {

+        h = d;

+        return 3.9;

+    }

+}

+

+void main()

+{

+    vec4 color = vec4(foo(BaseColor));

+

+    bar();

+    float f = unreachableReturn();

+    float g = missingReturn();

+    

+    gl_FragColor = color * f * h;

+}

diff --git a/Test/functionSemantics.frag b/Test/functionSemantics.frag
new file mode 100644
index 0000000..67ff5f5
--- /dev/null
+++ b/Test/functionSemantics.frag
@@ -0,0 +1,63 @@
+#version 400

+

+uniform float u;

+

+int foo(int a, const int b, in int c, const in int d, out int e, inout int f)

+{

+    int sum = a + b + c + d + f; // no e, it is out only

+	// sum should be 47 now

+

+	a *= 64;

+	// no b, it is read only

+	c *= 64;

+	// no d, it is read only

+	e = 64 * 16; // e starts undefined

+	f *= 64;

+

+	sum += a + 64 * b + c + 64 * d + e + f; // everything has a value now, totaling of 64(1+2+4+8+16+32) = 64*63 = 4032

+	// sum should be 4032 + 47  = 4079

+	

+	return sum;

+}

+

+int foo2(float a, vec3 b, out int r)

+{

+    r = int(3.0 * a);

+    return int(5.0 * b.y);

+}

+

+int foo3()

+{

+    if (u > 3.2) {

+        discard;

+        return 1000000;

+    }

+

+    return 2000000;

+}

+

+void main()

+{

+    int e;

+	int t = 2;

+	struct s {

+	    ivec4 t;

+	} f;

+	f.t.y = 32;

+

+    // test the different qualifers

+    int color = foo(1, 2, t+t, 8, e, f.t.y);

+

+	color += 128 * (e + f.t.y); // right side should be 128(64(16 + 32)) = 393216

+	// sum should be 4079 + 393216 = 397295

+    

+    // test conversions

+    float arg;

+    float ret;

+    ret = foo2(4, ivec3(1,2,3), arg);  // ret = 10, param = 12.0

+    color += int(ret + arg); // adds 22, for total of 397317

+

+    color += foo3();         // theoretically, add 2000000, for total of 2397317

+

+    gl_FragColor = vec4(color);

+}

diff --git a/Test/length.frag b/Test/length.frag
new file mode 100644
index 0000000..74c286f
--- /dev/null
+++ b/Test/length.frag
@@ -0,0 +1,18 @@
+#version 120

+

+uniform vec4 u[3];

+

+#ifdef TEST_POST_110

+varying vec2 v[];

+#else

+varying vec2 v[2];

+#endif

+

+void main()

+{

+    int a[5];

+

+    vec2 t = v[0] + v[1];

+

+    gl_FragColor = vec4(u.length() * v.length() * a.length());

+}

diff --git a/Test/localAggregates.frag b/Test/localAggregates.frag
new file mode 100644
index 0000000..d8a7fb1
--- /dev/null
+++ b/Test/localAggregates.frag
@@ -0,0 +1,72 @@
+#version 130

+

+uniform sampler2D sampler;

+varying vec2 coord;

+varying vec4 color;

+

+struct s1 {

+    int i;

+    float f;

+};

+

+struct s2 {

+    int i;

+    float f;

+	s1 s1_1;

+	vec4 bleh;

+};

+

+struct s3 {

+	s2 s2_1;

+    int i;

+    float f;

+	s1 s1_1;

+};

+

+

+uniform s1 foo;

+uniform s2 foo2;

+uniform s3 foo3;

+

+uniform float[16] uFloatArray;

+uniform int condition;

+

+void main()

+{

+	s2 locals2;

+	s3 locals3;

+	float localFArray[16];

+	int localIArray[8];

+

+	locals2 = foo3.s2_1;

+

+	if (foo3.s2_1.i > 0) {

+		locals2.s1_1.f = 1.0;

+		localFArray[4] = coord.x;

+		localIArray[2] = foo3.s2_1.i;

+	} else {

+		locals2.s1_1.f = coord.x;

+		localFArray[4] = 1.0;

+		localIArray[2] = 0;

+	}

+

+	if (localIArray[2] == 0)

+		++localFArray[4];

+

+ 	float localArray[16];

+	int x = 5;

+	localArray[x] = coord.x;

+

+	float[16] a;

+

+	for (int i = 0; i < 16; i++)

+		a[i] = 0.0;

+	

+	if (condition == 1)

+		a = localArray;

+	

+	locals2.bleh = color;

+	locals2.bleh.z = coord.y;

+

+	gl_FragColor = locals2.bleh * (localFArray[4] + locals2.s1_1.f + localArray[x] + a[x]) * texture2D(sampler, coord);

+}

diff --git a/Test/loops.frag b/Test/loops.frag
new file mode 100644
index 0000000..ce2d2a0
--- /dev/null
+++ b/Test/loops.frag
@@ -0,0 +1,320 @@
+#version 130

+uniform vec4 bigColor;

+uniform vec4 bigColor1_1;

+uniform vec4 bigColor1_2;

+uniform vec4 bigColor1_3;

+uniform vec4 bigColor2;

+uniform vec4 bigColor3;

+uniform vec4 bigColor4;

+uniform vec4 bigColor5;

+uniform vec4 bigColor6;

+uniform vec4 bigColor7;

+uniform vec4 bigColor8;

+

+varying vec4 BaseColor;

+

+uniform float d;

+uniform float d2;

+uniform float d3;

+uniform float d4;

+uniform float d5;

+uniform float d6;

+uniform float d7;

+uniform float d8;

+uniform float d9;

+uniform float d10;

+uniform float d11;

+uniform float d12;

+uniform float d13;

+uniform float d14;

+uniform float d15;

+uniform float d16;

+uniform float d17;

+uniform float d18;

+uniform float d19;

+uniform float d20;

+uniform float d21;

+uniform float d22;

+uniform float d23;

+uniform float d24;

+uniform float d25;

+uniform float d26;

+uniform float d27;

+uniform float d28;

+uniform float d29;

+uniform float d30;

+uniform float d31;

+uniform float d32;

+uniform float d33;

+uniform float d34;

+

+uniform int Count;

+

+void main()

+{

+    vec4 color = BaseColor;

+

+    // Not a real loop

+    while (true) {

+        if (color.x < 0.33) {

+            color += vec4(0.33);

+            break;

+        }

+        if (color.x < 0.66) {

+            color += vec4(0.66);

+            break;

+        }

+

+        color += vec4(0.33);

+        break;

+    }

+

+    // While

+    while (color.x < d) {

+        color += bigColor;

+    }

+

+    // While (latchy)

+    while (color.z < d) {

+        color += bigColor1_1;

+        if (color.w < d)

+            continue;

+

+        color += bigColor1_1;

+    }

+

+    // While (constant)

+    while (color.x < 42.0) {

+        ++color;

+    }

+

+    // While (complicated-conditional)

+    while (color.w < d2 && color.y < d3) {

+        color += bigColor1_2;

+    }

+

+    // While (multi-exit)

+    while (color.z < d3) {

+        color += bigColor1_3;

+        if (color.y < d4)

+            break;

+        color += bigColor1_3;

+    }

+

+    // For (dynamic)

+    for (int i = 0; i < Count; ++i) {

+        color += bigColor2;

+    }

+

+    // Do while

+    do {

+        color += bigColor3;

+    } while (color.x < d2);

+

+    // For (static)

+    for (int i = 0; i < 42; ++i) {

+        color.z += d3;

+    }

+

+    // For (static) flow-control

+    for (int i = 0; i < 100; ++i) {

+        if (color.z < 20.0)

+            color.x++;

+        else

+            color.y++;

+        if (color.w < 20.0)

+            if (color.z > color.y)

+                0;              // do nothing

+    }

+

+    // For (static) flow-control with latch merge

+    for (int i = 0; i < 120; ++i) {

+        if (color.z < 20.0)

+            color.x++;

+        else

+            color.y++;

+    }

+

+    // For (static) latchy

+    for (int i = 0; i < 42; ++i) {

+        color.z += d3;

+        if (color.x < d4)

+            continue;

+        ++color.w;

+    }

+

+    // For (static) multi-exit

+    for (int i = 0; i < 42; ++i) {

+        color.z += d3;

+        if (color.x < d4)

+            break;

+        ++color.w;

+    }

+

+    // Latchy

+    do {

+        color += bigColor4;

+        if (color.x < d4)

+            continue;

+        if (color.y < d4)

+            color.y += d4;

+        else

+            color.x += d4;

+    } while (color.z < d4);

+

+    // Do while flow control

+    do {

+        color += bigColor5;

+        if (color.y < d5)

+            color.y += d5;

+    } while (color.x < d5);

+

+    // If then loop

+    if (color.x < d6) {

+        while (color.y < d6)

+            color += bigColor6;

+    } else {

+        while (color.z < d6)

+            color.z += bigColor6.z;

+    }

+

+    // If then multi-exit

+    if (color.x < d6) {

+        while (color.y < d6) {

+            color += bigColor6;

+            if (d7 < 1.0)

+                break;

+        }

+

+    } else {

+        while (color.z < d6)

+            color.z += bigColor6.z;

+    }

+

+

+    // Multi-exit

+    do {

+       if (d7 < 0.0)

+           break;

+

+       color += bigColor7;

+

+       if (d7 < 1.0) {

+           color.z++;

+           break;

+       }

+

+       color += BaseColor;

+

+    } while (true);

+

+

+    // Multi-exit2

+    do {

+        // invariant conditional break at the top of the loop. This could be a

+        // situation where unswitching the loop has no real increases in code

+        // size.

+       if (d8 < 0.0)

+           break;

+

+       color += bigColor7;

+

+       if (d8 < 1.0) {

+           color.z++;

+           if (d8 < 2.0) {

+               color.y++;

+           } else {

+               color.x++;

+           }

+           break;

+       }

+

+       color += BaseColor;

+

+    } while (color.z < d8);

+

+    // Deep exit

+    while (color.w < d9) {

+        if (d9 > d8) {

+            if (color.x <= d7) {

+                if (color.z == 5.0)

+                    color.w++;

+                else

+                    break;

+            }

+        }

+

+    }

+

+    // No end loop-back.

+    while (color.z < d10) {

+        color.y++;

+        if (color.y < d11) {

+            color.z++;

+            if (color.w < d12)

+                color.w++;

+            else

+                color.x++;

+            continue;

+        }

+

+        color++;

+        break;

+    }

+

+    // Multi-continue

+    while (color.x < 10.0) {

+        color += bigColor8;

+

+        if (color.z < d8)

+            if (color.w < d6)

+                continue;

+

+        color.y += bigColor8.x;

+    }

+

+    color++;

+    gl_FragColor = color;

+

+    // Early Return

+    while (color.x < d14) {

+        if (color.y < d15) {

+            return;

+        }

+        else

+            color++;

+    }

+

+    color++;

+

+    while (color.w < d16) {

+        color.w++;

+    }

+

+

+    // While (complicated-conditional)

+    while (color.w < d2 && color.y < d3) {

+        color += bigColor1_2;

+        if (color.z < d3)

+            return;

+    }

+

+

+    do {

+        if (color.y < d18)

+            return;

+        color++;

+    } while (color.x < d17);

+

+    // Early Discard

+    while (color.y < d16) {

+        if (color.w < d16) {

+            discard;

+        } else

+            color++;

+    }

+

+    color++;

+

+    gl_FragColor = color;

+}

diff --git a/Test/loopsArtificial.frag b/Test/loopsArtificial.frag
new file mode 100644
index 0000000..2f196af
--- /dev/null
+++ b/Test/loopsArtificial.frag
@@ -0,0 +1,96 @@
+#version 130

+uniform vec4 bigColor;

+uniform vec4 bigColor1_1;

+uniform vec4 bigColor1_2;

+uniform vec4 bigColor1_3;

+uniform vec4 bigColor2;

+uniform vec4 bigColor3;

+uniform vec4 bigColor4;

+uniform vec4 bigColor5;

+uniform vec4 bigColor6;

+uniform vec4 bigColor7;

+uniform vec4 bigColor8;

+

+varying vec4 BaseColor;

+

+uniform float d;

+uniform float d2;

+uniform float d3;

+uniform float d4;

+uniform float d5;

+uniform float d6;

+uniform float d7;

+uniform float d8;

+uniform float d9;

+uniform float d10;

+uniform float d11;

+uniform float d12;

+uniform float d13;

+uniform float d14;

+uniform float d15;

+uniform float d16;

+uniform float d17;

+uniform float d18;

+uniform float d19;

+uniform float d20;

+uniform float d21;

+uniform float d22;

+uniform float d23;

+uniform float d24;

+uniform float d25;

+uniform float d26;

+uniform float d27;

+uniform float d28;

+uniform float d29;

+uniform float d30;

+uniform float d31;

+uniform float d32;

+uniform float d33;

+uniform float d34;

+

+uniform int Count;

+

+void main()

+{

+    vec4 color = BaseColor;

+

+    // Latchy2

+    do {

+        color += bigColor4;

+        if (color.x < d4) {

+            color.z += 2.0;

+            if (color.z < d4) {

+                color.x++;

+                continue;

+            }

+        }

+        if (color.y < d4)

+            color.y += d4;

+        else

+            color.x += d4;

+    } while (color.z < d4);

+

+    // Immediate dominator

+    while (color.w < d13) {

+        if (color.z < d13)

+            color++;

+        else

+            color--;

+        // code from Latchy 2

+        color += bigColor4;

+        if (color.x < d4) {

+            color.z += 2.0;

+            if (color.z < d4) {

+                color.x++;

+                continue;

+            }

+        }

+        if (color.y < d4)

+            color.y += d4;

+        else

+            color.x += d4;

+    }

+

+    color++;

+    gl_FragColor = color;

+}

diff --git a/Test/matrix.frag b/Test/matrix.frag
new file mode 100644
index 0000000..150e043
--- /dev/null
+++ b/Test/matrix.frag
@@ -0,0 +1,55 @@
+#version 130

+

+//#define TEST_POST_110

+

+uniform mat3 colorTransform;

+varying vec3 Color;

+uniform mat4 m, n;

+

+#ifdef TEST_POST_110

+uniform mat4x3 um43;

+uniform mat3x4 un34;

+#else

+uniform mat4 um43;

+uniform mat4 un34;

+#endif

+

+varying vec4 v;

+

+#ifdef TEST_POST_110

+varying vec3 u;

+#else

+varying vec4 u;

+#endif

+

+void main()

+{

+    gl_FragColor = vec4(un34[1]);

+    gl_FragColor += vec4(Color * colorTransform, 1.0);

+

+    if (m != n)

+        gl_FragColor += v;

+   else {

+        gl_FragColor += m * v;

+        gl_FragColor += v * (m - n);

+   }

+    

+#ifdef TEST_POST_110

+    mat3x4 m34 = outerProduct(v, u);

+    m34 += mat4(v.x);

+    m34 += mat4(u, u.x, u, u.x, u, u.x, u.x);

+#else

+    mat4 m34 = mat4(v.x*u.x, v.x*u.y, v.x*u.z, v.x*u.w, 

+                    v.y*u.x, v.y*u.y, v.y*u.z, v.y*u.w, 

+                    v.z*u.x, v.z*u.y, v.z*u.z, v.z*u.w, 

+                    v.w*u.x, v.w*u.y, v.w*u.z, v.w*u.w);

+    m34 += mat4(v.x);

+    m34 += mat4(u, u.x, u, u.x, u, u.x, u.x);

+

+#endif

+

+    if (m34 == un34)

+        gl_FragColor += m34 * u;

+    else

+        gl_FragColor += (un34 * um43) * v;

+}

diff --git a/Test/matrix2.frag b/Test/matrix2.frag
new file mode 100644
index 0000000..eb2c53c
--- /dev/null
+++ b/Test/matrix2.frag
@@ -0,0 +1,50 @@
+#version 150

+

+uniform mat3 colorTransform;

+varying vec3 Color;

+uniform mat4 m, n;

+

+uniform mat4x3 um43;

+uniform mat3x4 un34;

+uniform mat2 um2;

+uniform mat3 um3;

+uniform mat4 um4;

+

+varying vec4 v;

+

+varying vec3 u;

+

+out vec4 FragColor;

+

+void main()

+{

+    mat3x4 m34 = outerProduct(v, u);

+

+    m34 += mat3x4(4.3);

+

+    FragColor = vec4(Color, 1.0);

+    FragColor *= vec4(FragColor * m34, 1.0);

+

+    m34 *= v.x;

+

+    mat4 m44 = mat4(un34);

+

+    m44 += m34 * um43;

+

+    FragColor += (-m44) * v;

+

+    FragColor *= matrixCompMult(m44, m44);

+

+    m34 = transpose(um43);

+    FragColor *= vec4(FragColor * m34, 1.0);

+    FragColor *= vec4(determinant(um4));

+    mat2 inv = inverse(um2);

+    FragColor *= vec4(inv[0][0], inv[1][0], inv[0][1], inv[1][1]);

+    mat3 inv3 = inverse(um3);

+    FragColor *= vec4(inv3[2][1]);

+

+    mat4 inv4 = inverse(um4);

+    FragColor *= inv4;

+

+    FragColor = vec4(FragColor * matrixCompMult(un34, un34), FragColor.w);

+}

diff --git a/Test/newTexture.frag b/Test/newTexture.frag
new file mode 100644
index 0000000..9d01209
--- /dev/null
+++ b/Test/newTexture.frag
@@ -0,0 +1,75 @@
+#version 430

+

+uniform samplerBuffer sb;

+uniform sampler2DRect sr;

+uniform sampler2D s2D;

+uniform sampler3D s3D;

+uniform samplerCube sCube;

+uniform samplerCubeShadow sCubeShadow;

+uniform sampler2DShadow s2DShadow;

+uniform sampler2DArray s2DArray;

+uniform sampler2DArrayShadow s2DArrayShadow;

+

+uniform isampler2D is2D;

+uniform isampler3D is3D;

+uniform isamplerCube isCube;

+uniform isampler2DArray is2DArray;

+uniform isampler2DMS is2Dms;

+

+uniform usampler2D us2D;

+uniform usampler3D us3D;

+uniform usamplerCube usCube;

+uniform usampler2DArray us2DArray;

+

+in float c1D;

+in vec2  c2D;

+in vec3  c3D;

+in vec4  c4D;

+

+flat in int   ic1D;

+flat in ivec2 ic2D;

+flat in ivec3 ic3D;

+flat in ivec4 ic4D;

+

+out vec4 FragData;

+

+void main()

+{

+    vec4 v = texture(s2D, c2D);

+    v += textureProj(s3D, c4D);

+    v += textureLod(s2DArray, c3D, 1.2);

+    v.y += textureOffset(s2DShadow, c3D, ivec2(3), c1D);

+    v += texelFetch(s3D, ic3D, ic1D);

+    v += texelFetchOffset(s2D, ic2D, 4, ic2D);

+    v.y += textureLodOffset(s2DShadow, c3D, c1D, ivec2(3));

+    v += textureProjLodOffset(s2D, c3D, c1D, ivec2(3));

+    v += textureGrad(sCube, c3D, c3D, c3D);

+    v.x += textureGradOffset(s2DArrayShadow, c4D, c2D, c2D, ivec2(3));

+    v += textureProjGrad(s3D, c4D, c3D, c3D);

+    v += textureProjGradOffset(s2D, c3D, c2D, c2D, ivec2(3));

+

+    ivec4 iv = texture(is2D, c2D);

+    v += vec4(iv);

+    iv = textureProjOffset(is2D, c4D, ivec2(3));

+    v += vec4(iv);

+    iv = textureProjLod(is2D, c3D, c1D);

+    v += vec4(iv);

+    iv = textureProjGrad(is2D, c3D, c2D, c2D);

+    v += vec4(iv);

+    iv = texture(is3D, c3D, 4.2);

+    v += vec4(iv);

+    iv = textureLod(isCube, c3D, c1D);

+    v += vec4(iv);

+    iv = texelFetch(is2DArray, ic3D, ic1D);

+    v += vec4(iv);

+

+    iv += texelFetch(is2Dms, ic2D, ic1D);

+    v += vec4(iv);

+    v += texelFetch(sb, ic1D);

+    v += texelFetch(sr, ic2D);

+

+    ivec2 iv2 = textureSize(sCubeShadow, 2);

+    // iv2 += textureSize(is2Dms);

+

+    FragData = v + vec4(iv2, 0.0, 0.0);

+}

diff --git a/Test/prepost.frag b/Test/prepost.frag
new file mode 100644
index 0000000..dfd4566
--- /dev/null
+++ b/Test/prepost.frag
@@ -0,0 +1,38 @@
+#version 140

+

+void main()

+{

+    struct s {

+        float y[5];

+    } str;

+

+    float t;

+    int index = 5;  // all indexing is 4

+

+    str.y[4] = 2.0;             // 2.0

+    t = ++str.y[--index];       // 3.0

+    str.y[4] += t;              // 6.0

+    t = str.y[4]--;             // 5.0 (t = 6.0)

+    str.y[index++] += t;        // 11.0

+    --str.y[--index];           // 10.0

+

+    float x = str.y[4];

+	++x;

+	--x;

+	x++;

+	x--;

+

+	// x is 10.0

+

+	float y = x * ++x;  // 10 * 11

+	float z = y * x--;  // 110 * 11

+

+    // x is 10.0

+    // z is 1210.0

+

+    vec4 v = vec4(1.0, 2.0, 3.0, 4.0);

+    v.y = v.z--;  // (1,3,2,4)

+    v.x = --v.w;  // (3,3,2,3)

+

+    gl_FragColor = z * v;// (3630.0, 3630.0, 2420.0, 3630.0)

+}

diff --git a/Test/simpleFunctionCall.frag b/Test/simpleFunctionCall.frag
new file mode 100644
index 0000000..59f0ccd
--- /dev/null
+++ b/Test/simpleFunctionCall.frag
@@ -0,0 +1,15 @@
+#version 150

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+vec4 foo()

+{

+    return BaseColor;

+}

+

+void main()

+{

+    gl_FragColor = foo();

+}

diff --git a/Test/structAssignment.frag b/Test/structAssignment.frag
new file mode 100644
index 0000000..959f854
--- /dev/null
+++ b/Test/structAssignment.frag
@@ -0,0 +1,39 @@
+#version 130

+

+uniform sampler2D sampler;

+varying mediump vec2 coord;

+

+struct lunarStruct1 {

+    int i;

+    float f;

+};

+

+struct lunarStruct2 {

+    int i;

+    float f;

+	lunarStruct1 s1_1;

+};

+

+struct lunarStruct3 {

+	lunarStruct2 s2_1;

+    int i;

+    float f;

+	lunarStruct1 s1_1;

+};

+

+

+uniform lunarStruct1 foo;

+uniform lunarStruct2 foo2;

+uniform lunarStruct3 foo3;

+

+void main()

+{

+	lunarStruct2 locals2;

+

+	if (foo3.s2_1.i > 0)

+		locals2 = foo3.s2_1;

+	else

+		locals2 = foo2;

+

+	gl_FragColor =  locals2.s1_1.f * texture2D(sampler, coord);

+}

diff --git a/Test/structDeref.frag b/Test/structDeref.frag
new file mode 100644
index 0000000..376e408
--- /dev/null
+++ b/Test/structDeref.frag
@@ -0,0 +1,71 @@
+#version 130

+

+uniform sampler2D sampler;

+varying vec2 coord;

+

+struct s0 {

+    int i;

+};

+

+struct s00 {

+    s0 s0_0;

+};

+

+struct s1 {

+    int i;

+    float f;

+    s0 s0_1;

+};

+

+struct s2 {

+    int i;

+    float f;

+    s1 s1_1;

+};

+

+struct s3 {

+    s2[12] s2_1;

+    int i;

+    float f;

+    s1 s1_1;

+};

+

+

+uniform s0 foo0;

+uniform s1 foo1;

+uniform s2 foo2;

+uniform s3 foo3;

+

+uniform s00 foo00;

+

+void main()

+{

+    s0 locals0;

+    s2 locals2;

+    s00 locals00;

+

+    float[6] fArray;

+

+    s1[10] locals1Array;

+

+    if (foo3.s2_1[9].i > 0) {

+        locals2.f = 1.0;

+        locals2.s1_1 = s1(0, 1.0, s0(0));

+        fArray = float[6]( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);

+        locals1Array[6] = foo1;

+        locals0 = s0(0);

+        locals00 = s00(s0(0));

+    } else {

+        locals2.f = coord.x;

+        locals2.s1_1 = s1(1, coord.y, foo0);

+        fArray = float[6]( 0.0, 1.0, 2.0, 3.0, 4.0, 5.0);

+        locals1Array[6] = locals2.s1_1;

+        locals0 = foo1.s0_1;

+        locals00 = foo00;

+    }

+

+    if (locals0.i > 5)

+        locals0 = locals00.s0_0;

+

+    gl_FragColor = (float(locals0.i) + locals1Array[6].f + fArray[3] + locals2.s1_1.f) * texture2D(sampler, coord);

+}

diff --git a/Test/structure.frag b/Test/structure.frag
new file mode 100644
index 0000000..97e79cb
--- /dev/null
+++ b/Test/structure.frag
@@ -0,0 +1,31 @@
+#version 130

+uniform sampler2D sampler;

+varying vec2 coord;

+

+struct lunarStruct1 {

+    int i;

+	float f[4];

+	vec4 color[5];

+};

+

+struct lunarStruct2 {

+    int i[5];

+    float f;

+	lunarStruct1 s1_1[7];

+};

+

+uniform lunarStruct1 foo;

+uniform lunarStruct2 foo2[5];

+

+void main()

+{

+	float scale = 0.0;

+

+	if (foo2[3].i[4] > 0)

+		scale = foo2[3].s1_1[2].color[3].x;

+	else

+		scale = foo2[3].s1_1[2].f[3];

+

+	gl_FragColor =  scale * texture2D(sampler, coord);

+}

+

diff --git a/Test/swizzle.frag b/Test/swizzle.frag
new file mode 100644
index 0000000..14f507e
--- /dev/null
+++ b/Test/swizzle.frag
@@ -0,0 +1,52 @@
+#version 110

+

+uniform float blend;

+uniform vec4 u;

+uniform bool p;

+

+varying vec2 t;

+

+void main()

+{

+    float blendscale = 1.789;

+

+    vec4 w = u;

+    vec4 w_undef;       // test undef

+    vec4 w_dep = u;     // test dependent swizzles

+    vec4 w_reorder = u; // test reordering

+    vec4 w2 = u;

+    vec4 w_flow = u;    // test flowControl

+

+    w_reorder.z = blendscale;

+

+    w.wy = t;

+

+    w_reorder.x = blendscale;

+

+    w2.xyzw = u.zwxy;

+

+    w_reorder.y = blendscale;

+

+    w_dep.xy = w2.xz;

+    w_dep.zw = t;

+

+    w_undef.xy = u.zw;

+

+    if (p)

+        w_flow.x = t.x;

+    else

+        w_flow.x = t.y;

+

+    gl_FragColor = mix(w_reorder, w_undef, w * w2 * w_dep * w_flow);

+

+    vec2 c = t;

+    vec4 rep = vec4(0.0, 0.0, 0.0, 1.0);

+

+    if (c.x < 0.0)

+        c.x *= -1.0;

+

+    if (c.x <= 1.0)

+        rep.x = 3.4;

+

+    gl_FragColor += rep;

+}

diff --git a/Test/syntaxError.frag b/Test/syntaxError.frag
new file mode 100644
index 0000000..fcbeb69
--- /dev/null
+++ b/Test/syntaxError.frag
@@ -0,0 +1,16 @@
+#version 120

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+void main()

+{

+    vec5 color = BaseColor;

+

+    do {

+        color += bigColor;

+    } while (color.x < d);

+

+    gl_FragColor = color;

+}

diff --git a/Test/test.frag b/Test/test.frag
new file mode 100644
index 0000000..1b7d0e9
--- /dev/null
+++ b/Test/test.frag
@@ -0,0 +1,22 @@
+#version 110

+

+uniform sampler2D texSampler2D;

+uniform sampler3D texSampler3D;

+

+uniform float blend;

+uniform vec2 scale;

+uniform vec4 u;

+

+varying vec2 t;

+varying vec3 coords;

+

+void main()

+{  

+    float blendscale = 1.789;

+

+    vec4 v = texture2D(texSampler2D, (t + scale) / scale ).wzyx;

+

+	vec4 w = texture3D(texSampler3D, coords) + v;

+    

+    gl_FragColor = mix(w, u, blend * blendscale);

+}

diff --git a/Test/testlist b/Test/testlist
index 5c06ce1..b77fd8c 100644
--- a/Test/testlist
+++ b/Test/testlist
@@ -83,43 +83,43 @@
 450.comp
 dce.frag
 atomic_uint.frag
-../../LunarGLASS/test/aggOps.frag
-../../LunarGLASS/test/always-discard.frag
-../../LunarGLASS/test/always-discard2.frag
-../../LunarGLASS/test/conditionalDiscard.frag
-../../LunarGLASS/test/conversion.frag
-../../LunarGLASS/test/dataOut.frag
-../../LunarGLASS/test/dataOutIndirect.frag
-../../LunarGLASS/test/deepRvalue.frag
-../../LunarGLASS/test/depthOut.frag
-../../LunarGLASS/test/discard-dce.frag
-../../LunarGLASS/test/doWhileLoop.frag
-../../LunarGLASS/test/earlyReturnDiscard.frag
-../../LunarGLASS/test/flowControl.frag
-../../LunarGLASS/test/forLoop.frag
-../../LunarGLASS/test/functionCall.frag
-../../LunarGLASS/test/functionSemantics.frag
-../../LunarGLASS/test/length.frag
-../../LunarGLASS/test/localAggregates.frag
-../../LunarGLASS/test/loops.frag
-../../LunarGLASS/test/loopsArtificial.frag
-../../LunarGLASS/test/matrix.frag
-../../LunarGLASS/test/matrix2.frag
-../../LunarGLASS/test/newTexture.frag
-../../LunarGLASS/test/Operations.frag
-../../LunarGLASS/test/prepost.frag
-../../LunarGLASS/test/simpleFunctionCall.frag
-../../LunarGLASS/test/structAssignment.frag
-../../LunarGLASS/test/structDeref.frag
-../../LunarGLASS/test/structure.frag
-../../LunarGLASS/test/swizzle.frag
-../../LunarGLASS/test/syntaxError.frag
-../../LunarGLASS/test/test.frag
-../../LunarGLASS/test/texture.frag
-../../LunarGLASS/test/types.frag
-../../LunarGLASS/test/uniformArray.frag
-../../LunarGLASS/test/variableArrayIndex.frag
-../../LunarGLASS/test/varyingArray.frag
-../../LunarGLASS/test/varyingArrayIndirect.frag
-../../LunarGLASS/test/voidFunction.frag
-../../LunarGLASS/test/whileLoop.frag
+aggOps.frag
+always-discard.frag
+always-discard2.frag
+conditionalDiscard.frag
+conversion.frag
+dataOut.frag
+dataOutIndirect.frag
+deepRvalue.frag
+depthOut.frag
+discard-dce.frag
+doWhileLoop.frag
+earlyReturnDiscard.frag
+flowControl.frag
+forLoop.frag
+functionCall.frag
+functionSemantics.frag
+length.frag
+localAggregates.frag
+loops.frag
+loopsArtificial.frag
+matrix.frag
+matrix2.frag
+newTexture.frag
+Operations.frag
+prepost.frag
+simpleFunctionCall.frag
+structAssignment.frag
+structDeref.frag
+structure.frag
+swizzle.frag
+syntaxError.frag
+test.frag
+texture.frag
+types.frag
+uniformArray.frag
+variableArrayIndex.frag
+varyingArray.frag
+varyingArrayIndirect.frag
+voidFunction.frag
+whileLoop.frag
diff --git a/Test/texture.frag b/Test/texture.frag
new file mode 100644
index 0000000..8e5391e
--- /dev/null
+++ b/Test/texture.frag
@@ -0,0 +1,73 @@
+#version 130

+

+uniform sampler1D       texSampler1D;

+uniform sampler2D       texSampler2D;

+uniform sampler3D       texSampler3D;

+uniform samplerCube	    texSamplerCube;

+uniform sampler1DShadow shadowSampler1D;

+uniform sampler2DShadow shadowSampler2D;

+

+uniform float blend;

+uniform vec2 scale;

+uniform vec4 u;

+

+varying vec2 t;

+varying vec2 coords2D;

+

+void main()

+{  

+    float blendscale = 1.789;

+    float bias       = 2.0;

+    float lod		 = 3.0;

+    float proj       = 2.0;

+    float coords1D   = 1.789;

+    vec3  coords3D   = vec3(1.789, 2.718, 3.453);

+    vec4  coords4D   = vec4(1.789, 2.718, 3.453, 2.0);

+    vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);

+

+    color += texture1D    (texSampler1D, coords1D);

+    color += texture1D    (texSampler1D, coords1D, bias);

+    color += texture1DProj(texSampler1D, coords2D);

+    color += texture1DProj(texSampler1D, coords4D);

+    color += texture1DProj(texSampler1D, coords2D, bias);

+    color += texture1DProj(texSampler1D, coords4D, bias);

+    

+    color += texture2D        (texSampler2D, coords2D);

+    color += texture2D        (texSampler2D, coords2D, bias);

+    color += texture2DProj    (texSampler2D, coords3D);

+    color += texture2DProj    (texSampler2D, coords4D, bias);

+

+    color += texture3D        (texSampler3D, coords3D);

+    color += texture3D        (texSampler3D, coords3D, bias);

+    color += texture3DProj    (texSampler3D, coords4D);

+    color += texture3DProj    (texSampler3D, coords4D, bias);

+

+    color += textureCube    (texSamplerCube, coords3D);

+    color += textureCube    (texSamplerCube, coords3D, bias);

+    

+    color += shadow1D       (shadowSampler1D, coords3D);

+    color += shadow1D       (shadowSampler1D, coords3D, bias);

+    color += shadow2D       (shadowSampler2D, coords3D);

+    color += shadow2D       (shadowSampler2D, coords3D, bias);

+    color += shadow1DProj   (shadowSampler1D, coords4D);

+    color += shadow1DProj   (shadowSampler1D, coords4D, bias);

+    color += shadow2DProj   (shadowSampler2D, coords4D);

+    color += shadow2DProj   (shadowSampler2D, coords4D, bias);

+

+    ivec2 iCoords2D = ivec2(0, 5);

+    int iLod = 1;

+

+    color += texelFetch(texSampler2D, iCoords2D, iLod);

+

+    vec2 gradX = dFdx(coords2D);

+    vec2 gradY = dFdy(coords2D);

+    const ivec2 offset = ivec2(3, -7);

+

+    color += textureGrad(texSampler2D, coords2D, gradX, gradY);

+    color += textureProjGrad(texSampler2D, vec3(coords2D, proj), gradX, gradY);

+    color += textureGradOffset(texSampler2D, coords2D, gradX, gradY, offset);

+    color += textureProjGradOffset(texSampler2D, coords3D, gradX, gradY, offset);

+    color += textureGrad(shadowSampler2D, vec3(coords2D, lod), gradX, gradY);

+    

+    gl_FragColor = mix(color, u, blend * blendscale);

+}
\ No newline at end of file
diff --git a/Test/types.frag b/Test/types.frag
new file mode 100644
index 0000000..48701d8
--- /dev/null
+++ b/Test/types.frag
@@ -0,0 +1,81 @@
+#version 130

+

+uniform bool  u_b;

+uniform bvec2 u_b2;

+uniform bvec3 u_b3;

+uniform bvec4 u_b4;

+

+uniform int   u_i;

+uniform ivec2 u_i2;

+uniform ivec3 u_i3;

+uniform ivec4 u_i4;

+ 

+uniform float u_f;

+uniform vec2 u_f2;

+uniform vec3 u_f3;

+uniform vec4 u_f4;

+

+uniform bool  i_b;

+uniform bvec2 i_b2;

+uniform bvec3 i_b3;

+uniform bvec4 i_b4;

+

+flat in int   i_i;

+flat in ivec2 i_i2;

+flat in ivec3 i_i3;

+flat in ivec4 i_i4;

+

+in float i_f;

+in vec2 i_f2;

+in vec3 i_f3;

+in vec4 i_f4;

+

+void main()

+{

+    bool  b = u_b && i_b;

+    bvec2 b2 = bvec2(u_b2.x && i_b2.x && u_b2.y && i_b2.y);

+    bvec3 b3 = bvec3(u_b3.x && i_b3.x && u_b3.y && i_b3.y && u_b3.z && i_b3.z);

+    bvec4 b4 = bvec4(u_b4.x && i_b4.x && u_b4.y && i_b4.y && u_b4.z && i_b4.z && u_b4.w && i_b4.w);

+

+    int   i = u_i + i_i;

+    ivec2 i2 = u_i2 + i_i2;

+    ivec3 i3 = u_i3 + i_i3;

+    ivec4 i4 = u_i4 + i_i4;

+

+    float f = u_f + i_f;

+    vec2  f2 = u_f2 + i_f2;

+    vec3  f3 = u_f3 + i_f3;

+    vec4  f4 = u_f4 + i_f4;

+

+    gl_FragColor = 

+        b || 

+        b2.x ||

+        b2.y ||

+        b3.x ||

+        b3.y ||

+        b3.z ||

+        b4.x ||

+        b4.y ||

+        b4.z ||

+        b4.w ? vec4(

+        i  +

+        i2.x +

+        i2.y +

+        i3.x +

+        i3.y +

+        i3.z +

+        i4.x +

+        i4.y +

+        i4.z +

+        i4.w +

+        f  +

+        f2.x +

+        f2.y +

+        f3.x +

+        f3.y +

+        f3.z +

+        f4.x +

+        f4.y +

+        f4.z +

+        f4.w) : vec4(1.0);        

+}

diff --git a/Test/uniformArray.frag b/Test/uniformArray.frag
new file mode 100644
index 0000000..7db2876
--- /dev/null
+++ b/Test/uniformArray.frag
@@ -0,0 +1,16 @@
+#version 130

+uniform sampler2D texSampler2D;

+uniform vec3 inColor;

+uniform vec4 color[6];

+uniform float alpha[16];

+

+void main()

+{

+	vec4 texColor = color[1] + color[1];

+

+	texColor.xyz += inColor;

+

+	texColor.a += alpha[12];

+

+    gl_FragColor = texColor;

+}

diff --git a/Test/variableArrayIndex.frag b/Test/variableArrayIndex.frag
new file mode 100644
index 0000000..63b49c7
--- /dev/null
+++ b/Test/variableArrayIndex.frag
@@ -0,0 +1,48 @@
+#version 130

+uniform sampler2D sampler;

+varying vec2 coord;

+

+struct lunarStruct1 {

+    int i;

+    float f;

+};

+

+struct lunarStruct2 {

+    int i;

+    float f;

+    lunarStruct1 s1_1;

+};

+

+struct lunarStruct3 {

+    lunarStruct2 s2_1[3];

+    int i;

+    float f;

+    lunarStruct1 s1_1;

+};

+

+

+uniform lunarStruct1 foo;

+uniform lunarStruct2 foo2[5];

+uniform lunarStruct3 foo3;

+uniform int Count;

+

+void main()

+{

+    float scale;

+    int iLocal = Count;

+

+    if (foo3.s2_1[1].i > 0)

+        scale = foo2[foo3.s2_1[foo.i].i + 2 + ++iLocal].s1_1.f;

+    else

+        scale = foo3.s2_1[0].s1_1.f;

+

+    //for (int i = 0; i < iLocal; ++i) {

+    //	scale += foo2[i].f;

+    //}

+

+    gl_FragColor =  scale * texture2D(sampler, coord);

+

+    vec2[3] constructed = vec2[3](coord, vec2(scale), vec2(1.0, 2.0));

+    gl_FragColor += vec4(constructed[foo.i], constructed[foo.i]);

+}

+

diff --git a/Test/varyingArray.frag b/Test/varyingArray.frag
new file mode 100644
index 0000000..3bd152f
--- /dev/null
+++ b/Test/varyingArray.frag
@@ -0,0 +1,19 @@
+#version 130

+uniform sampler2D texSampler2D;

+varying vec4 color;

+varying float alpha;

+

+varying vec4 gl_TexCoord[6];

+

+varying vec4 foo[3];

+

+void main()

+{

+	vec4 texColor = texture2D(texSampler2D, vec2(gl_TexCoord[4] + gl_TexCoord[5]));

+

+	texColor += color;

+

+	texColor.a = alpha;

+

+    gl_FragColor = foo[1] + gl_TexCoord[0] + gl_TexCoord[4] + texColor;

+}

diff --git a/Test/varyingArrayIndirect.frag b/Test/varyingArrayIndirect.frag
new file mode 100644
index 0000000..d45e601
--- /dev/null
+++ b/Test/varyingArrayIndirect.frag
@@ -0,0 +1,21 @@
+#version 130

+uniform sampler2D texSampler2D;

+varying vec4 color;

+varying float alpha;

+

+varying vec4 gl_TexCoord[6];

+

+varying  vec4 userIn[2];

+

+uniform int a, b;

+

+void main()

+{

+	vec4 texColor = texture2D(texSampler2D, vec2(userIn[b] + gl_TexCoord[a] + gl_TexCoord[5]));

+

+	texColor += color;

+

+	texColor.a = alpha;

+

+    gl_FragColor = gl_TexCoord[0] + gl_TexCoord[b] + texColor + userIn[a];

+}

diff --git a/Test/voidFunction.frag b/Test/voidFunction.frag
new file mode 100644
index 0000000..4767f7a
--- /dev/null
+++ b/Test/voidFunction.frag
@@ -0,0 +1,34 @@
+#version 120

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+float bar = 2.0;

+

+void foo()

+{

+    bar++;

+

+	return;

+}

+

+void foo2()

+{

+    bar++;

+}

+

+void main()

+{

+	vec4 outColor = bigColor;

+

+	foo();

+

+	foo2();

+

+	outColor.x += bar;

+

+    gl_FragColor = outColor;

+

+	return;

+}

diff --git a/Test/whileLoop.frag b/Test/whileLoop.frag
new file mode 100644
index 0000000..a9541f9
--- /dev/null
+++ b/Test/whileLoop.frag
@@ -0,0 +1,16 @@
+#version 110

+

+uniform vec4 bigColor;

+varying vec4 BaseColor;

+uniform float d;

+

+void main()

+{

+    vec4 color = BaseColor;

+

+    while (color.x < d) {

+        color += bigColor;

+    }

+

+    gl_FragColor = color;

+}