Tests: Add a set of gtest-file-based HLSL tests.
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
new file mode 100755
index 0000000..0bba2ee
--- /dev/null
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -0,0 +1,113 @@
+hlsl.assoc.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'a1' (temp 4-component vector of float)
+0:8      'a2' (temp 4-component vector of float)
+0:8      'a3' (temp 4-component vector of float)
+0:8      'a4' (temp 4-component vector of float)
+0:8      'a5' (temp 4-component vector of float)
+0:?     Sequence
+0:9      move second child to first child (temp 4-component vector of float)
+0:9        'a1' (temp 4-component vector of float)
+0:9        move second child to first child (temp 4-component vector of float)
+0:9          'a2' (temp 4-component vector of float)
+0:9          move second child to first child (temp 4-component vector of float)
+0:9            'a3' (temp 4-component vector of float)
+0:9            move second child to first child (temp 4-component vector of float)
+0:9              'a4' (temp 4-component vector of float)
+0:9              'a5' (temp 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
+0:10          add (temp 4-component vector of float)
+0:10            add (temp 4-component vector of float)
+0:10              'a1' (temp 4-component vector of float)
+0:10              'a2' (temp 4-component vector of float)
+0:10            add (temp 4-component vector of float)
+0:10              'a3' (temp 4-component vector of float)
+0:10              'a4' (temp 4-component vector of float)
+0:10          'a5' (temp 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'a1' (temp 4-component vector of float)
+0:8      'a2' (temp 4-component vector of float)
+0:8      'a3' (temp 4-component vector of float)
+0:8      'a4' (temp 4-component vector of float)
+0:8      'a5' (temp 4-component vector of float)
+0:?     Sequence
+0:9      move second child to first child (temp 4-component vector of float)
+0:9        'a1' (temp 4-component vector of float)
+0:9        move second child to first child (temp 4-component vector of float)
+0:9          'a2' (temp 4-component vector of float)
+0:9          move second child to first child (temp 4-component vector of float)
+0:9            'a3' (temp 4-component vector of float)
+0:9            move second child to first child (temp 4-component vector of float)
+0:9              'a4' (temp 4-component vector of float)
+0:9              'a5' (temp 4-component vector of float)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
+0:10          add (temp 4-component vector of float)
+0:10            add (temp 4-component vector of float)
+0:10              'a1' (temp 4-component vector of float)
+0:10              'a2' (temp 4-component vector of float)
+0:10            add (temp 4-component vector of float)
+0:10              'a3' (temp 4-component vector of float)
+0:10              'a4' (temp 4-component vector of float)
+0:10          'a5' (temp 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 25
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "a1"
+                              Name 10  "a2"
+                              Name 11  "a3"
+                              Name 12  "a4"
+                              Name 13  "a5"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+           9(a1):      8(ptr) Variable Function
+          10(a2):      8(ptr) Variable Function
+          11(a3):      8(ptr) Variable Function
+          12(a4):      8(ptr) Variable Function
+          13(a5):      8(ptr) Variable Function
+              14:    7(fvec4) Load 13(a5)
+                              Store 12(a4) 14
+                              Store 11(a3) 14
+                              Store 10(a2) 14
+                              Store 9(a1) 14
+              15:    7(fvec4) Load 9(a1)
+              16:    7(fvec4) Load 10(a2)
+              17:    7(fvec4) FAdd 15 16
+              18:    7(fvec4) Load 11(a3)
+              19:    7(fvec4) Load 12(a4)
+              20:    7(fvec4) FAdd 18 19
+              21:    7(fvec4) FAdd 17 20
+              22:    7(fvec4) Load 13(a5)
+              23:    7(fvec4) FAdd 21 22
+                              ReturnValue 23
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
new file mode 100755
index 0000000..c827f4d
--- /dev/null
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -0,0 +1,79 @@
+hlsl.float4.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1  move second child to first child (temp 4-component vector of float)
+0:1    'AmbientColor' (temp 4-component vector of float)
+0:?     Constant:
+0:?       1.000000
+0:?       0.500000
+0:?       0.000000
+0:?       1.000000
+0:7  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'input' (temp 4-component vector of float)
+0:?     Sequence
+0:5      Branch: Return with expression
+0:5        component-wise multiply (temp 4-component vector of float)
+0:5          'input' (temp 4-component vector of float)
+0:5          'AmbientColor' (temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'AmbientColor' (temp 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1  move second child to first child (temp 4-component vector of float)
+0:1    'AmbientColor' (temp 4-component vector of float)
+0:?     Constant:
+0:?       1.000000
+0:?       0.500000
+0:?       0.000000
+0:?       1.000000
+0:7  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'input' (temp 4-component vector of float)
+0:?     Sequence
+0:5      Branch: Return with expression
+0:5        component-wise multiply (temp 4-component vector of float)
+0:5          'input' (temp 4-component vector of float)
+0:5          'AmbientColor' (temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'AmbientColor' (temp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 19
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 11  "ShaderFunction(vf4;"
+                              Name 10  "input"
+                              Name 14  "AmbientColor"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 7(fvec4) 8(ptr)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+                              FunctionEnd
+11(ShaderFunction(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+14(AmbientColor):      8(ptr) Variable Function
+              13:    7(fvec4) Load 10(input)
+              15:    7(fvec4) Load 14(AmbientColor)
+              16:    7(fvec4) FMul 13 15
+                              ReturnValue 16
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
new file mode 100755
index 0000000..addc965
--- /dev/null
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -0,0 +1,60 @@
+hlsl.max.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input1' (temp 4-component vector of float)
+0:2      'input2' (temp 4-component vector of float)
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        max (global 4-component vector of float)
+0:3          'input1' (temp 4-component vector of float)
+0:3          'input2' (temp 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input1' (temp 4-component vector of float)
+0:2      'input2' (temp 4-component vector of float)
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        max (global 4-component vector of float)
+0:3          'input1' (temp 4-component vector of float)
+0:3          'input2' (temp 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "input1"
+                              Name 11  "input2"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+       9(input1):      8(ptr) Variable Function
+      11(input2):      8(ptr) Variable Function
+              10:    7(fvec4) Load 9(input1)
+              12:    7(fvec4) Load 11(input2)
+              13:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 10 12
+                              ReturnValue 13
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
new file mode 100755
index 0000000..fc31f4b
--- /dev/null
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -0,0 +1,80 @@
+hlsl.precedence.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:7    Function Parameters: 
+0:7      'a1' (temp 4-component vector of float)
+0:7      'a2' (temp 4-component vector of float)
+0:7      'a3' (temp 4-component vector of float)
+0:7      'a4' (temp 4-component vector of float)
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        add (temp 4-component vector of float)
+0:8          add (temp 4-component vector of float)
+0:8            'a1' (temp 4-component vector of float)
+0:8            component-wise multiply (temp 4-component vector of float)
+0:8              'a2' (temp 4-component vector of float)
+0:8              'a3' (temp 4-component vector of float)
+0:8          'a4' (temp 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:7    Function Parameters: 
+0:7      'a1' (temp 4-component vector of float)
+0:7      'a2' (temp 4-component vector of float)
+0:7      'a3' (temp 4-component vector of float)
+0:7      'a4' (temp 4-component vector of float)
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        add (temp 4-component vector of float)
+0:8          add (temp 4-component vector of float)
+0:8            'a1' (temp 4-component vector of float)
+0:8            component-wise multiply (temp 4-component vector of float)
+0:8              'a2' (temp 4-component vector of float)
+0:8              'a3' (temp 4-component vector of float)
+0:8          'a4' (temp 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 21
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "a1"
+                              Name 11  "a2"
+                              Name 13  "a3"
+                              Name 17  "a4"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+           9(a1):      8(ptr) Variable Function
+          11(a2):      8(ptr) Variable Function
+          13(a3):      8(ptr) Variable Function
+          17(a4):      8(ptr) Variable Function
+              10:    7(fvec4) Load 9(a1)
+              12:    7(fvec4) Load 11(a2)
+              14:    7(fvec4) Load 13(a3)
+              15:    7(fvec4) FMul 12 14
+              16:    7(fvec4) FAdd 10 15
+              18:    7(fvec4) Load 17(a4)
+              19:    7(fvec4) FAdd 16 18
+                              ReturnValue 19
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
new file mode 100755
index 0000000..fc4ae02
--- /dev/null
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -0,0 +1,103 @@
+hlsl.precedence2.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:7    Function Parameters: 
+0:7      'a1' (temp int)
+0:7      'a2' (temp int)
+0:7      'a3' (temp int)
+0:7      'a4' (temp int)
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        add (temp int)
+0:8          left-shift (temp int)
+0:8            add (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a1' (temp int)
+0:8                'a2' (temp int)
+0:8              'a3' (temp int)
+0:8            'a4' (temp int)
+0:8          left-shift (temp int)
+0:8            'a1' (temp int)
+0:8            add (temp int)
+0:8              'a2' (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a3' (temp int)
+0:8                'a4' (temp int)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:7    Function Parameters: 
+0:7      'a1' (temp int)
+0:7      'a2' (temp int)
+0:7      'a3' (temp int)
+0:7      'a4' (temp int)
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        add (temp int)
+0:8          left-shift (temp int)
+0:8            add (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a1' (temp int)
+0:8                'a2' (temp int)
+0:8              'a3' (temp int)
+0:8            'a4' (temp int)
+0:8          left-shift (temp int)
+0:8            'a1' (temp int)
+0:8            add (temp int)
+0:8              'a2' (temp int)
+0:8              component-wise multiply (temp int)
+0:8                'a3' (temp int)
+0:8                'a4' (temp int)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 28
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 8  "a1"
+                              Name 10  "a2"
+                              Name 13  "a3"
+                              Name 16  "a4"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+           8(a1):      7(ptr) Variable Function
+          10(a2):      7(ptr) Variable Function
+          13(a3):      7(ptr) Variable Function
+          16(a4):      7(ptr) Variable Function
+               9:      6(int) Load 8(a1)
+              11:      6(int) Load 10(a2)
+              12:      6(int) IMul 9 11
+              14:      6(int) Load 13(a3)
+              15:      6(int) IAdd 12 14
+              17:      6(int) Load 16(a4)
+              18:      6(int) ShiftLeftLogical 15 17
+              19:      6(int) Load 8(a1)
+              20:      6(int) Load 10(a2)
+              21:      6(int) Load 13(a3)
+              22:      6(int) Load 16(a4)
+              23:      6(int) IMul 21 22
+              24:      6(int) IAdd 20 23
+              25:      6(int) ShiftLeftLogical 19 24
+              26:      6(int) IAdd 18 25
+                              ReturnValue 26
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
new file mode 100755
index 0000000..7d4f626
--- /dev/null
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -0,0 +1,53 @@
+hlsl.sin.frag
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (temp 4-component vector of float)
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        sine (global 4-component vector of float)
+0:3          'input' (temp 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (temp 4-component vector of float)
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        sine (global 4-component vector of float)
+0:3          'input' (temp 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 13
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 100
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "input"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+        9(input):      8(ptr) Variable Function
+              10:    7(fvec4) Load 9(input)
+              11:    7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 10
+                              ReturnValue 11
+                              FunctionEnd
diff --git a/Test/hlsl.assoc.frag b/Test/hlsl.assoc.frag
new file mode 100644
index 0000000..8ce1050
--- /dev/null
+++ b/Test/hlsl.assoc.frag
@@ -0,0 +1,11 @@
+float4 PixelShaderFunction(
+    float4 a1,
+    float4 a2,
+    float4 a3,
+    float4 a4,
+    float4 a5
+    ) : COLOR0
+{
+    a1 = a2 = a3 = a4 = a5;
+    return a1 + a2 + a3 + a4 + a5;
+}
diff --git a/Test/hlsl.float4.frag b/Test/hlsl.float4.frag
new file mode 100644
index 0000000..8ed4eab
--- /dev/null
+++ b/Test/hlsl.float4.frag
@@ -0,0 +1,6 @@
+float4 AmbientColor = float4(1, 0.5, 0, 1);
+
+float4 ShaderFunction(float4 input) : COLOR0
+{
+    return input * AmbientColor;
+}
diff --git a/Test/hlsl.max.frag b/Test/hlsl.max.frag
new file mode 100644
index 0000000..6d1ea0b
--- /dev/null
+++ b/Test/hlsl.max.frag
@@ -0,0 +1,4 @@
+float4 PixelShaderFunction(float4 input1, float4 input2) : COLOR0
+{
+    return max(input1, input2);
+}
diff --git a/Test/hlsl.precedence.frag b/Test/hlsl.precedence.frag
new file mode 100644
index 0000000..eae0435
--- /dev/null
+++ b/Test/hlsl.precedence.frag
@@ -0,0 +1,9 @@
+float4 PixelShaderFunction(
+    float4 a1,
+    float4 a2,
+    float4 a3,
+    float4 a4
+    ) : COLOR0
+{
+    return a1 + a2 * a3 + a4;
+}
diff --git a/Test/hlsl.precedence2.frag b/Test/hlsl.precedence2.frag
new file mode 100644
index 0000000..0d3f583
--- /dev/null
+++ b/Test/hlsl.precedence2.frag
@@ -0,0 +1,9 @@
+int PixelShaderFunction(
+    int a1,
+    int a2,
+    int a3,
+    int a4
+    ) : COLOR0
+{
+    return (a1 * a2 + a3 << a4) + (a1 << a2 + a3 * a4);
+}
diff --git a/Test/hlsl.sin.frag b/Test/hlsl.sin.frag
new file mode 100644
index 0000000..edf087d
--- /dev/null
+++ b/Test/hlsl.sin.frag
@@ -0,0 +1,4 @@
+float4 PixelShaderFunction(float4 input) : COLOR0
+{
+    return sin(input);
+}