Implement GL_EXT_shader_16bit_storage and GL_EXT_shader_8bit_storage extensions.
authorJohn Kessenich <cepheus@frii.com>
Tue, 3 Jul 2018 19:19:51 +0000 (13:19 -0600)
committerJohn Kessenich <cepheus@frii.com>
Tue, 3 Jul 2018 19:51:31 +0000 (13:51 -0600)
These introduce limited support for 8/16-bit types such that they can only be accessed in buffer memory and converted to/from 32-bit types.

Contributed from Khronos-internal work.

43 files changed:
SPIRV/GLSL.ext.KHR.h [changed mode: 0644->0755]
SPIRV/GlslangToSpv.cpp
SPIRV/doc.cpp
SPIRV/spirv.hpp [changed mode: 0644->0755]
Test/baseResults/120.frag.out
Test/baseResults/spv.16bitstorage-int.frag.out [new file with mode: 0755]
Test/baseResults/spv.16bitstorage-uint.frag.out [new file with mode: 0755]
Test/baseResults/spv.16bitstorage.frag.out [new file with mode: 0755]
Test/baseResults/spv.16bitstorage_Error-int.frag.out [new file with mode: 0755]
Test/baseResults/spv.16bitstorage_Error-uint.frag.out [new file with mode: 0755]
Test/baseResults/spv.16bitstorage_Error.frag.out [new file with mode: 0755]
Test/baseResults/spv.8bitstorage-int.frag.out [new file with mode: 0755]
Test/baseResults/spv.8bitstorage-uint.frag.out [new file with mode: 0755]
Test/baseResults/spv.8bitstorage_Error-int.frag.out [new file with mode: 0755]
Test/baseResults/spv.8bitstorage_Error-uint.frag.out [new file with mode: 0755]
Test/baseResults/spv.float32.frag.out
Test/baseResults/spv.float64.frag.out
Test/baseResults/spv.int8.frag.out
Test/runtimeArray.vert [changed mode: 0644->0755]
Test/spv.16bitstorage-int.frag [new file with mode: 0755]
Test/spv.16bitstorage-uint.frag [new file with mode: 0755]
Test/spv.16bitstorage.frag [new file with mode: 0755]
Test/spv.16bitstorage_Error-int.frag [new file with mode: 0755]
Test/spv.16bitstorage_Error-uint.frag [new file with mode: 0755]
Test/spv.16bitstorage_Error.frag [new file with mode: 0755]
Test/spv.8bitstorage-int.frag [new file with mode: 0755]
Test/spv.8bitstorage-uint.frag [new file with mode: 0755]
Test/spv.8bitstorage_Error-int.frag [new file with mode: 0755]
Test/spv.8bitstorage_Error-uint.frag [new file with mode: 0755]
glslang/Include/Types.h [changed mode: 0644->0755]
glslang/Include/revision.h
glslang/MachineIndependent/Intermediate.cpp [changed mode: 0644->0755]
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/ParseHelper.h [changed mode: 0644->0755]
glslang/MachineIndependent/Scan.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h
glslang/MachineIndependent/glslang.y [changed mode: 0644->0755]
glslang/MachineIndependent/glslang_tab.cpp [changed mode: 0644->0755]
glslang/MachineIndependent/parseVersions.h
glslang/Public/ShaderLang.h [changed mode: 0644->0755]
gtests/Spv.FromFile.cpp
known_good_khr.json [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index d8ea9b6..ec0c06d
@@ -36,6 +36,7 @@ static const char* const E_SPV_KHR_device_group                 = "SPV_KHR_devic
 static const char* const E_SPV_KHR_multiview                    = "SPV_KHR_multiview";
 static const char* const E_SPV_KHR_shader_draw_parameters       = "SPV_KHR_shader_draw_parameters";
 static const char* const E_SPV_KHR_16bit_storage                = "SPV_KHR_16bit_storage";
+static const char* const E_SPV_KHR_8bit_storage                 = "SPV_KHR_8bit_storage";
 static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class";
 static const char* const E_SPV_KHR_post_depth_coverage          = "SPV_KHR_post_depth_coverage";
 
index ec1b530..d5fb1ac 100755 (executable)
@@ -2507,6 +2507,20 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
         }
     }
 
+    const bool contains8BitType = node->getType().containsBasicType(glslang::EbtInt8)   ||
+                                  node->getType().containsBasicType(glslang::EbtUint8);
+    if (contains8BitType) {
+        if (storageClass == spv::StorageClassPushConstant) {
+            builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+            builder.addCapability(spv::CapabilityStoragePushConstant8);
+        } else if (storageClass == spv::StorageClassUniform) {
+            builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+            builder.addCapability(spv::CapabilityUniformAndStorageBuffer8BitAccess);
+            if (node->getType().getQualifier().storage == glslang::EvqBuffer)
+                builder.addCapability(spv::CapabilityStorageBuffer8BitAccess);
+        }
+    }
+
     const char* name = node->getName().c_str();
     if (glslang::IsAnonymous(name))
         name = "";
index a905968..ae32efe 100755 (executable)
@@ -790,6 +790,10 @@ const char* CapabilityString(int info)
     case CapabilityStoragePushConstant16:       return "StoragePushConstant16";
     case CapabilityStorageInputOutput16:        return "StorageInputOutput16";
 
+    case CapabilityStorageBuffer8BitAccess:             return "CapabilityStorageBuffer8BitAccess";
+    case CapabilityUniformAndStorageBuffer8BitAccess:   return "CapabilityUniformAndStorageBuffer8BitAccess";
+    case CapabilityStoragePushConstant8:                return "CapabilityStoragePushConstant8";
+
     case CapabilityDeviceGroup: return "DeviceGroup";
     case CapabilityMultiView:   return "MultiView";
 
old mode 100644 (file)
new mode 100755 (executable)
index e21762d..f16c296
@@ -679,6 +679,9 @@ enum Capability {
     CapabilityVariablePointers = 4442,
     CapabilityAtomicStorageOps = 4445,
     CapabilitySampleMaskPostDepthCoverage = 4447,
+    CapabilityStorageBuffer8BitAccess = 4448,
+    CapabilityUniformAndStorageBuffer8BitAccess = 4449,
+    CapabilityStoragePushConstant8 = 4450,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
     CapabilityFragmentMaskAMD = 5010,
index e63c001..025cb68 100644 (file)
@@ -56,9 +56,8 @@ ERROR: 0:248: 'explicit types' : required extension not requested: Possible exte
 GL_AMD_gpu_shader_half_float
 GL_KHX_shader_explicit_arithmetic_types
 GL_KHX_shader_explicit_arithmetic_types_float16
-ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none
 ERROR: 0:248: '' :  syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
-ERROR: 56 compilation errors.  No code generated.
+ERROR: 55 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
new file mode 100755 (executable)
index 0000000..9de223c
--- /dev/null
@@ -0,0 +1,336 @@
+spv.16bitstorage-int.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 171
+
+                              Capability Shader
+                              Capability Int16
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageUniform16
+                              Extension  "SPV_AMD_gpu_shader_int16"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "x"
+                              MemberName 12(S) 1  "y"
+                              MemberName 12(S) 2  "z"
+                              Name 17  "B2"
+                              MemberName 17(B2) 0  "o"
+                              MemberName 17(B2) 1  "p"
+                              MemberName 17(B2) 2  "q"
+                              MemberName 17(B2) 3  "r"
+                              MemberName 17(B2) 4  "u"
+                              MemberName 17(B2) 5  "v"
+                              MemberName 17(B2) 6  "x"
+                              MemberName 17(B2) 7  "w"
+                              Name 19  "b2"
+                              Name 23  "S"
+                              MemberName 23(S) 0  "x"
+                              MemberName 23(S) 1  "y"
+                              MemberName 23(S) 2  "z"
+                              Name 25  "B1"
+                              MemberName 25(B1) 0  "a"
+                              MemberName 25(B1) 1  "b"
+                              MemberName 25(B1) 2  "c"
+                              MemberName 25(B1) 3  "d"
+                              MemberName 25(B1) 4  "g"
+                              MemberName 25(B1) 5  "h"
+                              MemberName 25(B1) 6  "j"
+                              Name 27  "b1"
+                              Name 45  "S"
+                              MemberName 45(S) 0  "x"
+                              MemberName 45(S) 1  "y"
+                              MemberName 45(S) 2  "z"
+                              Name 49  "B5"
+                              MemberName 49(B5) 0  "o"
+                              MemberName 49(B5) 1  "p"
+                              MemberName 49(B5) 2  "q"
+                              MemberName 49(B5) 3  "r"
+                              MemberName 49(B5) 4  "u"
+                              MemberName 49(B5) 5  "v"
+                              MemberName 49(B5) 6  "x"
+                              MemberName 49(B5) 7  "w"
+                              Name 51  "b5"
+                              Name 69  "x0"
+                              Name 75  "x1"
+                              Name 88  "S2"
+                              MemberName 88(S2) 0  "x"
+                              MemberName 88(S2) 1  "y"
+                              MemberName 88(S2) 2  "z"
+                              Name 89  "S3"
+                              MemberName 89(S3) 0  "x"
+                              Name 90  "B4"
+                              MemberName 90(B4) 0  "x"
+                              MemberName 90(B4) 1  "y"
+                              Name 92  "b4"
+                              Name 93  "S2"
+                              MemberName 93(S2) 0  "x"
+                              MemberName 93(S2) 1  "y"
+                              MemberName 93(S2) 2  "z"
+                              Name 94  "B3"
+                              MemberName 94(B3) 0  "x"
+                              Name 96  "b3"
+                              Name 113  "v3"
+                              Name 135  "u3"
+                              Decorate 11 ArrayStride 2
+                              MemberDecorate 12(S) 0 Offset 0
+                              MemberDecorate 12(S) 1 Offset 4
+                              MemberDecorate 12(S) 2 Offset 8
+                              Decorate 13 ArrayStride 16
+                              Decorate 15 ArrayStride 4
+                              Decorate 16 ArrayStride 2
+                              MemberDecorate 17(B2) 0 Offset 0
+                              MemberDecorate 17(B2) 1 Offset 4
+                              MemberDecorate 17(B2) 2 Offset 8
+                              MemberDecorate 17(B2) 3 Offset 14
+                              MemberDecorate 17(B2) 4 Offset 24
+                              MemberDecorate 17(B2) 5 Offset 40
+                              MemberDecorate 17(B2) 6 Offset 72
+                              MemberDecorate 17(B2) 7 Offset 472
+                              Decorate 17(B2) BufferBlock
+                              Decorate 19(b2) DescriptorSet 0
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23(S) 0 Offset 0
+                              MemberDecorate 23(S) 1 Offset 4
+                              MemberDecorate 23(S) 2 Offset 8
+                              Decorate 24 ArrayStride 16
+                              MemberDecorate 25(B1) 0 Offset 0
+                              MemberDecorate 25(B1) 1 Offset 4
+                              MemberDecorate 25(B1) 2 Offset 8
+                              MemberDecorate 25(B1) 3 Offset 16
+                              MemberDecorate 25(B1) 4 Offset 48
+                              MemberDecorate 25(B1) 5 Offset 64
+                              MemberDecorate 25(B1) 6 Offset 96
+                              Decorate 25(B1) Block
+                              Decorate 27(b1) DescriptorSet 0
+                              Decorate 44 ArrayStride 16
+                              MemberDecorate 45(S) 0 Offset 0
+                              MemberDecorate 45(S) 1 Offset 4
+                              MemberDecorate 45(S) 2 Offset 8
+                              Decorate 46 ArrayStride 16
+                              Decorate 47 ArrayStride 16
+                              Decorate 48 ArrayStride 16
+                              MemberDecorate 49(B5) 0 Offset 0
+                              MemberDecorate 49(B5) 1 Offset 4
+                              MemberDecorate 49(B5) 2 Offset 8
+                              MemberDecorate 49(B5) 3 Offset 16
+                              MemberDecorate 49(B5) 4 Offset 48
+                              MemberDecorate 49(B5) 5 Offset 64
+                              MemberDecorate 49(B5) 6 Offset 96
+                              MemberDecorate 49(B5) 7 Offset 1696
+                              Decorate 49(B5) Block
+                              Decorate 51(b5) DescriptorSet 0
+                              MemberDecorate 88(S2) 0 ColMajor
+                              MemberDecorate 88(S2) 0 Offset 0
+                              MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 1 Offset 64
+                              MemberDecorate 88(S2) 2 Offset 68
+                              MemberDecorate 89(S3) 0 Offset 0
+                              MemberDecorate 90(B4) 0 Offset 0
+                              MemberDecorate 90(B4) 1 Offset 80
+                              Decorate 90(B4) BufferBlock
+                              Decorate 92(b4) DescriptorSet 0
+                              MemberDecorate 93(S2) 0 RowMajor
+                              MemberDecorate 93(S2) 0 Offset 0
+                              MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 1 Offset 64
+                              MemberDecorate 93(S2) 2 Offset 68
+                              MemberDecorate 94(B3) 0 Offset 0
+                              Decorate 94(B3) BufferBlock
+                              Decorate 96(b3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 16 1
+               7:             TypeVector 6(int16_t) 2
+               8:             TypeVector 6(int16_t) 3
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(int16_t) 10
+           12(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              13:             TypeArray 12(S) 10
+              14:      9(int) Constant 100
+              15:             TypeArray 7(i16vec2) 14
+              16:             TypeRuntimeArray 6(int16_t)
+          17(B2):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 11 12(S) 13 15 16
+              18:             TypePointer Uniform 17(B2)
+          19(b2):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypeArray 6(int16_t) 10
+           23(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              24:             TypeArray 23(S) 10
+          25(B1):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 22 23(S) 24 20(int)
+              26:             TypePointer Uniform 25(B1)
+          27(b1):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(int16_t)
+              32:     20(int) Constant 1
+              33:     20(int) Constant 2
+              34:             TypePointer Uniform 8(i16vec3)
+              37:             TypeVector 20(int) 3
+              39:             TypeVector 20(int) 2
+              42:             TypePointer Uniform 7(i16vec2)
+              44:             TypeArray 6(int16_t) 10
+           45(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              46:             TypeArray 45(S) 10
+              47:             TypeArray 7(i16vec2) 14
+              48:             TypeArray 6(int16_t) 14
+          49(B5):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 44 45(S) 46 47 48
+              50:             TypePointer Uniform 49(B5)
+          51(b5):     50(ptr) Variable Uniform
+              58:     20(int) Constant 3
+              68:             TypePointer Function 20(int)
+              73:             TypeVector 20(int) 4
+              74:             TypePointer Function 73(ivec4)
+              85:             TypeFloat 32
+              86:             TypeVector 85(float) 4
+              87:             TypeMatrix 86(fvec4) 4
+          88(S2):             TypeStruct 87 6(int16_t) 20(int)
+          89(S3):             TypeStruct 88(S2)
+          90(B4):             TypeStruct 88(S2) 89(S3)
+              91:             TypePointer Uniform 90(B4)
+          92(b4):     91(ptr) Variable Uniform
+          93(S2):             TypeStruct 87 6(int16_t) 20(int)
+          94(B3):             TypeStruct 93(S2)
+              95:             TypePointer Uniform 94(B3)
+          96(b3):     95(ptr) Variable Uniform
+              97:             TypePointer Uniform 87
+             104:      9(int) Constant 0
+             108:     20(int) Constant 5
+             112:             TypePointer Function 37(ivec3)
+             114:     20(int) Constant 7
+             115:     20(int) Constant 6
+             116:             TypePointer Uniform 20(int)
+             166:   39(ivec2) ConstantComposite 32 33
+         4(main):           2 Function None 3
+               5:             Label
+          69(x0):     68(ptr) Variable Function
+          75(x1):     74(ptr) Variable Function
+         113(v3):    112(ptr) Variable Function
+         135(u3):    112(ptr) Variable Function
+              29:     28(ptr) AccessChain 27(b1) 21
+              30:  6(int16_t) Load 29
+              31:     28(ptr) AccessChain 19(b2) 21
+                              Store 31 30
+              35:     34(ptr) AccessChain 19(b2) 33
+              36:  8(i16vec3) Load 35
+              38:   37(ivec3) SConvert 36
+              40:   39(ivec2) VectorShuffle 38 38 0 1
+              41:  7(i16vec2) SConvert 40
+              43:     42(ptr) AccessChain 19(b2) 32
+                              Store 43 41
+              52:     34(ptr) AccessChain 51(b5) 33
+              53:  8(i16vec3) Load 52
+              54:   37(ivec3) SConvert 53
+              55:   39(ivec2) VectorShuffle 54 54 0 1
+              56:  7(i16vec2) SConvert 55
+              57:     42(ptr) AccessChain 19(b2) 32
+                              Store 57 56
+              59:     28(ptr) AccessChain 19(b2) 58 21
+              60:  6(int16_t) Load 59
+              61:     28(ptr) AccessChain 19(b2) 58 21
+                              Store 61 60
+              62:     28(ptr) AccessChain 51(b5) 58 32
+              63:  6(int16_t) Load 62
+              64:     28(ptr) AccessChain 19(b2) 58 32
+                              Store 64 63
+              65:     42(ptr) AccessChain 19(b2) 32
+              66:  7(i16vec2) Load 65
+              67:     42(ptr) AccessChain 19(b2) 32
+                              Store 67 66
+              70:     28(ptr) AccessChain 27(b1) 21
+              71:  6(int16_t) Load 70
+              72:     20(int) SConvert 71
+                              Store 69(x0) 72
+              76:     28(ptr) AccessChain 27(b1) 21
+              77:  6(int16_t) Load 76
+              78:     20(int) SConvert 77
+              79:     42(ptr) AccessChain 19(b2) 32
+              80:  7(i16vec2) Load 79
+              81:   39(ivec2) SConvert 80
+              82:     20(int) CompositeExtract 81 0
+              83:     20(int) CompositeExtract 81 1
+              84:   73(ivec4) CompositeConstruct 78 82 83 32
+                              Store 75(x1) 84
+              98:     97(ptr) AccessChain 96(b3) 21 21
+              99:          87 Load 98
+             100:     97(ptr) AccessChain 92(b4) 21 21
+                              Store 100 99
+             101:     42(ptr) AccessChain 19(b2) 32
+             102:  7(i16vec2) Load 101
+             103:   39(ivec2) SConvert 102
+             105:     20(int) CompositeExtract 103 0
+             106:  6(int16_t) SConvert 105
+             107:     28(ptr) AccessChain 19(b2) 21
+                              Store 107 106
+             109:     42(ptr) AccessChain 19(b2) 108 32 32
+             110:  7(i16vec2) Load 109
+             111:     42(ptr) AccessChain 19(b2) 32
+                              Store 111 110
+             117:    116(ptr) AccessChain 27(b1) 115
+             118:     20(int) Load 117
+             119:     28(ptr) AccessChain 19(b2) 114 118
+             120:  6(int16_t) Load 119
+             121:     20(int) SConvert 120
+             122:    116(ptr) AccessChain 27(b1) 115
+             123:     20(int) Load 122
+             124:     20(int) IAdd 123 32
+             125:     28(ptr) AccessChain 19(b2) 114 124
+             126:  6(int16_t) Load 125
+             127:     20(int) SConvert 126
+             128:    116(ptr) AccessChain 27(b1) 115
+             129:     20(int) Load 128
+             130:     20(int) IAdd 129 33
+             131:     28(ptr) AccessChain 19(b2) 114 130
+             132:  6(int16_t) Load 131
+             133:     20(int) SConvert 132
+             134:   37(ivec3) CompositeConstruct 121 127 133
+                              Store 113(v3) 134
+             136:    116(ptr) AccessChain 27(b1) 115
+             137:     20(int) Load 136
+             138:     28(ptr) AccessChain 51(b5) 114 137
+             139:  6(int16_t) Load 138
+             140:     20(int) SConvert 139
+             141:    116(ptr) AccessChain 27(b1) 115
+             142:     20(int) Load 141
+             143:     20(int) IAdd 142 32
+             144:     28(ptr) AccessChain 51(b5) 114 143
+             145:  6(int16_t) Load 144
+             146:     20(int) SConvert 145
+             147:    116(ptr) AccessChain 27(b1) 115
+             148:     20(int) Load 147
+             149:     20(int) IAdd 148 33
+             150:     28(ptr) AccessChain 51(b5) 114 149
+             151:  6(int16_t) Load 150
+             152:     20(int) SConvert 151
+             153:   37(ivec3) CompositeConstruct 140 146 152
+                              Store 135(u3) 153
+             154:     42(ptr) AccessChain 19(b2) 115 21
+             155:  7(i16vec2) Load 154
+             156:     42(ptr) AccessChain 19(b2) 115 21
+                              Store 156 155
+             157:     42(ptr) AccessChain 51(b5) 115 32
+             158:  7(i16vec2) Load 157
+             159:     42(ptr) AccessChain 19(b2) 115 32
+                              Store 159 158
+             160:     28(ptr) AccessChain 27(b1) 21
+             161:  6(int16_t) Load 160
+             162:     28(ptr) AccessChain 19(b2) 32 104
+                              Store 162 161
+             163:     28(ptr) AccessChain 19(b2) 32 104
+             164:  6(int16_t) Load 163
+             165:     28(ptr) AccessChain 19(b2) 21
+                              Store 165 164
+             167:  7(i16vec2) SConvert 166
+             168:     42(ptr) AccessChain 19(b2) 32
+                              Store 168 167
+             169:  6(int16_t) SConvert 58
+             170:     28(ptr) AccessChain 19(b2) 21
+                              Store 170 169
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
new file mode 100755 (executable)
index 0000000..def7c57
--- /dev/null
@@ -0,0 +1,338 @@
+spv.16bitstorage-uint.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 173
+
+                              Capability Shader
+                              Capability Int16
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageUniform16
+                              Extension  "SPV_AMD_gpu_shader_int16"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "x"
+                              MemberName 12(S) 1  "y"
+                              MemberName 12(S) 2  "z"
+                              Name 17  "B2"
+                              MemberName 17(B2) 0  "o"
+                              MemberName 17(B2) 1  "p"
+                              MemberName 17(B2) 2  "q"
+                              MemberName 17(B2) 3  "r"
+                              MemberName 17(B2) 4  "u"
+                              MemberName 17(B2) 5  "v"
+                              MemberName 17(B2) 6  "x"
+                              MemberName 17(B2) 7  "w"
+                              Name 19  "b2"
+                              Name 23  "S"
+                              MemberName 23(S) 0  "x"
+                              MemberName 23(S) 1  "y"
+                              MemberName 23(S) 2  "z"
+                              Name 25  "B1"
+                              MemberName 25(B1) 0  "a"
+                              MemberName 25(B1) 1  "b"
+                              MemberName 25(B1) 2  "c"
+                              MemberName 25(B1) 3  "d"
+                              MemberName 25(B1) 4  "g"
+                              MemberName 25(B1) 5  "h"
+                              MemberName 25(B1) 6  "j"
+                              Name 27  "b1"
+                              Name 45  "S"
+                              MemberName 45(S) 0  "x"
+                              MemberName 45(S) 1  "y"
+                              MemberName 45(S) 2  "z"
+                              Name 49  "B5"
+                              MemberName 49(B5) 0  "o"
+                              MemberName 49(B5) 1  "p"
+                              MemberName 49(B5) 2  "q"
+                              MemberName 49(B5) 3  "r"
+                              MemberName 49(B5) 4  "u"
+                              MemberName 49(B5) 5  "v"
+                              MemberName 49(B5) 6  "x"
+                              MemberName 49(B5) 7  "w"
+                              Name 51  "b5"
+                              Name 69  "x0"
+                              Name 75  "x1"
+                              Name 89  "S2"
+                              MemberName 89(S2) 0  "x"
+                              MemberName 89(S2) 1  "y"
+                              MemberName 89(S2) 2  "z"
+                              Name 90  "S3"
+                              MemberName 90(S3) 0  "x"
+                              Name 91  "B4"
+                              MemberName 91(B4) 0  "x"
+                              MemberName 91(B4) 1  "y"
+                              Name 93  "b4"
+                              Name 94  "S2"
+                              MemberName 94(S2) 0  "x"
+                              MemberName 94(S2) 1  "y"
+                              MemberName 94(S2) 2  "z"
+                              Name 95  "B3"
+                              MemberName 95(B3) 0  "x"
+                              Name 97  "b3"
+                              Name 114  "v3"
+                              Name 136  "u3"
+                              Decorate 11 ArrayStride 2
+                              MemberDecorate 12(S) 0 Offset 0
+                              MemberDecorate 12(S) 1 Offset 4
+                              MemberDecorate 12(S) 2 Offset 8
+                              Decorate 13 ArrayStride 16
+                              Decorate 15 ArrayStride 4
+                              Decorate 16 ArrayStride 2
+                              MemberDecorate 17(B2) 0 Offset 0
+                              MemberDecorate 17(B2) 1 Offset 4
+                              MemberDecorate 17(B2) 2 Offset 8
+                              MemberDecorate 17(B2) 3 Offset 14
+                              MemberDecorate 17(B2) 4 Offset 24
+                              MemberDecorate 17(B2) 5 Offset 40
+                              MemberDecorate 17(B2) 6 Offset 72
+                              MemberDecorate 17(B2) 7 Offset 472
+                              Decorate 17(B2) BufferBlock
+                              Decorate 19(b2) DescriptorSet 0
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23(S) 0 Offset 0
+                              MemberDecorate 23(S) 1 Offset 4
+                              MemberDecorate 23(S) 2 Offset 8
+                              Decorate 24 ArrayStride 16
+                              MemberDecorate 25(B1) 0 Offset 0
+                              MemberDecorate 25(B1) 1 Offset 4
+                              MemberDecorate 25(B1) 2 Offset 8
+                              MemberDecorate 25(B1) 3 Offset 16
+                              MemberDecorate 25(B1) 4 Offset 48
+                              MemberDecorate 25(B1) 5 Offset 64
+                              MemberDecorate 25(B1) 6 Offset 96
+                              Decorate 25(B1) Block
+                              Decorate 27(b1) DescriptorSet 0
+                              Decorate 44 ArrayStride 16
+                              MemberDecorate 45(S) 0 Offset 0
+                              MemberDecorate 45(S) 1 Offset 4
+                              MemberDecorate 45(S) 2 Offset 8
+                              Decorate 46 ArrayStride 16
+                              Decorate 47 ArrayStride 16
+                              Decorate 48 ArrayStride 16
+                              MemberDecorate 49(B5) 0 Offset 0
+                              MemberDecorate 49(B5) 1 Offset 4
+                              MemberDecorate 49(B5) 2 Offset 8
+                              MemberDecorate 49(B5) 3 Offset 16
+                              MemberDecorate 49(B5) 4 Offset 48
+                              MemberDecorate 49(B5) 5 Offset 64
+                              MemberDecorate 49(B5) 6 Offset 96
+                              MemberDecorate 49(B5) 7 Offset 1696
+                              Decorate 49(B5) Block
+                              Decorate 51(b5) DescriptorSet 0
+                              MemberDecorate 89(S2) 0 ColMajor
+                              MemberDecorate 89(S2) 0 Offset 0
+                              MemberDecorate 89(S2) 0 MatrixStride 16
+                              MemberDecorate 89(S2) 1 Offset 64
+                              MemberDecorate 89(S2) 2 Offset 68
+                              MemberDecorate 90(S3) 0 Offset 0
+                              MemberDecorate 91(B4) 0 Offset 0
+                              MemberDecorate 91(B4) 1 Offset 80
+                              Decorate 91(B4) BufferBlock
+                              Decorate 93(b4) DescriptorSet 0
+                              MemberDecorate 94(S2) 0 RowMajor
+                              MemberDecorate 94(S2) 0 Offset 0
+                              MemberDecorate 94(S2) 0 MatrixStride 16
+                              MemberDecorate 94(S2) 1 Offset 64
+                              MemberDecorate 94(S2) 2 Offset 68
+                              MemberDecorate 95(B3) 0 Offset 0
+                              Decorate 95(B3) BufferBlock
+                              Decorate 97(b3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 16 0
+               7:             TypeVector 6(int16_t) 2
+               8:             TypeVector 6(int16_t) 3
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(int16_t) 10
+           12(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              13:             TypeArray 12(S) 10
+              14:      9(int) Constant 100
+              15:             TypeArray 7(i16vec2) 14
+              16:             TypeRuntimeArray 6(int16_t)
+          17(B2):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 11 12(S) 13 15 16
+              18:             TypePointer Uniform 17(B2)
+          19(b2):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypeArray 6(int16_t) 10
+           23(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              24:             TypeArray 23(S) 10
+          25(B1):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 22 23(S) 24 9(int)
+              26:             TypePointer Uniform 25(B1)
+          27(b1):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(int16_t)
+              32:     20(int) Constant 1
+              33:     20(int) Constant 2
+              34:             TypePointer Uniform 8(i16vec3)
+              37:             TypeVector 9(int) 3
+              39:             TypeVector 9(int) 2
+              42:             TypePointer Uniform 7(i16vec2)
+              44:             TypeArray 6(int16_t) 10
+           45(S):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3)
+              46:             TypeArray 45(S) 10
+              47:             TypeArray 7(i16vec2) 14
+              48:             TypeArray 6(int16_t) 14
+          49(B5):             TypeStruct 6(int16_t) 7(i16vec2) 8(i16vec3) 44 45(S) 46 47 48
+              50:             TypePointer Uniform 49(B5)
+          51(b5):     50(ptr) Variable Uniform
+              58:     20(int) Constant 3
+              68:             TypePointer Function 9(int)
+              73:             TypeVector 9(int) 4
+              74:             TypePointer Function 73(ivec4)
+              82:      9(int) Constant 1
+              86:             TypeFloat 32
+              87:             TypeVector 86(float) 4
+              88:             TypeMatrix 87(fvec4) 4
+          89(S2):             TypeStruct 88 6(int16_t) 9(int)
+          90(S3):             TypeStruct 89(S2)
+          91(B4):             TypeStruct 89(S2) 90(S3)
+              92:             TypePointer Uniform 91(B4)
+          93(b4):     92(ptr) Variable Uniform
+          94(S2):             TypeStruct 88 6(int16_t) 9(int)
+          95(B3):             TypeStruct 94(S2)
+              96:             TypePointer Uniform 95(B3)
+          97(b3):     96(ptr) Variable Uniform
+              98:             TypePointer Uniform 88
+             105:      9(int) Constant 0
+             109:     20(int) Constant 5
+             113:             TypePointer Function 37(ivec3)
+             115:     20(int) Constant 7
+             116:     20(int) Constant 6
+             117:             TypePointer Uniform 9(int)
+             167:   39(ivec2) ConstantComposite 82 10
+             170:      9(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+          69(x0):     68(ptr) Variable Function
+          75(x1):     74(ptr) Variable Function
+         114(v3):    113(ptr) Variable Function
+         136(u3):    113(ptr) Variable Function
+              29:     28(ptr) AccessChain 27(b1) 21
+              30:  6(int16_t) Load 29
+              31:     28(ptr) AccessChain 19(b2) 21
+                              Store 31 30
+              35:     34(ptr) AccessChain 19(b2) 33
+              36:  8(i16vec3) Load 35
+              38:   37(ivec3) UConvert 36
+              40:   39(ivec2) VectorShuffle 38 38 0 1
+              41:  7(i16vec2) UConvert 40
+              43:     42(ptr) AccessChain 19(b2) 32
+                              Store 43 41
+              52:     34(ptr) AccessChain 51(b5) 33
+              53:  8(i16vec3) Load 52
+              54:   37(ivec3) UConvert 53
+              55:   39(ivec2) VectorShuffle 54 54 0 1
+              56:  7(i16vec2) UConvert 55
+              57:     42(ptr) AccessChain 19(b2) 32
+                              Store 57 56
+              59:     28(ptr) AccessChain 19(b2) 58 21
+              60:  6(int16_t) Load 59
+              61:     28(ptr) AccessChain 19(b2) 58 21
+                              Store 61 60
+              62:     28(ptr) AccessChain 51(b5) 58 32
+              63:  6(int16_t) Load 62
+              64:     28(ptr) AccessChain 19(b2) 58 32
+                              Store 64 63
+              65:     42(ptr) AccessChain 19(b2) 32
+              66:  7(i16vec2) Load 65
+              67:     42(ptr) AccessChain 19(b2) 32
+                              Store 67 66
+              70:     28(ptr) AccessChain 27(b1) 21
+              71:  6(int16_t) Load 70
+              72:      9(int) UConvert 71
+                              Store 69(x0) 72
+              76:     28(ptr) AccessChain 27(b1) 21
+              77:  6(int16_t) Load 76
+              78:      9(int) UConvert 77
+              79:     42(ptr) AccessChain 19(b2) 32
+              80:  7(i16vec2) Load 79
+              81:   39(ivec2) UConvert 80
+              83:      9(int) CompositeExtract 81 0
+              84:      9(int) CompositeExtract 81 1
+              85:   73(ivec4) CompositeConstruct 78 83 84 82
+                              Store 75(x1) 85
+              99:     98(ptr) AccessChain 97(b3) 21 21
+             100:          88 Load 99
+             101:     98(ptr) AccessChain 93(b4) 21 21
+                              Store 101 100
+             102:     42(ptr) AccessChain 19(b2) 32
+             103:  7(i16vec2) Load 102
+             104:   39(ivec2) UConvert 103
+             106:      9(int) CompositeExtract 104 0
+             107:  6(int16_t) UConvert 106
+             108:     28(ptr) AccessChain 19(b2) 21
+                              Store 108 107
+             110:     42(ptr) AccessChain 19(b2) 109 32 32
+             111:  7(i16vec2) Load 110
+             112:     42(ptr) AccessChain 19(b2) 32
+                              Store 112 111
+             118:    117(ptr) AccessChain 27(b1) 116
+             119:      9(int) Load 118
+             120:     28(ptr) AccessChain 19(b2) 115 119
+             121:  6(int16_t) Load 120
+             122:      9(int) UConvert 121
+             123:    117(ptr) AccessChain 27(b1) 116
+             124:      9(int) Load 123
+             125:      9(int) IAdd 124 82
+             126:     28(ptr) AccessChain 19(b2) 115 125
+             127:  6(int16_t) Load 126
+             128:      9(int) UConvert 127
+             129:    117(ptr) AccessChain 27(b1) 116
+             130:      9(int) Load 129
+             131:      9(int) IAdd 130 10
+             132:     28(ptr) AccessChain 19(b2) 115 131
+             133:  6(int16_t) Load 132
+             134:      9(int) UConvert 133
+             135:   37(ivec3) CompositeConstruct 122 128 134
+                              Store 114(v3) 135
+             137:    117(ptr) AccessChain 27(b1) 116
+             138:      9(int) Load 137
+             139:     28(ptr) AccessChain 51(b5) 115 138
+             140:  6(int16_t) Load 139
+             141:      9(int) UConvert 140
+             142:    117(ptr) AccessChain 27(b1) 116
+             143:      9(int) Load 142
+             144:      9(int) IAdd 143 82
+             145:     28(ptr) AccessChain 51(b5) 115 144
+             146:  6(int16_t) Load 145
+             147:      9(int) UConvert 146
+             148:    117(ptr) AccessChain 27(b1) 116
+             149:      9(int) Load 148
+             150:      9(int) IAdd 149 10
+             151:     28(ptr) AccessChain 51(b5) 115 150
+             152:  6(int16_t) Load 151
+             153:      9(int) UConvert 152
+             154:   37(ivec3) CompositeConstruct 141 147 153
+                              Store 136(u3) 154
+             155:     42(ptr) AccessChain 19(b2) 116 21
+             156:  7(i16vec2) Load 155
+             157:     42(ptr) AccessChain 19(b2) 116 21
+                              Store 157 156
+             158:     42(ptr) AccessChain 51(b5) 116 32
+             159:  7(i16vec2) Load 158
+             160:     42(ptr) AccessChain 19(b2) 116 32
+                              Store 160 159
+             161:     28(ptr) AccessChain 27(b1) 21
+             162:  6(int16_t) Load 161
+             163:     28(ptr) AccessChain 19(b2) 32 105
+                              Store 163 162
+             164:     28(ptr) AccessChain 19(b2) 32 105
+             165:  6(int16_t) Load 164
+             166:     28(ptr) AccessChain 19(b2) 21
+                              Store 166 165
+             168:  7(i16vec2) UConvert 167
+             169:     42(ptr) AccessChain 19(b2) 32
+                              Store 169 168
+             171:  6(int16_t) UConvert 170
+             172:     28(ptr) AccessChain 19(b2) 21
+                              Store 172 171
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
new file mode 100755 (executable)
index 0000000..ebf48e9
--- /dev/null
@@ -0,0 +1,338 @@
+spv.16bitstorage.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 173
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageUniform16
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "x"
+                              MemberName 12(S) 1  "y"
+                              MemberName 12(S) 2  "z"
+                              Name 17  "B2"
+                              MemberName 17(B2) 0  "o"
+                              MemberName 17(B2) 1  "p"
+                              MemberName 17(B2) 2  "q"
+                              MemberName 17(B2) 3  "r"
+                              MemberName 17(B2) 4  "u"
+                              MemberName 17(B2) 5  "v"
+                              MemberName 17(B2) 6  "x"
+                              MemberName 17(B2) 7  "w"
+                              Name 19  "b2"
+                              Name 23  "S"
+                              MemberName 23(S) 0  "x"
+                              MemberName 23(S) 1  "y"
+                              MemberName 23(S) 2  "z"
+                              Name 25  "B1"
+                              MemberName 25(B1) 0  "a"
+                              MemberName 25(B1) 1  "b"
+                              MemberName 25(B1) 2  "c"
+                              MemberName 25(B1) 3  "d"
+                              MemberName 25(B1) 4  "g"
+                              MemberName 25(B1) 5  "h"
+                              MemberName 25(B1) 6  "j"
+                              Name 27  "b1"
+                              Name 46  "S"
+                              MemberName 46(S) 0  "x"
+                              MemberName 46(S) 1  "y"
+                              MemberName 46(S) 2  "z"
+                              Name 50  "B5"
+                              MemberName 50(B5) 0  "o"
+                              MemberName 50(B5) 1  "p"
+                              MemberName 50(B5) 2  "q"
+                              MemberName 50(B5) 3  "r"
+                              MemberName 50(B5) 4  "u"
+                              MemberName 50(B5) 5  "v"
+                              MemberName 50(B5) 6  "x"
+                              MemberName 50(B5) 7  "w"
+                              Name 52  "b5"
+                              Name 70  "x0"
+                              Name 76  "x1"
+                              Name 88  "S2"
+                              MemberName 88(S2) 0  "x"
+                              MemberName 88(S2) 1  "y"
+                              MemberName 88(S2) 2  "z"
+                              Name 89  "S3"
+                              MemberName 89(S3) 0  "x"
+                              Name 90  "B4"
+                              MemberName 90(B4) 0  "x"
+                              MemberName 90(B4) 1  "y"
+                              Name 92  "b4"
+                              Name 93  "S2"
+                              MemberName 93(S2) 0  "x"
+                              MemberName 93(S2) 1  "y"
+                              MemberName 93(S2) 2  "z"
+                              Name 94  "B3"
+                              MemberName 94(B3) 0  "x"
+                              Name 96  "b3"
+                              Name 113  "v3"
+                              Name 135  "u3"
+                              Decorate 11 ArrayStride 2
+                              MemberDecorate 12(S) 0 Offset 0
+                              MemberDecorate 12(S) 1 Offset 4
+                              MemberDecorate 12(S) 2 Offset 8
+                              Decorate 13 ArrayStride 16
+                              Decorate 15 ArrayStride 4
+                              Decorate 16 ArrayStride 2
+                              MemberDecorate 17(B2) 0 Offset 0
+                              MemberDecorate 17(B2) 1 Offset 4
+                              MemberDecorate 17(B2) 2 Offset 8
+                              MemberDecorate 17(B2) 3 Offset 14
+                              MemberDecorate 17(B2) 4 Offset 24
+                              MemberDecorate 17(B2) 5 Offset 40
+                              MemberDecorate 17(B2) 6 Offset 72
+                              MemberDecorate 17(B2) 7 Offset 472
+                              Decorate 17(B2) BufferBlock
+                              Decorate 19(b2) DescriptorSet 0
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23(S) 0 Offset 0
+                              MemberDecorate 23(S) 1 Offset 4
+                              MemberDecorate 23(S) 2 Offset 8
+                              Decorate 24 ArrayStride 16
+                              MemberDecorate 25(B1) 0 Offset 0
+                              MemberDecorate 25(B1) 1 Offset 4
+                              MemberDecorate 25(B1) 2 Offset 8
+                              MemberDecorate 25(B1) 3 Offset 16
+                              MemberDecorate 25(B1) 4 Offset 48
+                              MemberDecorate 25(B1) 5 Offset 64
+                              MemberDecorate 25(B1) 6 Offset 96
+                              Decorate 25(B1) Block
+                              Decorate 27(b1) DescriptorSet 0
+                              Decorate 45 ArrayStride 16
+                              MemberDecorate 46(S) 0 Offset 0
+                              MemberDecorate 46(S) 1 Offset 4
+                              MemberDecorate 46(S) 2 Offset 8
+                              Decorate 47 ArrayStride 16
+                              Decorate 48 ArrayStride 16
+                              Decorate 49 ArrayStride 16
+                              MemberDecorate 50(B5) 0 Offset 0
+                              MemberDecorate 50(B5) 1 Offset 4
+                              MemberDecorate 50(B5) 2 Offset 8
+                              MemberDecorate 50(B5) 3 Offset 16
+                              MemberDecorate 50(B5) 4 Offset 48
+                              MemberDecorate 50(B5) 5 Offset 64
+                              MemberDecorate 50(B5) 6 Offset 96
+                              MemberDecorate 50(B5) 7 Offset 1696
+                              Decorate 50(B5) Block
+                              Decorate 52(b5) DescriptorSet 0
+                              MemberDecorate 88(S2) 0 ColMajor
+                              MemberDecorate 88(S2) 0 Offset 0
+                              MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 1 Offset 64
+                              MemberDecorate 88(S2) 2 Offset 68
+                              MemberDecorate 89(S3) 0 Offset 0
+                              MemberDecorate 90(B4) 0 Offset 0
+                              MemberDecorate 90(B4) 1 Offset 80
+                              Decorate 90(B4) BufferBlock
+                              Decorate 92(b4) DescriptorSet 0
+                              MemberDecorate 93(S2) 0 RowMajor
+                              MemberDecorate 93(S2) 0 Offset 0
+                              MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 1 Offset 64
+                              MemberDecorate 93(S2) 2 Offset 68
+                              MemberDecorate 94(B3) 0 Offset 0
+                              Decorate 94(B3) BufferBlock
+                              Decorate 96(b3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeVector 6(float16_t) 2
+               8:             TypeVector 6(float16_t) 3
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(float16_t) 10
+           12(S):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3)
+              13:             TypeArray 12(S) 10
+              14:      9(int) Constant 100
+              15:             TypeArray 7(f16vec2) 14
+              16:             TypeRuntimeArray 6(float16_t)
+          17(B2):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3) 11 12(S) 13 15 16
+              18:             TypePointer Uniform 17(B2)
+          19(b2):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypeArray 6(float16_t) 10
+           23(S):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3)
+              24:             TypeArray 23(S) 10
+          25(B1):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3) 22 23(S) 24 20(int)
+              26:             TypePointer Uniform 25(B1)
+          27(b1):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(float16_t)
+              32:     20(int) Constant 1
+              33:     20(int) Constant 2
+              34:             TypePointer Uniform 8(f16vec3)
+              37:             TypeFloat 32
+              38:             TypeVector 37(float) 3
+              40:             TypeVector 37(float) 2
+              43:             TypePointer Uniform 7(f16vec2)
+              45:             TypeArray 6(float16_t) 10
+           46(S):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3)
+              47:             TypeArray 46(S) 10
+              48:             TypeArray 7(f16vec2) 14
+              49:             TypeArray 6(float16_t) 14
+          50(B5):             TypeStruct 6(float16_t) 7(f16vec2) 8(f16vec3) 45 46(S) 47 48 49
+              51:             TypePointer Uniform 50(B5)
+          52(b5):     51(ptr) Variable Uniform
+              59:     20(int) Constant 3
+              69:             TypePointer Function 37(float)
+              74:             TypeVector 37(float) 4
+              75:             TypePointer Function 74(fvec4)
+              83:   37(float) Constant 1065353216
+              87:             TypeMatrix 74(fvec4) 4
+          88(S2):             TypeStruct 87 6(float16_t) 37(float)
+          89(S3):             TypeStruct 88(S2)
+          90(B4):             TypeStruct 88(S2) 89(S3)
+              91:             TypePointer Uniform 90(B4)
+          92(b4):     91(ptr) Variable Uniform
+          93(S2):             TypeStruct 87 6(float16_t) 37(float)
+          94(B3):             TypeStruct 93(S2)
+              95:             TypePointer Uniform 94(B3)
+          96(b3):     95(ptr) Variable Uniform
+              97:             TypePointer Uniform 87
+             104:      9(int) Constant 0
+             108:     20(int) Constant 5
+             112:             TypePointer Function 38(fvec3)
+             114:     20(int) Constant 7
+             115:     20(int) Constant 6
+             116:             TypePointer Uniform 20(int)
+             166:   37(float) Constant 1073741824
+             167:   40(fvec2) ConstantComposite 83 166
+             170:   37(float) Constant 1077936128
+         4(main):           2 Function None 3
+               5:             Label
+          70(x0):     69(ptr) Variable Function
+          76(x1):     75(ptr) Variable Function
+         113(v3):    112(ptr) Variable Function
+         135(u3):    112(ptr) Variable Function
+              29:     28(ptr) AccessChain 27(b1) 21
+              30:6(float16_t) Load 29
+              31:     28(ptr) AccessChain 19(b2) 21
+                              Store 31 30
+              35:     34(ptr) AccessChain 19(b2) 33
+              36:  8(f16vec3) Load 35
+              39:   38(fvec3) FConvert 36
+              41:   40(fvec2) VectorShuffle 39 39 0 1
+              42:  7(f16vec2) FConvert 41
+              44:     43(ptr) AccessChain 19(b2) 32
+                              Store 44 42
+              53:     34(ptr) AccessChain 52(b5) 33
+              54:  8(f16vec3) Load 53
+              55:   38(fvec3) FConvert 54
+              56:   40(fvec2) VectorShuffle 55 55 0 1
+              57:  7(f16vec2) FConvert 56
+              58:     43(ptr) AccessChain 19(b2) 32
+                              Store 58 57
+              60:     28(ptr) AccessChain 19(b2) 59 21
+              61:6(float16_t) Load 60
+              62:     28(ptr) AccessChain 19(b2) 59 21
+                              Store 62 61
+              63:     28(ptr) AccessChain 52(b5) 59 32
+              64:6(float16_t) Load 63
+              65:     28(ptr) AccessChain 19(b2) 59 32
+                              Store 65 64
+              66:     43(ptr) AccessChain 19(b2) 32
+              67:  7(f16vec2) Load 66
+              68:     43(ptr) AccessChain 19(b2) 32
+                              Store 68 67
+              71:     28(ptr) AccessChain 27(b1) 21
+              72:6(float16_t) Load 71
+              73:   37(float) FConvert 72
+                              Store 70(x0) 73
+              77:     28(ptr) AccessChain 27(b1) 21
+              78:6(float16_t) Load 77
+              79:   37(float) FConvert 78
+              80:     43(ptr) AccessChain 19(b2) 32
+              81:  7(f16vec2) Load 80
+              82:   40(fvec2) FConvert 81
+              84:   37(float) CompositeExtract 82 0
+              85:   37(float) CompositeExtract 82 1
+              86:   74(fvec4) CompositeConstruct 79 84 85 83
+                              Store 76(x1) 86
+              98:     97(ptr) AccessChain 96(b3) 21 21
+              99:          87 Load 98
+             100:     97(ptr) AccessChain 92(b4) 21 21
+                              Store 100 99
+             101:     43(ptr) AccessChain 19(b2) 32
+             102:  7(f16vec2) Load 101
+             103:   40(fvec2) FConvert 102
+             105:   37(float) CompositeExtract 103 0
+             106:6(float16_t) FConvert 105
+             107:     28(ptr) AccessChain 19(b2) 21
+                              Store 107 106
+             109:     43(ptr) AccessChain 19(b2) 108 32 32
+             110:  7(f16vec2) Load 109
+             111:     43(ptr) AccessChain 19(b2) 32
+                              Store 111 110
+             117:    116(ptr) AccessChain 27(b1) 115
+             118:     20(int) Load 117
+             119:     28(ptr) AccessChain 19(b2) 114 118
+             120:6(float16_t) Load 119
+             121:   37(float) FConvert 120
+             122:    116(ptr) AccessChain 27(b1) 115
+             123:     20(int) Load 122
+             124:     20(int) IAdd 123 32
+             125:     28(ptr) AccessChain 19(b2) 114 124
+             126:6(float16_t) Load 125
+             127:   37(float) FConvert 126
+             128:    116(ptr) AccessChain 27(b1) 115
+             129:     20(int) Load 128
+             130:     20(int) IAdd 129 33
+             131:     28(ptr) AccessChain 19(b2) 114 130
+             132:6(float16_t) Load 131
+             133:   37(float) FConvert 132
+             134:   38(fvec3) CompositeConstruct 121 127 133
+                              Store 113(v3) 134
+             136:    116(ptr) AccessChain 27(b1) 115
+             137:     20(int) Load 136
+             138:     28(ptr) AccessChain 52(b5) 114 137
+             139:6(float16_t) Load 138
+             140:   37(float) FConvert 139
+             141:    116(ptr) AccessChain 27(b1) 115
+             142:     20(int) Load 141
+             143:     20(int) IAdd 142 32
+             144:     28(ptr) AccessChain 52(b5) 114 143
+             145:6(float16_t) Load 144
+             146:   37(float) FConvert 145
+             147:    116(ptr) AccessChain 27(b1) 115
+             148:     20(int) Load 147
+             149:     20(int) IAdd 148 33
+             150:     28(ptr) AccessChain 52(b5) 114 149
+             151:6(float16_t) Load 150
+             152:   37(float) FConvert 151
+             153:   38(fvec3) CompositeConstruct 140 146 152
+                              Store 135(u3) 153
+             154:     43(ptr) AccessChain 19(b2) 115 21
+             155:  7(f16vec2) Load 154
+             156:     43(ptr) AccessChain 19(b2) 115 21
+                              Store 156 155
+             157:     43(ptr) AccessChain 52(b5) 115 32
+             158:  7(f16vec2) Load 157
+             159:     43(ptr) AccessChain 19(b2) 115 32
+                              Store 159 158
+             160:     28(ptr) AccessChain 27(b1) 21
+             161:6(float16_t) Load 160
+             162:     28(ptr) AccessChain 19(b2) 32 104
+                              Store 162 161
+             163:     28(ptr) AccessChain 19(b2) 32 104
+             164:6(float16_t) Load 163
+             165:     28(ptr) AccessChain 19(b2) 21
+                              Store 165 164
+             168:  7(f16vec2) FConvert 167
+             169:     43(ptr) AccessChain 19(b2) 32
+                              Store 169 168
+             171:6(float16_t) FConvert 170
+             172:     28(ptr) AccessChain 19(b2) 21
+                              Store 172 171
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage_Error-int.frag.out b/Test/baseResults/spv.16bitstorage_Error-int.frag.out
new file mode 100755 (executable)
index 0000000..697df3e
--- /dev/null
@@ -0,0 +1,91 @@
+spv.16bitstorage_Error-int.frag
+ERROR: 0:54: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:58: 'can't use with structs containing int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:61: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:74: ''[' does not operate on types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:75: 'can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:77: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:77: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:78: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int16_t' (or there is no acceptable conversion)
+ERROR: 0:79: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform int16_t (or there is no acceptable conversion)
+ERROR: 0:80: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:81: 'can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:82: 'can't use with structs containing int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:83: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:84: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:85: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int16_t' (or there is no acceptable conversion)
+ERROR: 0:87: 'can't use with arrays containing int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:88: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:89: '16-bit array constructors not supported' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:89: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:92: 'Can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:93: 'func2' : no matching overloaded function found 
+ERROR: 0:99: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 26 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.16bitstorage_Error-uint.frag.out b/Test/baseResults/spv.16bitstorage_Error-uint.frag.out
new file mode 100755 (executable)
index 0000000..786c4d2
--- /dev/null
@@ -0,0 +1,91 @@
+spv.16bitstorage_Error-uint.frag
+ERROR: 0:54: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:58: 'can't use with structs containing uint16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:61: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:74: ''[' does not operate on types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:75: 'can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:76: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:77: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:77: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:78: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint16_t' (or there is no acceptable conversion)
+ERROR: 0:79: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform uint16_t (or there is no acceptable conversion)
+ERROR: 0:80: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:81: 'can't swizzle types containing (u)int16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:82: 'can't use with structs containing uint16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:83: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:84: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:85: '(u)int16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint16_t' (or there is no acceptable conversion)
+ERROR: 0:87: 'can't use with arrays containing uint16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:88: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:89: '16-bit array constructors not supported' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:89: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:92: 'Can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_int16
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int16
+ERROR: 0:93: 'func2' : no matching overloaded function found 
+ERROR: 0:99: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 26 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.16bitstorage_Error.frag.out b/Test/baseResults/spv.16bitstorage_Error.frag.out
new file mode 100755 (executable)
index 0000000..6de8566
--- /dev/null
@@ -0,0 +1,99 @@
+spv.16bitstorage_Error.frag
+ERROR: 0:54: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:58: 'can't use with structs containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:61: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:74: ''[' does not operate on types containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:75: 'can't swizzle types containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:76: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:76: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:76: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:77: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:77: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:78: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform float16_t' (or there is no acceptable conversion)
+ERROR: 0:79: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform float16_t (or there is no acceptable conversion)
+ERROR: 0:80: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:81: 'can't swizzle types containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:82: 'can't use with structs containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:83: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:84: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:85: 'float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform float16_t' and a right operand of type 'layout( column_major std140 offset=0) uniform float16_t' (or there is no acceptable conversion)
+ERROR: 0:87: 'can't use with arrays containing float16' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:88: 'explicit types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:88: 'explicit types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:89: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:90: '16-bit array constructors not supported' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:90: '16-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:93: 'Can't construct structure containing 16-bit type' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:94: 'func2' : no matching overloaded function found 
+ERROR: 0:100: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 28 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
new file mode 100755 (executable)
index 0000000..94e7ab5
--- /dev/null
@@ -0,0 +1,335 @@
+spv.8bitstorage-int.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 171
+
+                              Capability Shader
+                              Capability Int8
+                              Capability CapabilityStorageBuffer8BitAccess
+                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_8bit_storage"
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "x"
+                              MemberName 12(S) 1  "y"
+                              MemberName 12(S) 2  "z"
+                              Name 17  "B2"
+                              MemberName 17(B2) 0  "o"
+                              MemberName 17(B2) 1  "p"
+                              MemberName 17(B2) 2  "q"
+                              MemberName 17(B2) 3  "r"
+                              MemberName 17(B2) 4  "u"
+                              MemberName 17(B2) 5  "v"
+                              MemberName 17(B2) 6  "x"
+                              MemberName 17(B2) 7  "w"
+                              Name 19  "b2"
+                              Name 23  "S"
+                              MemberName 23(S) 0  "x"
+                              MemberName 23(S) 1  "y"
+                              MemberName 23(S) 2  "z"
+                              Name 25  "B1"
+                              MemberName 25(B1) 0  "a"
+                              MemberName 25(B1) 1  "b"
+                              MemberName 25(B1) 2  "c"
+                              MemberName 25(B1) 3  "d"
+                              MemberName 25(B1) 4  "g"
+                              MemberName 25(B1) 5  "h"
+                              MemberName 25(B1) 6  "j"
+                              Name 27  "b1"
+                              Name 45  "S"
+                              MemberName 45(S) 0  "x"
+                              MemberName 45(S) 1  "y"
+                              MemberName 45(S) 2  "z"
+                              Name 49  "B5"
+                              MemberName 49(B5) 0  "o"
+                              MemberName 49(B5) 1  "p"
+                              MemberName 49(B5) 2  "q"
+                              MemberName 49(B5) 3  "r"
+                              MemberName 49(B5) 4  "u"
+                              MemberName 49(B5) 5  "v"
+                              MemberName 49(B5) 6  "x"
+                              MemberName 49(B5) 7  "w"
+                              Name 51  "b5"
+                              Name 69  "x0"
+                              Name 75  "x1"
+                              Name 88  "S2"
+                              MemberName 88(S2) 0  "x"
+                              MemberName 88(S2) 1  "y"
+                              MemberName 88(S2) 2  "z"
+                              Name 89  "S3"
+                              MemberName 89(S3) 0  "x"
+                              Name 90  "B4"
+                              MemberName 90(B4) 0  "x"
+                              MemberName 90(B4) 1  "y"
+                              Name 92  "b4"
+                              Name 93  "S2"
+                              MemberName 93(S2) 0  "x"
+                              MemberName 93(S2) 1  "y"
+                              MemberName 93(S2) 2  "z"
+                              Name 94  "B3"
+                              MemberName 94(B3) 0  "x"
+                              Name 96  "b3"
+                              Name 113  "v3"
+                              Name 135  "u3"
+                              Decorate 11 ArrayStride 1
+                              MemberDecorate 12(S) 0 Offset 0
+                              MemberDecorate 12(S) 1 Offset 2
+                              MemberDecorate 12(S) 2 Offset 4
+                              Decorate 13 ArrayStride 8
+                              Decorate 15 ArrayStride 2
+                              Decorate 16 ArrayStride 1
+                              MemberDecorate 17(B2) 0 Offset 0
+                              MemberDecorate 17(B2) 1 Offset 2
+                              MemberDecorate 17(B2) 2 Offset 4
+                              MemberDecorate 17(B2) 3 Offset 7
+                              MemberDecorate 17(B2) 4 Offset 12
+                              MemberDecorate 17(B2) 5 Offset 20
+                              MemberDecorate 17(B2) 6 Offset 36
+                              MemberDecorate 17(B2) 7 Offset 236
+                              Decorate 17(B2) BufferBlock
+                              Decorate 19(b2) DescriptorSet 0
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23(S) 0 Offset 0
+                              MemberDecorate 23(S) 1 Offset 2
+                              MemberDecorate 23(S) 2 Offset 4
+                              Decorate 24 ArrayStride 16
+                              MemberDecorate 25(B1) 0 Offset 0
+                              MemberDecorate 25(B1) 1 Offset 2
+                              MemberDecorate 25(B1) 2 Offset 4
+                              MemberDecorate 25(B1) 3 Offset 16
+                              MemberDecorate 25(B1) 4 Offset 48
+                              MemberDecorate 25(B1) 5 Offset 64
+                              MemberDecorate 25(B1) 6 Offset 96
+                              Decorate 25(B1) Block
+                              Decorate 27(b1) DescriptorSet 0
+                              Decorate 44 ArrayStride 16
+                              MemberDecorate 45(S) 0 Offset 0
+                              MemberDecorate 45(S) 1 Offset 2
+                              MemberDecorate 45(S) 2 Offset 4
+                              Decorate 46 ArrayStride 16
+                              Decorate 47 ArrayStride 16
+                              Decorate 48 ArrayStride 16
+                              MemberDecorate 49(B5) 0 Offset 0
+                              MemberDecorate 49(B5) 1 Offset 2
+                              MemberDecorate 49(B5) 2 Offset 4
+                              MemberDecorate 49(B5) 3 Offset 16
+                              MemberDecorate 49(B5) 4 Offset 48
+                              MemberDecorate 49(B5) 5 Offset 64
+                              MemberDecorate 49(B5) 6 Offset 96
+                              MemberDecorate 49(B5) 7 Offset 1696
+                              Decorate 49(B5) Block
+                              Decorate 51(b5) DescriptorSet 0
+                              MemberDecorate 88(S2) 0 ColMajor
+                              MemberDecorate 88(S2) 0 Offset 0
+                              MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 1 Offset 64
+                              MemberDecorate 88(S2) 2 Offset 68
+                              MemberDecorate 89(S3) 0 Offset 0
+                              MemberDecorate 90(B4) 0 Offset 0
+                              MemberDecorate 90(B4) 1 Offset 80
+                              Decorate 90(B4) BufferBlock
+                              Decorate 92(b4) DescriptorSet 0
+                              MemberDecorate 93(S2) 0 RowMajor
+                              MemberDecorate 93(S2) 0 Offset 0
+                              MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 1 Offset 64
+                              MemberDecorate 93(S2) 2 Offset 68
+                              MemberDecorate 94(B3) 0 Offset 0
+                              Decorate 94(B3) BufferBlock
+                              Decorate 96(b3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypeVector 6(int8_t) 2
+               8:             TypeVector 6(int8_t) 3
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(int8_t) 10
+           12(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              13:             TypeArray 12(S) 10
+              14:      9(int) Constant 100
+              15:             TypeArray 7(i8vec2) 14
+              16:             TypeRuntimeArray 6(int8_t)
+          17(B2):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 11 12(S) 13 15 16
+              18:             TypePointer Uniform 17(B2)
+          19(b2):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypeArray 6(int8_t) 10
+           23(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              24:             TypeArray 23(S) 10
+          25(B1):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 22 23(S) 24 20(int)
+              26:             TypePointer Uniform 25(B1)
+          27(b1):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(int8_t)
+              32:     20(int) Constant 1
+              33:     20(int) Constant 2
+              34:             TypePointer Uniform 8(i8vec3)
+              37:             TypeVector 20(int) 3
+              39:             TypeVector 20(int) 2
+              42:             TypePointer Uniform 7(i8vec2)
+              44:             TypeArray 6(int8_t) 10
+           45(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              46:             TypeArray 45(S) 10
+              47:             TypeArray 7(i8vec2) 14
+              48:             TypeArray 6(int8_t) 14
+          49(B5):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 44 45(S) 46 47 48
+              50:             TypePointer Uniform 49(B5)
+          51(b5):     50(ptr) Variable Uniform
+              58:     20(int) Constant 3
+              68:             TypePointer Function 20(int)
+              73:             TypeVector 20(int) 4
+              74:             TypePointer Function 73(ivec4)
+              85:             TypeFloat 32
+              86:             TypeVector 85(float) 4
+              87:             TypeMatrix 86(fvec4) 4
+          88(S2):             TypeStruct 87 6(int8_t) 20(int)
+          89(S3):             TypeStruct 88(S2)
+          90(B4):             TypeStruct 88(S2) 89(S3)
+              91:             TypePointer Uniform 90(B4)
+          92(b4):     91(ptr) Variable Uniform
+          93(S2):             TypeStruct 87 6(int8_t) 20(int)
+          94(B3):             TypeStruct 93(S2)
+              95:             TypePointer Uniform 94(B3)
+          96(b3):     95(ptr) Variable Uniform
+              97:             TypePointer Uniform 87
+             104:      9(int) Constant 0
+             108:     20(int) Constant 5
+             112:             TypePointer Function 37(ivec3)
+             114:     20(int) Constant 7
+             115:     20(int) Constant 6
+             116:             TypePointer Uniform 20(int)
+             166:   39(ivec2) ConstantComposite 32 33
+         4(main):           2 Function None 3
+               5:             Label
+          69(x0):     68(ptr) Variable Function
+          75(x1):     74(ptr) Variable Function
+         113(v3):    112(ptr) Variable Function
+         135(u3):    112(ptr) Variable Function
+              29:     28(ptr) AccessChain 27(b1) 21
+              30:   6(int8_t) Load 29
+              31:     28(ptr) AccessChain 19(b2) 21
+                              Store 31 30
+              35:     34(ptr) AccessChain 19(b2) 33
+              36:   8(i8vec3) Load 35
+              38:   37(ivec3) SConvert 36
+              40:   39(ivec2) VectorShuffle 38 38 0 1
+              41:   7(i8vec2) SConvert 40
+              43:     42(ptr) AccessChain 19(b2) 32
+                              Store 43 41
+              52:     34(ptr) AccessChain 51(b5) 33
+              53:   8(i8vec3) Load 52
+              54:   37(ivec3) SConvert 53
+              55:   39(ivec2) VectorShuffle 54 54 0 1
+              56:   7(i8vec2) SConvert 55
+              57:     42(ptr) AccessChain 19(b2) 32
+                              Store 57 56
+              59:     28(ptr) AccessChain 19(b2) 58 21
+              60:   6(int8_t) Load 59
+              61:     28(ptr) AccessChain 19(b2) 58 21
+                              Store 61 60
+              62:     28(ptr) AccessChain 51(b5) 58 32
+              63:   6(int8_t) Load 62
+              64:     28(ptr) AccessChain 19(b2) 58 32
+                              Store 64 63
+              65:     42(ptr) AccessChain 19(b2) 32
+              66:   7(i8vec2) Load 65
+              67:     42(ptr) AccessChain 19(b2) 32
+                              Store 67 66
+              70:     28(ptr) AccessChain 27(b1) 21
+              71:   6(int8_t) Load 70
+              72:     20(int) SConvert 71
+                              Store 69(x0) 72
+              76:     28(ptr) AccessChain 27(b1) 21
+              77:   6(int8_t) Load 76
+              78:     20(int) SConvert 77
+              79:     42(ptr) AccessChain 19(b2) 32
+              80:   7(i8vec2) Load 79
+              81:   39(ivec2) SConvert 80
+              82:     20(int) CompositeExtract 81 0
+              83:     20(int) CompositeExtract 81 1
+              84:   73(ivec4) CompositeConstruct 78 82 83 32
+                              Store 75(x1) 84
+              98:     97(ptr) AccessChain 96(b3) 21 21
+              99:          87 Load 98
+             100:     97(ptr) AccessChain 92(b4) 21 21
+                              Store 100 99
+             101:     42(ptr) AccessChain 19(b2) 32
+             102:   7(i8vec2) Load 101
+             103:   39(ivec2) SConvert 102
+             105:     20(int) CompositeExtract 103 0
+             106:   6(int8_t) SConvert 105
+             107:     28(ptr) AccessChain 19(b2) 21
+                              Store 107 106
+             109:     42(ptr) AccessChain 19(b2) 108 32 32
+             110:   7(i8vec2) Load 109
+             111:     42(ptr) AccessChain 19(b2) 32
+                              Store 111 110
+             117:    116(ptr) AccessChain 27(b1) 115
+             118:     20(int) Load 117
+             119:     28(ptr) AccessChain 19(b2) 114 118
+             120:   6(int8_t) Load 119
+             121:     20(int) SConvert 120
+             122:    116(ptr) AccessChain 27(b1) 115
+             123:     20(int) Load 122
+             124:     20(int) IAdd 123 32
+             125:     28(ptr) AccessChain 19(b2) 114 124
+             126:   6(int8_t) Load 125
+             127:     20(int) SConvert 126
+             128:    116(ptr) AccessChain 27(b1) 115
+             129:     20(int) Load 128
+             130:     20(int) IAdd 129 33
+             131:     28(ptr) AccessChain 19(b2) 114 130
+             132:   6(int8_t) Load 131
+             133:     20(int) SConvert 132
+             134:   37(ivec3) CompositeConstruct 121 127 133
+                              Store 113(v3) 134
+             136:    116(ptr) AccessChain 27(b1) 115
+             137:     20(int) Load 136
+             138:     28(ptr) AccessChain 51(b5) 114 137
+             139:   6(int8_t) Load 138
+             140:     20(int) SConvert 139
+             141:    116(ptr) AccessChain 27(b1) 115
+             142:     20(int) Load 141
+             143:     20(int) IAdd 142 32
+             144:     28(ptr) AccessChain 51(b5) 114 143
+             145:   6(int8_t) Load 144
+             146:     20(int) SConvert 145
+             147:    116(ptr) AccessChain 27(b1) 115
+             148:     20(int) Load 147
+             149:     20(int) IAdd 148 33
+             150:     28(ptr) AccessChain 51(b5) 114 149
+             151:   6(int8_t) Load 150
+             152:     20(int) SConvert 151
+             153:   37(ivec3) CompositeConstruct 140 146 152
+                              Store 135(u3) 153
+             154:     42(ptr) AccessChain 19(b2) 115 21
+             155:   7(i8vec2) Load 154
+             156:     42(ptr) AccessChain 19(b2) 115 21
+                              Store 156 155
+             157:     42(ptr) AccessChain 51(b5) 115 32
+             158:   7(i8vec2) Load 157
+             159:     42(ptr) AccessChain 19(b2) 115 32
+                              Store 159 158
+             160:     28(ptr) AccessChain 27(b1) 21
+             161:   6(int8_t) Load 160
+             162:     28(ptr) AccessChain 19(b2) 32 104
+                              Store 162 161
+             163:     28(ptr) AccessChain 19(b2) 32 104
+             164:   6(int8_t) Load 163
+             165:     28(ptr) AccessChain 19(b2) 21
+                              Store 165 164
+             167:   7(i8vec2) SConvert 166
+             168:     42(ptr) AccessChain 19(b2) 32
+                              Store 168 167
+             169:   6(int8_t) SConvert 58
+             170:     28(ptr) AccessChain 19(b2) 21
+                              Store 170 169
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
new file mode 100755 (executable)
index 0000000..f4e7b6d
--- /dev/null
@@ -0,0 +1,337 @@
+spv.8bitstorage-uint.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 173
+
+                              Capability Shader
+                              Capability Int8
+                              Capability CapabilityStorageBuffer8BitAccess
+                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_8bit_storage"
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "x"
+                              MemberName 12(S) 1  "y"
+                              MemberName 12(S) 2  "z"
+                              Name 17  "B2"
+                              MemberName 17(B2) 0  "o"
+                              MemberName 17(B2) 1  "p"
+                              MemberName 17(B2) 2  "q"
+                              MemberName 17(B2) 3  "r"
+                              MemberName 17(B2) 4  "u"
+                              MemberName 17(B2) 5  "v"
+                              MemberName 17(B2) 6  "x"
+                              MemberName 17(B2) 7  "w"
+                              Name 19  "b2"
+                              Name 23  "S"
+                              MemberName 23(S) 0  "x"
+                              MemberName 23(S) 1  "y"
+                              MemberName 23(S) 2  "z"
+                              Name 25  "B1"
+                              MemberName 25(B1) 0  "a"
+                              MemberName 25(B1) 1  "b"
+                              MemberName 25(B1) 2  "c"
+                              MemberName 25(B1) 3  "d"
+                              MemberName 25(B1) 4  "g"
+                              MemberName 25(B1) 5  "h"
+                              MemberName 25(B1) 6  "j"
+                              Name 27  "b1"
+                              Name 45  "S"
+                              MemberName 45(S) 0  "x"
+                              MemberName 45(S) 1  "y"
+                              MemberName 45(S) 2  "z"
+                              Name 49  "B5"
+                              MemberName 49(B5) 0  "o"
+                              MemberName 49(B5) 1  "p"
+                              MemberName 49(B5) 2  "q"
+                              MemberName 49(B5) 3  "r"
+                              MemberName 49(B5) 4  "u"
+                              MemberName 49(B5) 5  "v"
+                              MemberName 49(B5) 6  "x"
+                              MemberName 49(B5) 7  "w"
+                              Name 51  "b5"
+                              Name 69  "x0"
+                              Name 75  "x1"
+                              Name 89  "S2"
+                              MemberName 89(S2) 0  "x"
+                              MemberName 89(S2) 1  "y"
+                              MemberName 89(S2) 2  "z"
+                              Name 90  "S3"
+                              MemberName 90(S3) 0  "x"
+                              Name 91  "B4"
+                              MemberName 91(B4) 0  "x"
+                              MemberName 91(B4) 1  "y"
+                              Name 93  "b4"
+                              Name 94  "S2"
+                              MemberName 94(S2) 0  "x"
+                              MemberName 94(S2) 1  "y"
+                              MemberName 94(S2) 2  "z"
+                              Name 95  "B3"
+                              MemberName 95(B3) 0  "x"
+                              Name 97  "b3"
+                              Name 114  "v3"
+                              Name 136  "u3"
+                              Decorate 11 ArrayStride 1
+                              MemberDecorate 12(S) 0 Offset 0
+                              MemberDecorate 12(S) 1 Offset 2
+                              MemberDecorate 12(S) 2 Offset 4
+                              Decorate 13 ArrayStride 8
+                              Decorate 15 ArrayStride 2
+                              Decorate 16 ArrayStride 1
+                              MemberDecorate 17(B2) 0 Offset 0
+                              MemberDecorate 17(B2) 1 Offset 2
+                              MemberDecorate 17(B2) 2 Offset 4
+                              MemberDecorate 17(B2) 3 Offset 7
+                              MemberDecorate 17(B2) 4 Offset 12
+                              MemberDecorate 17(B2) 5 Offset 20
+                              MemberDecorate 17(B2) 6 Offset 36
+                              MemberDecorate 17(B2) 7 Offset 236
+                              Decorate 17(B2) BufferBlock
+                              Decorate 19(b2) DescriptorSet 0
+                              Decorate 22 ArrayStride 16
+                              MemberDecorate 23(S) 0 Offset 0
+                              MemberDecorate 23(S) 1 Offset 2
+                              MemberDecorate 23(S) 2 Offset 4
+                              Decorate 24 ArrayStride 16
+                              MemberDecorate 25(B1) 0 Offset 0
+                              MemberDecorate 25(B1) 1 Offset 2
+                              MemberDecorate 25(B1) 2 Offset 4
+                              MemberDecorate 25(B1) 3 Offset 16
+                              MemberDecorate 25(B1) 4 Offset 48
+                              MemberDecorate 25(B1) 5 Offset 64
+                              MemberDecorate 25(B1) 6 Offset 96
+                              Decorate 25(B1) Block
+                              Decorate 27(b1) DescriptorSet 0
+                              Decorate 44 ArrayStride 16
+                              MemberDecorate 45(S) 0 Offset 0
+                              MemberDecorate 45(S) 1 Offset 2
+                              MemberDecorate 45(S) 2 Offset 4
+                              Decorate 46 ArrayStride 16
+                              Decorate 47 ArrayStride 16
+                              Decorate 48 ArrayStride 16
+                              MemberDecorate 49(B5) 0 Offset 0
+                              MemberDecorate 49(B5) 1 Offset 2
+                              MemberDecorate 49(B5) 2 Offset 4
+                              MemberDecorate 49(B5) 3 Offset 16
+                              MemberDecorate 49(B5) 4 Offset 48
+                              MemberDecorate 49(B5) 5 Offset 64
+                              MemberDecorate 49(B5) 6 Offset 96
+                              MemberDecorate 49(B5) 7 Offset 1696
+                              Decorate 49(B5) Block
+                              Decorate 51(b5) DescriptorSet 0
+                              MemberDecorate 89(S2) 0 ColMajor
+                              MemberDecorate 89(S2) 0 Offset 0
+                              MemberDecorate 89(S2) 0 MatrixStride 16
+                              MemberDecorate 89(S2) 1 Offset 64
+                              MemberDecorate 89(S2) 2 Offset 68
+                              MemberDecorate 90(S3) 0 Offset 0
+                              MemberDecorate 91(B4) 0 Offset 0
+                              MemberDecorate 91(B4) 1 Offset 80
+                              Decorate 91(B4) BufferBlock
+                              Decorate 93(b4) DescriptorSet 0
+                              MemberDecorate 94(S2) 0 RowMajor
+                              MemberDecorate 94(S2) 0 Offset 0
+                              MemberDecorate 94(S2) 0 MatrixStride 16
+                              MemberDecorate 94(S2) 1 Offset 64
+                              MemberDecorate 94(S2) 2 Offset 68
+                              MemberDecorate 95(B3) 0 Offset 0
+                              Decorate 95(B3) BufferBlock
+                              Decorate 97(b3) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 0
+               7:             TypeVector 6(int8_t) 2
+               8:             TypeVector 6(int8_t) 3
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(int8_t) 10
+           12(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              13:             TypeArray 12(S) 10
+              14:      9(int) Constant 100
+              15:             TypeArray 7(i8vec2) 14
+              16:             TypeRuntimeArray 6(int8_t)
+          17(B2):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 11 12(S) 13 15 16
+              18:             TypePointer Uniform 17(B2)
+          19(b2):     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypeArray 6(int8_t) 10
+           23(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              24:             TypeArray 23(S) 10
+          25(B1):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 22 23(S) 24 9(int)
+              26:             TypePointer Uniform 25(B1)
+          27(b1):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(int8_t)
+              32:     20(int) Constant 1
+              33:     20(int) Constant 2
+              34:             TypePointer Uniform 8(i8vec3)
+              37:             TypeVector 9(int) 3
+              39:             TypeVector 9(int) 2
+              42:             TypePointer Uniform 7(i8vec2)
+              44:             TypeArray 6(int8_t) 10
+           45(S):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3)
+              46:             TypeArray 45(S) 10
+              47:             TypeArray 7(i8vec2) 14
+              48:             TypeArray 6(int8_t) 14
+          49(B5):             TypeStruct 6(int8_t) 7(i8vec2) 8(i8vec3) 44 45(S) 46 47 48
+              50:             TypePointer Uniform 49(B5)
+          51(b5):     50(ptr) Variable Uniform
+              58:     20(int) Constant 3
+              68:             TypePointer Function 9(int)
+              73:             TypeVector 9(int) 4
+              74:             TypePointer Function 73(ivec4)
+              82:      9(int) Constant 1
+              86:             TypeFloat 32
+              87:             TypeVector 86(float) 4
+              88:             TypeMatrix 87(fvec4) 4
+          89(S2):             TypeStruct 88 6(int8_t) 9(int)
+          90(S3):             TypeStruct 89(S2)
+          91(B4):             TypeStruct 89(S2) 90(S3)
+              92:             TypePointer Uniform 91(B4)
+          93(b4):     92(ptr) Variable Uniform
+          94(S2):             TypeStruct 88 6(int8_t) 9(int)
+          95(B3):             TypeStruct 94(S2)
+              96:             TypePointer Uniform 95(B3)
+          97(b3):     96(ptr) Variable Uniform
+              98:             TypePointer Uniform 88
+             105:      9(int) Constant 0
+             109:     20(int) Constant 5
+             113:             TypePointer Function 37(ivec3)
+             115:     20(int) Constant 7
+             116:     20(int) Constant 6
+             117:             TypePointer Uniform 9(int)
+             167:   39(ivec2) ConstantComposite 82 10
+             170:      9(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+          69(x0):     68(ptr) Variable Function
+          75(x1):     74(ptr) Variable Function
+         114(v3):    113(ptr) Variable Function
+         136(u3):    113(ptr) Variable Function
+              29:     28(ptr) AccessChain 27(b1) 21
+              30:   6(int8_t) Load 29
+              31:     28(ptr) AccessChain 19(b2) 21
+                              Store 31 30
+              35:     34(ptr) AccessChain 19(b2) 33
+              36:   8(i8vec3) Load 35
+              38:   37(ivec3) UConvert 36
+              40:   39(ivec2) VectorShuffle 38 38 0 1
+              41:   7(i8vec2) UConvert 40
+              43:     42(ptr) AccessChain 19(b2) 32
+                              Store 43 41
+              52:     34(ptr) AccessChain 51(b5) 33
+              53:   8(i8vec3) Load 52
+              54:   37(ivec3) UConvert 53
+              55:   39(ivec2) VectorShuffle 54 54 0 1
+              56:   7(i8vec2) UConvert 55
+              57:     42(ptr) AccessChain 19(b2) 32
+                              Store 57 56
+              59:     28(ptr) AccessChain 19(b2) 58 21
+              60:   6(int8_t) Load 59
+              61:     28(ptr) AccessChain 19(b2) 58 21
+                              Store 61 60
+              62:     28(ptr) AccessChain 51(b5) 58 32
+              63:   6(int8_t) Load 62
+              64:     28(ptr) AccessChain 19(b2) 58 32
+                              Store 64 63
+              65:     42(ptr) AccessChain 19(b2) 32
+              66:   7(i8vec2) Load 65
+              67:     42(ptr) AccessChain 19(b2) 32
+                              Store 67 66
+              70:     28(ptr) AccessChain 27(b1) 21
+              71:   6(int8_t) Load 70
+              72:      9(int) UConvert 71
+                              Store 69(x0) 72
+              76:     28(ptr) AccessChain 27(b1) 21
+              77:   6(int8_t) Load 76
+              78:      9(int) UConvert 77
+              79:     42(ptr) AccessChain 19(b2) 32
+              80:   7(i8vec2) Load 79
+              81:   39(ivec2) UConvert 80
+              83:      9(int) CompositeExtract 81 0
+              84:      9(int) CompositeExtract 81 1
+              85:   73(ivec4) CompositeConstruct 78 83 84 82
+                              Store 75(x1) 85
+              99:     98(ptr) AccessChain 97(b3) 21 21
+             100:          88 Load 99
+             101:     98(ptr) AccessChain 93(b4) 21 21
+                              Store 101 100
+             102:     42(ptr) AccessChain 19(b2) 32
+             103:   7(i8vec2) Load 102
+             104:   39(ivec2) UConvert 103
+             106:      9(int) CompositeExtract 104 0
+             107:   6(int8_t) UConvert 106
+             108:     28(ptr) AccessChain 19(b2) 21
+                              Store 108 107
+             110:     42(ptr) AccessChain 19(b2) 109 32 32
+             111:   7(i8vec2) Load 110
+             112:     42(ptr) AccessChain 19(b2) 32
+                              Store 112 111
+             118:    117(ptr) AccessChain 27(b1) 116
+             119:      9(int) Load 118
+             120:     28(ptr) AccessChain 19(b2) 115 119
+             121:   6(int8_t) Load 120
+             122:      9(int) UConvert 121
+             123:    117(ptr) AccessChain 27(b1) 116
+             124:      9(int) Load 123
+             125:      9(int) IAdd 124 82
+             126:     28(ptr) AccessChain 19(b2) 115 125
+             127:   6(int8_t) Load 126
+             128:      9(int) UConvert 127
+             129:    117(ptr) AccessChain 27(b1) 116
+             130:      9(int) Load 129
+             131:      9(int) IAdd 130 10
+             132:     28(ptr) AccessChain 19(b2) 115 131
+             133:   6(int8_t) Load 132
+             134:      9(int) UConvert 133
+             135:   37(ivec3) CompositeConstruct 122 128 134
+                              Store 114(v3) 135
+             137:    117(ptr) AccessChain 27(b1) 116
+             138:      9(int) Load 137
+             139:     28(ptr) AccessChain 51(b5) 115 138
+             140:   6(int8_t) Load 139
+             141:      9(int) UConvert 140
+             142:    117(ptr) AccessChain 27(b1) 116
+             143:      9(int) Load 142
+             144:      9(int) IAdd 143 82
+             145:     28(ptr) AccessChain 51(b5) 115 144
+             146:   6(int8_t) Load 145
+             147:      9(int) UConvert 146
+             148:    117(ptr) AccessChain 27(b1) 116
+             149:      9(int) Load 148
+             150:      9(int) IAdd 149 10
+             151:     28(ptr) AccessChain 51(b5) 115 150
+             152:   6(int8_t) Load 151
+             153:      9(int) UConvert 152
+             154:   37(ivec3) CompositeConstruct 141 147 153
+                              Store 136(u3) 154
+             155:     42(ptr) AccessChain 19(b2) 116 21
+             156:   7(i8vec2) Load 155
+             157:     42(ptr) AccessChain 19(b2) 116 21
+                              Store 157 156
+             158:     42(ptr) AccessChain 51(b5) 116 32
+             159:   7(i8vec2) Load 158
+             160:     42(ptr) AccessChain 19(b2) 116 32
+                              Store 160 159
+             161:     28(ptr) AccessChain 27(b1) 21
+             162:   6(int8_t) Load 161
+             163:     28(ptr) AccessChain 19(b2) 32 105
+                              Store 163 162
+             164:     28(ptr) AccessChain 19(b2) 32 105
+             165:   6(int8_t) Load 164
+             166:     28(ptr) AccessChain 19(b2) 21
+                              Store 166 165
+             168:   7(i8vec2) UConvert 167
+             169:     42(ptr) AccessChain 19(b2) 32
+                              Store 169 168
+             171:   6(int8_t) UConvert 170
+             172:     28(ptr) AccessChain 19(b2) 21
+                              Store 172 171
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage_Error-int.frag.out b/Test/baseResults/spv.8bitstorage_Error-int.frag.out
new file mode 100755 (executable)
index 0000000..14104ab
--- /dev/null
@@ -0,0 +1,71 @@
+spv.8bitstorage_Error-int.frag
+ERROR: 0:54: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:58: 'can't use with structs containing int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:61: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:74: ''[' does not operate on types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:75: 'can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:77: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:77: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:78: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int8_t' (or there is no acceptable conversion)
+ERROR: 0:79: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform int8_t (or there is no acceptable conversion)
+ERROR: 0:80: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:81: 'can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:82: 'can't use with structs containing int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:83: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:84: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:85: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform int8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform int8_t' (or there is no acceptable conversion)
+ERROR: 0:87: 'can't use with arrays containing int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:88: '8-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:89: '8-bit array constructors not supported' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:89: '8-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:92: 'Can't construct structure containing 8-bit type' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:93: 'func2' : no matching overloaded function found 
+ERROR: 0:99: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 26 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.8bitstorage_Error-uint.frag.out b/Test/baseResults/spv.8bitstorage_Error-uint.frag.out
new file mode 100755 (executable)
index 0000000..f8a9d90
--- /dev/null
@@ -0,0 +1,71 @@
+spv.8bitstorage_Error-uint.frag
+ERROR: 0:54: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:58: 'can't use with structs containing uint8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:61: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:74: ''[' does not operate on types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:75: 'can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:76: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:77: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:77: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:78: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint8_t' (or there is no acceptable conversion)
+ERROR: 0:79: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( column_major std140 offset=0) uniform uint8_t (or there is no acceptable conversion)
+ERROR: 0:80: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:81: 'can't swizzle types containing (u)int8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:82: 'can't use with structs containing uint8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:83: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:84: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:85: '(u)int8 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type 'layout( column_major std140 offset=0) uniform uint8_t' and a right operand of type 'layout( column_major std140 offset=0) uniform uint8_t' (or there is no acceptable conversion)
+ERROR: 0:87: 'can't use with arrays containing uint8' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:88: '8-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:89: '8-bit array constructors not supported' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:89: '8-bit vector constructors only take vector types' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:92: 'Can't construct structure containing 8-bit type' : required extension not requested: Possible extensions include:
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_int8
+ERROR: 0:93: 'func2' : no matching overloaded function found 
+ERROR: 0:99: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 26 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
index 464c75d..40c6677 100644 (file)
@@ -1,7 +1,7 @@
 spv.float32.frag
 // Module Version 10300
 // Generated by (magic number): 80007
-// Id's are bound by 530
+// Id's are bound by 533
 
                               Capability Shader
                               Capability Float16
@@ -13,7 +13,7 @@ spv.float32.frag
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 468
+                              EntryPoint Fragment 4  "main" 471
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
@@ -48,81 +48,81 @@ spv.float32.frag
                               Name 189  "i16v"
                               Name 195  "i32v"
                               Name 201  "i64v"
-                              Name 204  "u8v"
-                              Name 210  "u16v"
-                              Name 215  "u32v"
-                              Name 221  "u64v"
-                              Name 226  "f32v2"
-                              Name 227  "f32v1"
-                              Name 259  "f32v2"
-                              Name 260  "f32v1"
-                              Name 276  "f32v2"
-                              Name 277  "f32v1"
-                              Name 298  "f32"
-                              Name 302  "f32v3"
-                              Name 342  "bv"
-                              Name 363  "b"
-                              Name 373  "iv"
-                              Name 374  "ResType"
-                              Name 381  "f32"
-                              Name 382  "f32v1"
-                              Name 386  "f32v2"
-                              Name 392  "f32v3"
-                              Name 411  "f32m3"
-                              Name 412  "f32m1"
-                              Name 414  "f32m2"
-                              Name 423  "f32v1"
-                              Name 425  "f32v2"
-                              Name 430  "f32m4"
-                              Name 433  "f32"
-                              Name 436  "f32m5"
-                              Name 441  "f32m6"
-                              Name 442  "f32m7"
-                              Name 445  "bv"
-                              Name 446  "f32v1"
-                              Name 448  "f32v2"
-                              Name 466  "f32v"
-                              Name 468  "if32v"
-                              Name 517  "S"
-                              MemberName 517(S) 0  "x"
-                              MemberName 517(S) 1  "y"
-                              MemberName 517(S) 2  "z"
-                              Name 519  "B1"
-                              MemberName 519(B1) 0  "a"
-                              MemberName 519(B1) 1  "b"
-                              MemberName 519(B1) 2  "c"
-                              MemberName 519(B1) 3  "d"
-                              MemberName 519(B1) 4  "e"
-                              MemberName 519(B1) 5  "f"
-                              MemberName 519(B1) 6  "g"
-                              MemberName 519(B1) 7  "h"
-                              Name 521  ""
-                              Name 522  "sf16"
-                              Name 523  "sf"
-                              Name 524  "sd"
-                              Decorate 515 ArrayStride 16
-                              Decorate 516 ArrayStride 32
-                              MemberDecorate 517(S) 0 Offset 0
-                              MemberDecorate 517(S) 1 Offset 8
-                              MemberDecorate 517(S) 2 Offset 16
-                              Decorate 518 ArrayStride 32
-                              MemberDecorate 519(B1) 0 Offset 0
-                              MemberDecorate 519(B1) 1 Offset 8
-                              MemberDecorate 519(B1) 2 Offset 16
-                              MemberDecorate 519(B1) 3 Offset 32
-                              MemberDecorate 519(B1) 4 ColMajor
-                              MemberDecorate 519(B1) 4 Offset 64
-                              MemberDecorate 519(B1) 4 MatrixStride 16
-                              MemberDecorate 519(B1) 5 ColMajor
-                              MemberDecorate 519(B1) 5 Offset 96
-                              MemberDecorate 519(B1) 5 MatrixStride 16
-                              MemberDecorate 519(B1) 6 Offset 160
-                              MemberDecorate 519(B1) 7 Offset 192
-                              Decorate 519(B1) Block
-                              Decorate 521 DescriptorSet 0
-                              Decorate 522(sf16) SpecId 100
-                              Decorate 523(sf) SpecId 101
-                              Decorate 524(sd) SpecId 102
+                              Name 207  "u8v"
+                              Name 213  "u16v"
+                              Name 218  "u32v"
+                              Name 224  "u64v"
+                              Name 229  "f32v2"
+                              Name 230  "f32v1"
+                              Name 262  "f32v2"
+                              Name 263  "f32v1"
+                              Name 279  "f32v2"
+                              Name 280  "f32v1"
+                              Name 301  "f32"
+                              Name 305  "f32v3"
+                              Name 345  "bv"
+                              Name 366  "b"
+                              Name 376  "iv"
+                              Name 377  "ResType"
+                              Name 384  "f32"
+                              Name 385  "f32v1"
+                              Name 389  "f32v2"
+                              Name 395  "f32v3"
+                              Name 414  "f32m3"
+                              Name 415  "f32m1"
+                              Name 417  "f32m2"
+                              Name 426  "f32v1"
+                              Name 428  "f32v2"
+                              Name 433  "f32m4"
+                              Name 436  "f32"
+                              Name 439  "f32m5"
+                              Name 444  "f32m6"
+                              Name 445  "f32m7"
+                              Name 448  "bv"
+                              Name 449  "f32v1"
+                              Name 451  "f32v2"
+                              Name 469  "f32v"
+                              Name 471  "if32v"
+                              Name 520  "S"
+                              MemberName 520(S) 0  "x"
+                              MemberName 520(S) 1  "y"
+                              MemberName 520(S) 2  "z"
+                              Name 522  "B1"
+                              MemberName 522(B1) 0  "a"
+                              MemberName 522(B1) 1  "b"
+                              MemberName 522(B1) 2  "c"
+                              MemberName 522(B1) 3  "d"
+                              MemberName 522(B1) 4  "e"
+                              MemberName 522(B1) 5  "f"
+                              MemberName 522(B1) 6  "g"
+                              MemberName 522(B1) 7  "h"
+                              Name 524  ""
+                              Name 525  "sf16"
+                              Name 526  "sf"
+                              Name 527  "sd"
+                              Decorate 518 ArrayStride 16
+                              Decorate 519 ArrayStride 32
+                              MemberDecorate 520(S) 0 Offset 0
+                              MemberDecorate 520(S) 1 Offset 8
+                              MemberDecorate 520(S) 2 Offset 16
+                              Decorate 521 ArrayStride 32
+                              MemberDecorate 522(B1) 0 Offset 0
+                              MemberDecorate 522(B1) 1 Offset 8
+                              MemberDecorate 522(B1) 2 Offset 16
+                              MemberDecorate 522(B1) 3 Offset 32
+                              MemberDecorate 522(B1) 4 ColMajor
+                              MemberDecorate 522(B1) 4 Offset 64
+                              MemberDecorate 522(B1) 4 MatrixStride 16
+                              MemberDecorate 522(B1) 5 ColMajor
+                              MemberDecorate 522(B1) 5 Offset 96
+                              MemberDecorate 522(B1) 5 MatrixStride 16
+                              MemberDecorate 522(B1) 6 Offset 160
+                              MemberDecorate 522(B1) 7 Offset 192
+                              Decorate 522(B1) Block
+                              Decorate 524 DescriptorSet 0
+                              Decorate 525(sf16) SpecId 100
+                              Decorate 526(sf) SpecId 101
+                              Decorate 527(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
               26:             TypeFloat 32
@@ -166,47 +166,50 @@ spv.float32.frag
              198:             TypeInt 64 1
              199:             TypeVector 198(int64_t) 3
              200:             TypePointer Function 199(i64vec3)
-             207:             TypeInt 16 0
-             208:             TypeVector 207(int16_t) 3
-             209:             TypePointer Function 208(i16vec3)
-             213:             TypeVector 31(int) 3
-             214:             TypePointer Function 213(ivec3)
-             218:             TypeInt 64 0
-             219:             TypeVector 218(int64_t) 3
-             220:             TypePointer Function 219(i64vec3)
-             224:             TypeVector 26(float) 4
-             225:             TypePointer Function 224(fvec4)
-    374(ResType):             TypeStruct 153(fvec3) 193(ivec3)
-             409:             TypeMatrix 153(fvec3) 2
-             410:             TypePointer Function 409
-             428:             TypeMatrix 27(fvec2) 3
-             429:             TypePointer Function 428
-             434:             TypeMatrix 153(fvec3) 3
-             435:             TypePointer Function 434
-             439:             TypeMatrix 224(fvec4) 4
-             440:             TypePointer Function 439
-             467:             TypePointer Input 153(fvec3)
-      468(if32v):    467(ptr) Variable Input
-             469:             TypePointer Input 26(float)
-             506:    192(int) Constant 1
-             511:   26(float) Constant 1056964608
-             512:   27(fvec2) ConstantComposite 511 511
-             514:     31(int) Constant 2
-             515:             TypeArray 26(float) 514
-             516:             TypeArray 409 514
-          517(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
-             518:             TypeArray 517(S) 514
-         519(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 515 409 516 517(S) 518
-             520:             TypePointer Uniform 519(B1)
-             521:    520(ptr) Variable Uniform
-       522(sf16):172(float16_t) SpecConstant 12288
-         523(sf):   26(float) SpecConstant 1048576000
-         524(sd):149(float64_t) SpecConstant 0 1071644672
-             525:   26(float) SpecConstantOp 115 522(sf16)
-             526:   26(float) SpecConstantOp 115 522(sf16)
-             527:149(float64_t) SpecConstantOp 115 526
-             528:172(float16_t) SpecConstantOp 115 523(sf)
-             529:172(float16_t) SpecConstantOp 115 524(sd)
+             204:             TypeInt 8 0
+             205:             TypeVector 204(int8_t) 3
+             206:             TypePointer Function 205(i8vec3)
+             210:             TypeInt 16 0
+             211:             TypeVector 210(int16_t) 3
+             212:             TypePointer Function 211(i16vec3)
+             216:             TypeVector 31(int) 3
+             217:             TypePointer Function 216(ivec3)
+             221:             TypeInt 64 0
+             222:             TypeVector 221(int64_t) 3
+             223:             TypePointer Function 222(i64vec3)
+             227:             TypeVector 26(float) 4
+             228:             TypePointer Function 227(fvec4)
+    377(ResType):             TypeStruct 153(fvec3) 193(ivec3)
+             412:             TypeMatrix 153(fvec3) 2
+             413:             TypePointer Function 412
+             431:             TypeMatrix 27(fvec2) 3
+             432:             TypePointer Function 431
+             437:             TypeMatrix 153(fvec3) 3
+             438:             TypePointer Function 437
+             442:             TypeMatrix 227(fvec4) 4
+             443:             TypePointer Function 442
+             470:             TypePointer Input 153(fvec3)
+      471(if32v):    470(ptr) Variable Input
+             472:             TypePointer Input 26(float)
+             509:    192(int) Constant 1
+             514:   26(float) Constant 1056964608
+             515:   27(fvec2) ConstantComposite 514 514
+             517:     31(int) Constant 2
+             518:             TypeArray 26(float) 517
+             519:             TypeArray 412 517
+          520(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
+             521:             TypeArray 520(S) 517
+         522(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 518 412 519 520(S) 521
+             523:             TypePointer Uniform 522(B1)
+             524:    523(ptr) Variable Uniform
+       525(sf16):172(float16_t) SpecConstant 12288
+         526(sf):   26(float) SpecConstant 1048576000
+         527(sd):149(float64_t) SpecConstant 0 1071644672
+             528:   26(float) SpecConstantOp 115 525(sf16)
+             529:   26(float) SpecConstantOp 115 525(sf16)
+             530:149(float64_t) SpecConstantOp 115 529
+             531:172(float16_t) SpecConstantOp 115 526(sf)
+             532:172(float16_t) SpecConstantOp 115 527(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -363,10 +366,10 @@ spv.float32.frag
        189(i16v):    188(ptr) Variable Function
        195(i32v):    194(ptr) Variable Function
        201(i64v):    200(ptr) Variable Function
-        204(u8v):    182(ptr) Variable Function
-       210(u16v):    209(ptr) Variable Function
-       215(u32v):    214(ptr) Variable Function
-       221(u64v):    220(ptr) Variable Function
+        207(u8v):    206(ptr) Variable Function
+       213(u16v):    212(ptr) Variable Function
+       218(u32v):    217(ptr) Variable Function
+       224(u64v):    223(ptr) Variable Function
              156:  153(fvec3) Load 155(f32v)
              157:150(f64vec3) FConvert 156
                               Store 152(f64v) 157
@@ -400,401 +403,401 @@ spv.float32.frag
              202:  153(fvec3) Load 155(f32v)
              203:199(i64vec3) ConvertFToS 202
                               Store 201(i64v) 203
-             205:  153(fvec3) Load 155(f32v)
-             206: 181(i8vec3) ConvertFToS 205
-                              Store 204(u8v) 206
-             211:  153(fvec3) Load 155(f32v)
-             212:208(i16vec3) ConvertFToU 211
-                              Store 210(u16v) 212
-             216:  153(fvec3) Load 155(f32v)
-             217:  213(ivec3) ConvertFToU 216
-                              Store 215(u32v) 217
-             222:  153(fvec3) Load 155(f32v)
-             223:219(i64vec3) ConvertFToU 222
-                              Store 221(u64v) 223
+             208:  153(fvec3) Load 155(f32v)
+             209: 205(i8vec3) ConvertFToU 208
+                              Store 207(u8v) 209
+             214:  153(fvec3) Load 155(f32v)
+             215:211(i16vec3) ConvertFToU 214
+                              Store 213(u16v) 215
+             219:  153(fvec3) Load 155(f32v)
+             220:  216(ivec3) ConvertFToU 219
+                              Store 218(u32v) 220
+             225:  153(fvec3) Load 155(f32v)
+             226:222(i64vec3) ConvertFToU 225
+                              Store 224(u64v) 226
                               Return
                               FunctionEnd
 12(builtinAngleTrigFuncs():           2 Function None 3
               13:             Label
-      226(f32v2):    225(ptr) Variable Function
-      227(f32v1):    225(ptr) Variable Function
-             228:  224(fvec4) Load 227(f32v1)
-             229:  224(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 228
-                              Store 226(f32v2) 229
-             230:  224(fvec4) Load 227(f32v1)
-             231:  224(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 230
-                              Store 226(f32v2) 231
-             232:  224(fvec4) Load 227(f32v1)
-             233:  224(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 232
-                              Store 226(f32v2) 233
-             234:  224(fvec4) Load 227(f32v1)
-             235:  224(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 234
-                              Store 226(f32v2) 235
-             236:  224(fvec4) Load 227(f32v1)
-             237:  224(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 236
-                              Store 226(f32v2) 237
-             238:  224(fvec4) Load 227(f32v1)
-             239:  224(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 238
-                              Store 226(f32v2) 239
-             240:  224(fvec4) Load 227(f32v1)
-             241:  224(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 240
-                              Store 226(f32v2) 241
-             242:  224(fvec4) Load 227(f32v1)
-             243:  224(fvec4) Load 226(f32v2)
-             244:  224(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 242 243
-                              Store 226(f32v2) 244
-             245:  224(fvec4) Load 227(f32v1)
-             246:  224(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 245
-                              Store 226(f32v2) 246
-             247:  224(fvec4) Load 227(f32v1)
-             248:  224(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 247
-                              Store 226(f32v2) 248
-             249:  224(fvec4) Load 227(f32v1)
-             250:  224(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 249
-                              Store 226(f32v2) 250
-             251:  224(fvec4) Load 227(f32v1)
-             252:  224(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 251
-                              Store 226(f32v2) 252
-             253:  224(fvec4) Load 227(f32v1)
-             254:  224(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 253
-                              Store 226(f32v2) 254
-             255:  224(fvec4) Load 227(f32v1)
-             256:  224(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 255
-                              Store 226(f32v2) 256
-             257:  224(fvec4) Load 227(f32v1)
-             258:  224(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 257
-                              Store 226(f32v2) 258
+      229(f32v2):    228(ptr) Variable Function
+      230(f32v1):    228(ptr) Variable Function
+             231:  227(fvec4) Load 230(f32v1)
+             232:  227(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 231
+                              Store 229(f32v2) 232
+             233:  227(fvec4) Load 230(f32v1)
+             234:  227(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 233
+                              Store 229(f32v2) 234
+             235:  227(fvec4) Load 230(f32v1)
+             236:  227(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 235
+                              Store 229(f32v2) 236
+             237:  227(fvec4) Load 230(f32v1)
+             238:  227(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 237
+                              Store 229(f32v2) 238
+             239:  227(fvec4) Load 230(f32v1)
+             240:  227(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 239
+                              Store 229(f32v2) 240
+             241:  227(fvec4) Load 230(f32v1)
+             242:  227(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 241
+                              Store 229(f32v2) 242
+             243:  227(fvec4) Load 230(f32v1)
+             244:  227(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 243
+                              Store 229(f32v2) 244
+             245:  227(fvec4) Load 230(f32v1)
+             246:  227(fvec4) Load 229(f32v2)
+             247:  227(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 245 246
+                              Store 229(f32v2) 247
+             248:  227(fvec4) Load 230(f32v1)
+             249:  227(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 248
+                              Store 229(f32v2) 249
+             250:  227(fvec4) Load 230(f32v1)
+             251:  227(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 250
+                              Store 229(f32v2) 251
+             252:  227(fvec4) Load 230(f32v1)
+             253:  227(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 252
+                              Store 229(f32v2) 253
+             254:  227(fvec4) Load 230(f32v1)
+             255:  227(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 254
+                              Store 229(f32v2) 255
+             256:  227(fvec4) Load 230(f32v1)
+             257:  227(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 256
+                              Store 229(f32v2) 257
+             258:  227(fvec4) Load 230(f32v1)
+             259:  227(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 258
+                              Store 229(f32v2) 259
+             260:  227(fvec4) Load 230(f32v1)
+             261:  227(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 260
+                              Store 229(f32v2) 261
                               Return
                               FunctionEnd
 14(builtinExpFuncs():           2 Function None 3
               15:             Label
-      259(f32v2):     28(ptr) Variable Function
-      260(f32v1):     28(ptr) Variable Function
-             261:   27(fvec2) Load 260(f32v1)
-             262:   27(fvec2) Load 259(f32v2)
-             263:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 261 262
-                              Store 259(f32v2) 263
-             264:   27(fvec2) Load 260(f32v1)
-             265:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 264
-                              Store 259(f32v2) 265
-             266:   27(fvec2) Load 260(f32v1)
-             267:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 266
-                              Store 259(f32v2) 267
-             268:   27(fvec2) Load 260(f32v1)
-             269:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 268
-                              Store 259(f32v2) 269
-             270:   27(fvec2) Load 260(f32v1)
-             271:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 270
-                              Store 259(f32v2) 271
-             272:   27(fvec2) Load 260(f32v1)
-             273:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 272
-                              Store 259(f32v2) 273
-             274:   27(fvec2) Load 260(f32v1)
-             275:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 274
-                              Store 259(f32v2) 275
+      262(f32v2):     28(ptr) Variable Function
+      263(f32v1):     28(ptr) Variable Function
+             264:   27(fvec2) Load 263(f32v1)
+             265:   27(fvec2) Load 262(f32v2)
+             266:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 264 265
+                              Store 262(f32v2) 266
+             267:   27(fvec2) Load 263(f32v1)
+             268:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 267
+                              Store 262(f32v2) 268
+             269:   27(fvec2) Load 263(f32v1)
+             270:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 269
+                              Store 262(f32v2) 270
+             271:   27(fvec2) Load 263(f32v1)
+             272:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 271
+                              Store 262(f32v2) 272
+             273:   27(fvec2) Load 263(f32v1)
+             274:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 273
+                              Store 262(f32v2) 274
+             275:   27(fvec2) Load 263(f32v1)
+             276:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 275
+                              Store 262(f32v2) 276
+             277:   27(fvec2) Load 263(f32v1)
+             278:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 277
+                              Store 262(f32v2) 278
                               Return
                               FunctionEnd
 16(builtinCommonFuncs():           2 Function None 3
               17:             Label
-      276(f32v2):    154(ptr) Variable Function
-      277(f32v1):    154(ptr) Variable Function
-        298(f32):     33(ptr) Variable Function
-      302(f32v3):    154(ptr) Variable Function
-         342(bv):    159(ptr) Variable Function
-          363(b):    108(ptr) Variable Function
-         373(iv):    194(ptr) Variable Function
-             278:  153(fvec3) Load 277(f32v1)
-             279:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 278
-                              Store 276(f32v2) 279
-             280:  153(fvec3) Load 277(f32v1)
-             281:  153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 280
-                              Store 276(f32v2) 281
-             282:  153(fvec3) Load 277(f32v1)
-             283:  153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 282
-                              Store 276(f32v2) 283
-             284:  153(fvec3) Load 277(f32v1)
-             285:  153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 284
-                              Store 276(f32v2) 285
-             286:  153(fvec3) Load 277(f32v1)
-             287:  153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 286
-                              Store 276(f32v2) 287
-             288:  153(fvec3) Load 277(f32v1)
-             289:  153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 288
-                              Store 276(f32v2) 289
-             290:  153(fvec3) Load 277(f32v1)
-             291:  153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 290
-                              Store 276(f32v2) 291
-             292:  153(fvec3) Load 277(f32v1)
-             293:  153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 292
-                              Store 276(f32v2) 293
-             294:  153(fvec3) Load 277(f32v1)
-             295:  153(fvec3) Load 276(f32v2)
-             296:  153(fvec3) FMod 294 295
-                              Store 276(f32v2) 296
-             297:  153(fvec3) Load 277(f32v1)
-             299:   26(float) Load 298(f32)
-             300:  153(fvec3) CompositeConstruct 299 299 299
-             301:  153(fvec3) FMod 297 300
-                              Store 276(f32v2) 301
-             303:  153(fvec3) Load 277(f32v1)
-             304:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 303 276(f32v2)
-                              Store 302(f32v3) 304
-             305:  153(fvec3) Load 277(f32v1)
-             306:  153(fvec3) Load 276(f32v2)
-             307:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 305 306
-                              Store 302(f32v3) 307
-             308:  153(fvec3) Load 277(f32v1)
-             309:   26(float) Load 298(f32)
-             310:  153(fvec3) CompositeConstruct 309 309 309
-             311:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 310
-                              Store 302(f32v3) 311
-             312:  153(fvec3) Load 277(f32v1)
-             313:  153(fvec3) Load 276(f32v2)
-             314:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 312 313
-                              Store 302(f32v3) 314
-             315:  153(fvec3) Load 277(f32v1)
-             316:   26(float) Load 298(f32)
-             317:  153(fvec3) CompositeConstruct 316 316 316
-             318:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 317
-                              Store 302(f32v3) 318
-             319:  153(fvec3) Load 277(f32v1)
-             320:   26(float) Load 298(f32)
-             321:     33(ptr) AccessChain 276(f32v2) 32
-             322:   26(float) Load 321
-             323:  153(fvec3) CompositeConstruct 320 320 320
-             324:  153(fvec3) CompositeConstruct 322 322 322
-             325:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 323 324
-                              Store 302(f32v3) 325
-             326:  153(fvec3) Load 277(f32v1)
-             327:  153(fvec3) Load 276(f32v2)
-             328:   26(float) Load 298(f32)
-             329:  153(fvec3) CompositeConstruct 328 328 328
-             330:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 326 327 329
-                              Store 302(f32v3) 330
-             331:  153(fvec3) Load 277(f32v1)
-             332:  153(fvec3) Load 276(f32v2)
-             333:   26(float) Load 298(f32)
-             334:  153(fvec3) CompositeConstruct 333 333 333
-             335:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 331 332 334
-                              Store 302(f32v3) 335
-             336:  153(fvec3) Load 277(f32v1)
-             337:  153(fvec3) Load 276(f32v2)
-             338:  153(fvec3) Load 302(f32v3)
-             339:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 336 337 338
-                              Store 302(f32v3) 339
-             340:  153(fvec3) Load 277(f32v1)
-             341:  153(fvec3) Load 276(f32v2)
-             343:  158(bvec3) Load 342(bv)
-             344:  153(fvec3) Select 343 341 340
-                              Store 302(f32v3) 344
-             345:  153(fvec3) Load 277(f32v1)
-             346:  153(fvec3) Load 276(f32v2)
-             347:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 345 346
-                              Store 302(f32v3) 347
-             348:   26(float) Load 298(f32)
-             349:  153(fvec3) Load 302(f32v3)
-             350:  153(fvec3) CompositeConstruct 348 348 348
-             351:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 350 349
-                              Store 302(f32v3) 351
-             352:  153(fvec3) Load 277(f32v1)
-             353:  153(fvec3) Load 276(f32v2)
-             354:  153(fvec3) Load 302(f32v3)
-             355:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 352 353 354
-                              Store 302(f32v3) 355
-             356:   26(float) Load 298(f32)
-             357:     33(ptr) AccessChain 277(f32v1) 32
-             358:   26(float) Load 357
-             359:  153(fvec3) Load 276(f32v2)
-             360:  153(fvec3) CompositeConstruct 356 356 356
-             361:  153(fvec3) CompositeConstruct 358 358 358
-             362:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 360 361 359
-                              Store 302(f32v3) 362
-             364:   26(float) Load 298(f32)
-             365:   107(bool) IsNan 364
-                              Store 363(b) 365
-             366:  153(fvec3) Load 277(f32v1)
-             367:  158(bvec3) IsInf 366
-                              Store 342(bv) 367
-             368:  153(fvec3) Load 277(f32v1)
-             369:  153(fvec3) Load 276(f32v2)
-             370:  153(fvec3) Load 302(f32v3)
-             371:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 368 369 370
-                              Store 302(f32v3) 371
-             372:  153(fvec3) Load 277(f32v1)
-             375:374(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 372
-             376:  193(ivec3) CompositeExtract 375 1
-                              Store 373(iv) 376
-             377:  153(fvec3) CompositeExtract 375 0
-                              Store 276(f32v2) 377
-             378:  153(fvec3) Load 277(f32v1)
-             379:  193(ivec3) Load 373(iv)
-             380:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 378 379
-                              Store 276(f32v2) 380
+      279(f32v2):    154(ptr) Variable Function
+      280(f32v1):    154(ptr) Variable Function
+        301(f32):     33(ptr) Variable Function
+      305(f32v3):    154(ptr) Variable Function
+         345(bv):    159(ptr) Variable Function
+          366(b):    108(ptr) Variable Function
+         376(iv):    194(ptr) Variable Function
+             281:  153(fvec3) Load 280(f32v1)
+             282:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 281
+                              Store 279(f32v2) 282
+             283:  153(fvec3) Load 280(f32v1)
+             284:  153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 283
+                              Store 279(f32v2) 284
+             285:  153(fvec3) Load 280(f32v1)
+             286:  153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 285
+                              Store 279(f32v2) 286
+             287:  153(fvec3) Load 280(f32v1)
+             288:  153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 287
+                              Store 279(f32v2) 288
+             289:  153(fvec3) Load 280(f32v1)
+             290:  153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 289
+                              Store 279(f32v2) 290
+             291:  153(fvec3) Load 280(f32v1)
+             292:  153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 291
+                              Store 279(f32v2) 292
+             293:  153(fvec3) Load 280(f32v1)
+             294:  153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 293
+                              Store 279(f32v2) 294
+             295:  153(fvec3) Load 280(f32v1)
+             296:  153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 295
+                              Store 279(f32v2) 296
+             297:  153(fvec3) Load 280(f32v1)
+             298:  153(fvec3) Load 279(f32v2)
+             299:  153(fvec3) FMod 297 298
+                              Store 279(f32v2) 299
+             300:  153(fvec3) Load 280(f32v1)
+             302:   26(float) Load 301(f32)
+             303:  153(fvec3) CompositeConstruct 302 302 302
+             304:  153(fvec3) FMod 300 303
+                              Store 279(f32v2) 304
+             306:  153(fvec3) Load 280(f32v1)
+             307:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 306 279(f32v2)
+                              Store 305(f32v3) 307
+             308:  153(fvec3) Load 280(f32v1)
+             309:  153(fvec3) Load 279(f32v2)
+             310:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 309
+                              Store 305(f32v3) 310
+             311:  153(fvec3) Load 280(f32v1)
+             312:   26(float) Load 301(f32)
+             313:  153(fvec3) CompositeConstruct 312 312 312
+             314:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 311 313
+                              Store 305(f32v3) 314
+             315:  153(fvec3) Load 280(f32v1)
+             316:  153(fvec3) Load 279(f32v2)
+             317:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 316
+                              Store 305(f32v3) 317
+             318:  153(fvec3) Load 280(f32v1)
+             319:   26(float) Load 301(f32)
+             320:  153(fvec3) CompositeConstruct 319 319 319
+             321:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 318 320
+                              Store 305(f32v3) 321
+             322:  153(fvec3) Load 280(f32v1)
+             323:   26(float) Load 301(f32)
+             324:     33(ptr) AccessChain 279(f32v2) 32
+             325:   26(float) Load 324
+             326:  153(fvec3) CompositeConstruct 323 323 323
+             327:  153(fvec3) CompositeConstruct 325 325 325
+             328:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 322 326 327
+                              Store 305(f32v3) 328
+             329:  153(fvec3) Load 280(f32v1)
+             330:  153(fvec3) Load 279(f32v2)
+             331:   26(float) Load 301(f32)
+             332:  153(fvec3) CompositeConstruct 331 331 331
+             333:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 329 330 332
+                              Store 305(f32v3) 333
+             334:  153(fvec3) Load 280(f32v1)
+             335:  153(fvec3) Load 279(f32v2)
+             336:   26(float) Load 301(f32)
+             337:  153(fvec3) CompositeConstruct 336 336 336
+             338:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 334 335 337
+                              Store 305(f32v3) 338
+             339:  153(fvec3) Load 280(f32v1)
+             340:  153(fvec3) Load 279(f32v2)
+             341:  153(fvec3) Load 305(f32v3)
+             342:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 339 340 341
+                              Store 305(f32v3) 342
+             343:  153(fvec3) Load 280(f32v1)
+             344:  153(fvec3) Load 279(f32v2)
+             346:  158(bvec3) Load 345(bv)
+             347:  153(fvec3) Select 346 344 343
+                              Store 305(f32v3) 347
+             348:  153(fvec3) Load 280(f32v1)
+             349:  153(fvec3) Load 279(f32v2)
+             350:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 348 349
+                              Store 305(f32v3) 350
+             351:   26(float) Load 301(f32)
+             352:  153(fvec3) Load 305(f32v3)
+             353:  153(fvec3) CompositeConstruct 351 351 351
+             354:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 353 352
+                              Store 305(f32v3) 354
+             355:  153(fvec3) Load 280(f32v1)
+             356:  153(fvec3) Load 279(f32v2)
+             357:  153(fvec3) Load 305(f32v3)
+             358:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 355 356 357
+                              Store 305(f32v3) 358
+             359:   26(float) Load 301(f32)
+             360:     33(ptr) AccessChain 280(f32v1) 32
+             361:   26(float) Load 360
+             362:  153(fvec3) Load 279(f32v2)
+             363:  153(fvec3) CompositeConstruct 359 359 359
+             364:  153(fvec3) CompositeConstruct 361 361 361
+             365:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 363 364 362
+                              Store 305(f32v3) 365
+             367:   26(float) Load 301(f32)
+             368:   107(bool) IsNan 367
+                              Store 366(b) 368
+             369:  153(fvec3) Load 280(f32v1)
+             370:  158(bvec3) IsInf 369
+                              Store 345(bv) 370
+             371:  153(fvec3) Load 280(f32v1)
+             372:  153(fvec3) Load 279(f32v2)
+             373:  153(fvec3) Load 305(f32v3)
+             374:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 371 372 373
+                              Store 305(f32v3) 374
+             375:  153(fvec3) Load 280(f32v1)
+             378:377(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 375
+             379:  193(ivec3) CompositeExtract 378 1
+                              Store 376(iv) 379
+             380:  153(fvec3) CompositeExtract 378 0
+                              Store 279(f32v2) 380
+             381:  153(fvec3) Load 280(f32v1)
+             382:  193(ivec3) Load 376(iv)
+             383:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 381 382
+                              Store 279(f32v2) 383
                               Return
                               FunctionEnd
 18(builtinGeometryFuncs():           2 Function None 3
               19:             Label
-        381(f32):     33(ptr) Variable Function
-      382(f32v1):    154(ptr) Variable Function
-      386(f32v2):    154(ptr) Variable Function
-      392(f32v3):    154(ptr) Variable Function
-             383:  153(fvec3) Load 382(f32v1)
-             384:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 383
-                              Store 381(f32) 384
-             385:  153(fvec3) Load 382(f32v1)
-             387:  153(fvec3) Load 386(f32v2)
-             388:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 385 387
-                              Store 381(f32) 388
-             389:  153(fvec3) Load 382(f32v1)
-             390:  153(fvec3) Load 386(f32v2)
-             391:   26(float) Dot 389 390
-                              Store 381(f32) 391
-             393:  153(fvec3) Load 382(f32v1)
-             394:  153(fvec3) Load 386(f32v2)
-             395:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 393 394
-                              Store 392(f32v3) 395
-             396:  153(fvec3) Load 382(f32v1)
-             397:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 396
-                              Store 386(f32v2) 397
-             398:  153(fvec3) Load 382(f32v1)
-             399:  153(fvec3) Load 386(f32v2)
-             400:  153(fvec3) Load 392(f32v3)
-             401:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 398 399 400
-                              Store 392(f32v3) 401
-             402:  153(fvec3) Load 382(f32v1)
-             403:  153(fvec3) Load 386(f32v2)
-             404:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 402 403
-                              Store 392(f32v3) 404
-             405:  153(fvec3) Load 382(f32v1)
-             406:  153(fvec3) Load 386(f32v2)
-             407:   26(float) Load 381(f32)
-             408:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 405 406 407
-                              Store 392(f32v3) 408
+        384(f32):     33(ptr) Variable Function
+      385(f32v1):    154(ptr) Variable Function
+      389(f32v2):    154(ptr) Variable Function
+      395(f32v3):    154(ptr) Variable Function
+             386:  153(fvec3) Load 385(f32v1)
+             387:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 386
+                              Store 384(f32) 387
+             388:  153(fvec3) Load 385(f32v1)
+             390:  153(fvec3) Load 389(f32v2)
+             391:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 388 390
+                              Store 384(f32) 391
+             392:  153(fvec3) Load 385(f32v1)
+             393:  153(fvec3) Load 389(f32v2)
+             394:   26(float) Dot 392 393
+                              Store 384(f32) 394
+             396:  153(fvec3) Load 385(f32v1)
+             397:  153(fvec3) Load 389(f32v2)
+             398:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 396 397
+                              Store 395(f32v3) 398
+             399:  153(fvec3) Load 385(f32v1)
+             400:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 399
+                              Store 389(f32v2) 400
+             401:  153(fvec3) Load 385(f32v1)
+             402:  153(fvec3) Load 389(f32v2)
+             403:  153(fvec3) Load 395(f32v3)
+             404:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 401 402 403
+                              Store 395(f32v3) 404
+             405:  153(fvec3) Load 385(f32v1)
+             406:  153(fvec3) Load 389(f32v2)
+             407:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 405 406
+                              Store 395(f32v3) 407
+             408:  153(fvec3) Load 385(f32v1)
+             409:  153(fvec3) Load 389(f32v2)
+             410:   26(float) Load 384(f32)
+             411:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 408 409 410
+                              Store 395(f32v3) 411
                               Return
                               FunctionEnd
 20(builtinMatrixFuncs():           2 Function None 3
               21:             Label
-      411(f32m3):    410(ptr) Variable Function
-      412(f32m1):    410(ptr) Variable Function
-      414(f32m2):    410(ptr) Variable Function
-      423(f32v1):    154(ptr) Variable Function
-      425(f32v2):     28(ptr) Variable Function
-      430(f32m4):    429(ptr) Variable Function
-        433(f32):     33(ptr) Variable Function
-      436(f32m5):    435(ptr) Variable Function
-      441(f32m6):    440(ptr) Variable Function
-      442(f32m7):    440(ptr) Variable Function
-             413:         409 Load 412(f32m1)
-             415:         409 Load 414(f32m2)
-             416:  153(fvec3) CompositeExtract 413 0
-             417:  153(fvec3) CompositeExtract 415 0
-             418:  153(fvec3) FMul 416 417
-             419:  153(fvec3) CompositeExtract 413 1
-             420:  153(fvec3) CompositeExtract 415 1
+      414(f32m3):    413(ptr) Variable Function
+      415(f32m1):    413(ptr) Variable Function
+      417(f32m2):    413(ptr) Variable Function
+      426(f32v1):    154(ptr) Variable Function
+      428(f32v2):     28(ptr) Variable Function
+      433(f32m4):    432(ptr) Variable Function
+        436(f32):     33(ptr) Variable Function
+      439(f32m5):    438(ptr) Variable Function
+      444(f32m6):    443(ptr) Variable Function
+      445(f32m7):    443(ptr) Variable Function
+             416:         412 Load 415(f32m1)
+             418:         412 Load 417(f32m2)
+             419:  153(fvec3) CompositeExtract 416 0
+             420:  153(fvec3) CompositeExtract 418 0
              421:  153(fvec3) FMul 419 420
-             422:         409 CompositeConstruct 418 421
-                              Store 411(f32m3) 422
-             424:  153(fvec3) Load 423(f32v1)
-             426:   27(fvec2) Load 425(f32v2)
-             427:         409 OuterProduct 424 426
-                              Store 412(f32m1) 427
-             431:         409 Load 412(f32m1)
-             432:         428 Transpose 431
-                              Store 430(f32m4) 432
-             437:         434 Load 436(f32m5)
-             438:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 437
-                              Store 433(f32) 438
-             443:         439 Load 442(f32m7)
-             444:         439 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 443
-                              Store 441(f32m6) 444
+             422:  153(fvec3) CompositeExtract 416 1
+             423:  153(fvec3) CompositeExtract 418 1
+             424:  153(fvec3) FMul 422 423
+             425:         412 CompositeConstruct 421 424
+                              Store 414(f32m3) 425
+             427:  153(fvec3) Load 426(f32v1)
+             429:   27(fvec2) Load 428(f32v2)
+             430:         412 OuterProduct 427 429
+                              Store 415(f32m1) 430
+             434:         412 Load 415(f32m1)
+             435:         431 Transpose 434
+                              Store 433(f32m4) 435
+             440:         437 Load 439(f32m5)
+             441:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 440
+                              Store 436(f32) 441
+             446:         442 Load 445(f32m7)
+             447:         442 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 446
+                              Store 444(f32m6) 447
                               Return
                               FunctionEnd
 22(builtinVecRelFuncs():           2 Function None 3
               23:             Label
-         445(bv):    159(ptr) Variable Function
-      446(f32v1):    154(ptr) Variable Function
-      448(f32v2):    154(ptr) Variable Function
-             447:  153(fvec3) Load 446(f32v1)
-             449:  153(fvec3) Load 448(f32v2)
-             450:  158(bvec3) FOrdLessThan 447 449
-                              Store 445(bv) 450
-             451:  153(fvec3) Load 446(f32v1)
-             452:  153(fvec3) Load 448(f32v2)
-             453:  158(bvec3) FOrdLessThanEqual 451 452
-                              Store 445(bv) 453
-             454:  153(fvec3) Load 446(f32v1)
-             455:  153(fvec3) Load 448(f32v2)
-             456:  158(bvec3) FOrdGreaterThan 454 455
-                              Store 445(bv) 456
-             457:  153(fvec3) Load 446(f32v1)
-             458:  153(fvec3) Load 448(f32v2)
-             459:  158(bvec3) FOrdGreaterThanEqual 457 458
-                              Store 445(bv) 459
-             460:  153(fvec3) Load 446(f32v1)
-             461:  153(fvec3) Load 448(f32v2)
-             462:  158(bvec3) FOrdEqual 460 461
-                              Store 445(bv) 462
-             463:  153(fvec3) Load 446(f32v1)
-             464:  153(fvec3) Load 448(f32v2)
-             465:  158(bvec3) FOrdNotEqual 463 464
-                              Store 445(bv) 465
+         448(bv):    159(ptr) Variable Function
+      449(f32v1):    154(ptr) Variable Function
+      451(f32v2):    154(ptr) Variable Function
+             450:  153(fvec3) Load 449(f32v1)
+             452:  153(fvec3) Load 451(f32v2)
+             453:  158(bvec3) FOrdLessThan 450 452
+                              Store 448(bv) 453
+             454:  153(fvec3) Load 449(f32v1)
+             455:  153(fvec3) Load 451(f32v2)
+             456:  158(bvec3) FOrdLessThanEqual 454 455
+                              Store 448(bv) 456
+             457:  153(fvec3) Load 449(f32v1)
+             458:  153(fvec3) Load 451(f32v2)
+             459:  158(bvec3) FOrdGreaterThan 457 458
+                              Store 448(bv) 459
+             460:  153(fvec3) Load 449(f32v1)
+             461:  153(fvec3) Load 451(f32v2)
+             462:  158(bvec3) FOrdGreaterThanEqual 460 461
+                              Store 448(bv) 462
+             463:  153(fvec3) Load 449(f32v1)
+             464:  153(fvec3) Load 451(f32v2)
+             465:  158(bvec3) FOrdEqual 463 464
+                              Store 448(bv) 465
+             466:  153(fvec3) Load 449(f32v1)
+             467:  153(fvec3) Load 451(f32v2)
+             468:  158(bvec3) FOrdNotEqual 466 467
+                              Store 448(bv) 468
                               Return
                               FunctionEnd
 24(builtinFragProcFuncs():           2 Function None 3
               25:             Label
-       466(f32v):    154(ptr) Variable Function
-             470:    469(ptr) AccessChain 468(if32v) 32
-             471:   26(float) Load 470
-             472:   26(float) DPdx 471
-             473:     33(ptr) AccessChain 466(f32v) 32
-                              Store 473 472
-             474:    469(ptr) AccessChain 468(if32v) 88
-             475:   26(float) Load 474
-             476:   26(float) DPdy 475
-             477:     33(ptr) AccessChain 466(f32v) 88
-                              Store 477 476
-             478:  153(fvec3) Load 468(if32v)
-             479:   27(fvec2) VectorShuffle 478 478 0 1
-             480:   27(fvec2) DPdxFine 479
-             481:  153(fvec3) Load 466(f32v)
-             482:  153(fvec3) VectorShuffle 481 480 3 4 2
-                              Store 466(f32v) 482
-             483:  153(fvec3) Load 468(if32v)
-             484:   27(fvec2) VectorShuffle 483 483 0 1
-             485:   27(fvec2) DPdyFine 484
-             486:  153(fvec3) Load 466(f32v)
-             487:  153(fvec3) VectorShuffle 486 485 3 4 2
-                              Store 466(f32v) 487
-             488:  153(fvec3) Load 468(if32v)
-             489:  153(fvec3) DPdxCoarse 488
-                              Store 466(f32v) 489
-             490:  153(fvec3) Load 468(if32v)
-             491:  153(fvec3) DPdxCoarse 490
-                              Store 466(f32v) 491
-             492:    469(ptr) AccessChain 468(if32v) 32
-             493:   26(float) Load 492
-             494:   26(float) Fwidth 493
-             495:     33(ptr) AccessChain 466(f32v) 32
-                              Store 495 494
-             496:  153(fvec3) Load 468(if32v)
-             497:   27(fvec2) VectorShuffle 496 496 0 1
-             498:   27(fvec2) FwidthFine 497
-             499:  153(fvec3) Load 466(f32v)
-             500:  153(fvec3) VectorShuffle 499 498 3 4 2
-                              Store 466(f32v) 500
-             501:  153(fvec3) Load 468(if32v)
-             502:  153(fvec3) FwidthCoarse 501
-                              Store 466(f32v) 502
-             503:    469(ptr) AccessChain 468(if32v) 32
-             504:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 503
-             505:     33(ptr) AccessChain 466(f32v) 32
-                              Store 505 504
-             507:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 468(if32v) 506
-             508:   27(fvec2) VectorShuffle 507 507 0 1
-             509:  153(fvec3) Load 466(f32v)
-             510:  153(fvec3) VectorShuffle 509 508 3 4 2
-                              Store 466(f32v) 510
-             513:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 468(if32v) 512
-                              Store 466(f32v) 513
+       469(f32v):    154(ptr) Variable Function
+             473:    472(ptr) AccessChain 471(if32v) 32
+             474:   26(float) Load 473
+             475:   26(float) DPdx 474
+             476:     33(ptr) AccessChain 469(f32v) 32
+                              Store 476 475
+             477:    472(ptr) AccessChain 471(if32v) 88
+             478:   26(float) Load 477
+             479:   26(float) DPdy 478
+             480:     33(ptr) AccessChain 469(f32v) 88
+                              Store 480 479
+             481:  153(fvec3) Load 471(if32v)
+             482:   27(fvec2) VectorShuffle 481 481 0 1
+             483:   27(fvec2) DPdxFine 482
+             484:  153(fvec3) Load 469(f32v)
+             485:  153(fvec3) VectorShuffle 484 483 3 4 2
+                              Store 469(f32v) 485
+             486:  153(fvec3) Load 471(if32v)
+             487:   27(fvec2) VectorShuffle 486 486 0 1
+             488:   27(fvec2) DPdyFine 487
+             489:  153(fvec3) Load 469(f32v)
+             490:  153(fvec3) VectorShuffle 489 488 3 4 2
+                              Store 469(f32v) 490
+             491:  153(fvec3) Load 471(if32v)
+             492:  153(fvec3) DPdxCoarse 491
+                              Store 469(f32v) 492
+             493:  153(fvec3) Load 471(if32v)
+             494:  153(fvec3) DPdxCoarse 493
+                              Store 469(f32v) 494
+             495:    472(ptr) AccessChain 471(if32v) 32
+             496:   26(float) Load 495
+             497:   26(float) Fwidth 496
+             498:     33(ptr) AccessChain 469(f32v) 32
+                              Store 498 497
+             499:  153(fvec3) Load 471(if32v)
+             500:   27(fvec2) VectorShuffle 499 499 0 1
+             501:   27(fvec2) FwidthFine 500
+             502:  153(fvec3) Load 469(f32v)
+             503:  153(fvec3) VectorShuffle 502 501 3 4 2
+                              Store 469(f32v) 503
+             504:  153(fvec3) Load 471(if32v)
+             505:  153(fvec3) FwidthCoarse 504
+                              Store 469(f32v) 505
+             506:    472(ptr) AccessChain 471(if32v) 32
+             507:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506
+             508:     33(ptr) AccessChain 469(f32v) 32
+                              Store 508 507
+             510:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 509
+             511:   27(fvec2) VectorShuffle 510 510 0 1
+             512:  153(fvec3) Load 469(f32v)
+             513:  153(fvec3) VectorShuffle 512 511 3 4 2
+                              Store 469(f32v) 513
+             516:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 515
+                              Store 469(f32v) 516
                               Return
                               FunctionEnd
index ebc0a40..4913954 100644 (file)
@@ -1,7 +1,7 @@
 spv.float64.frag
 // Module Version 10300
 // Generated by (magic number): 80007
-// Id's are bound by 521
+// Id's are bound by 524
 
                               Capability Shader
                               Capability Float16
@@ -13,7 +13,7 @@ spv.float64.frag
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 458
+                              EntryPoint Fragment 4  "main" 461
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
@@ -47,82 +47,82 @@ spv.float64.frag
                               Name 179  "i16v"
                               Name 185  "i32v"
                               Name 191  "i64v"
-                              Name 194  "u8v"
-                              Name 200  "u16v"
-                              Name 205  "u32v"
-                              Name 211  "u64v"
-                              Name 216  "f64v2"
-                              Name 217  "f64v1"
-                              Name 249  "f64v2"
-                              Name 250  "f64v1"
-                              Name 266  "f64v2"
-                              Name 267  "f64v1"
-                              Name 288  "f64"
-                              Name 292  "f64v3"
-                              Name 332  "bv"
-                              Name 353  "b"
-                              Name 363  "iv"
-                              Name 364  "ResType"
-                              Name 371  "f64"
-                              Name 372  "f64v1"
-                              Name 376  "f64v2"
-                              Name 382  "f64v3"
-                              Name 401  "f64m3"
-                              Name 402  "f64m1"
-                              Name 404  "f64m2"
-                              Name 413  "f64v1"
-                              Name 415  "f64v2"
-                              Name 420  "f64m4"
-                              Name 423  "f64"
-                              Name 426  "f64m5"
-                              Name 431  "f64m6"
-                              Name 432  "f64m7"
-                              Name 435  "bv"
-                              Name 436  "f64v1"
-                              Name 438  "f64v2"
-                              Name 456  "f64v"
-                              Name 458  "if64v"
-                              Name 507  "S"
-                              MemberName 507(S) 0  "x"
-                              MemberName 507(S) 1  "y"
-                              MemberName 507(S) 2  "z"
-                              Name 509  "B1"
-                              MemberName 509(B1) 0  "a"
-                              MemberName 509(B1) 1  "b"
-                              MemberName 509(B1) 2  "c"
-                              MemberName 509(B1) 3  "d"
-                              MemberName 509(B1) 4  "e"
-                              MemberName 509(B1) 5  "f"
-                              MemberName 509(B1) 6  "g"
-                              MemberName 509(B1) 7  "h"
-                              Name 511  ""
-                              Name 512  "sf16"
-                              Name 514  "sf"
-                              Name 515  "sd"
-                              Decorate 458(if64v) Flat
-                              Decorate 505 ArrayStride 16
-                              Decorate 506 ArrayStride 64
-                              MemberDecorate 507(S) 0 Offset 0
-                              MemberDecorate 507(S) 1 Offset 16
-                              MemberDecorate 507(S) 2 Offset 32
-                              Decorate 508 ArrayStride 64
-                              MemberDecorate 509(B1) 0 Offset 0
-                              MemberDecorate 509(B1) 1 Offset 16
-                              MemberDecorate 509(B1) 2 Offset 32
-                              MemberDecorate 509(B1) 3 Offset 64
-                              MemberDecorate 509(B1) 4 ColMajor
-                              MemberDecorate 509(B1) 4 Offset 96
-                              MemberDecorate 509(B1) 4 MatrixStride 32
-                              MemberDecorate 509(B1) 5 ColMajor
-                              MemberDecorate 509(B1) 5 Offset 160
-                              MemberDecorate 509(B1) 5 MatrixStride 32
-                              MemberDecorate 509(B1) 6 Offset 288
-                              MemberDecorate 509(B1) 7 Offset 352
-                              Decorate 509(B1) Block
-                              Decorate 511 DescriptorSet 0
-                              Decorate 512(sf16) SpecId 100
-                              Decorate 514(sf) SpecId 101
-                              Decorate 515(sd) SpecId 102
+                              Name 197  "u8v"
+                              Name 203  "u16v"
+                              Name 208  "u32v"
+                              Name 214  "u64v"
+                              Name 219  "f64v2"
+                              Name 220  "f64v1"
+                              Name 252  "f64v2"
+                              Name 253  "f64v1"
+                              Name 269  "f64v2"
+                              Name 270  "f64v1"
+                              Name 291  "f64"
+                              Name 295  "f64v3"
+                              Name 335  "bv"
+                              Name 356  "b"
+                              Name 366  "iv"
+                              Name 367  "ResType"
+                              Name 374  "f64"
+                              Name 375  "f64v1"
+                              Name 379  "f64v2"
+                              Name 385  "f64v3"
+                              Name 404  "f64m3"
+                              Name 405  "f64m1"
+                              Name 407  "f64m2"
+                              Name 416  "f64v1"
+                              Name 418  "f64v2"
+                              Name 423  "f64m4"
+                              Name 426  "f64"
+                              Name 429  "f64m5"
+                              Name 434  "f64m6"
+                              Name 435  "f64m7"
+                              Name 438  "bv"
+                              Name 439  "f64v1"
+                              Name 441  "f64v2"
+                              Name 459  "f64v"
+                              Name 461  "if64v"
+                              Name 510  "S"
+                              MemberName 510(S) 0  "x"
+                              MemberName 510(S) 1  "y"
+                              MemberName 510(S) 2  "z"
+                              Name 512  "B1"
+                              MemberName 512(B1) 0  "a"
+                              MemberName 512(B1) 1  "b"
+                              MemberName 512(B1) 2  "c"
+                              MemberName 512(B1) 3  "d"
+                              MemberName 512(B1) 4  "e"
+                              MemberName 512(B1) 5  "f"
+                              MemberName 512(B1) 6  "g"
+                              MemberName 512(B1) 7  "h"
+                              Name 514  ""
+                              Name 515  "sf16"
+                              Name 517  "sf"
+                              Name 518  "sd"
+                              Decorate 461(if64v) Flat
+                              Decorate 508 ArrayStride 16
+                              Decorate 509 ArrayStride 64
+                              MemberDecorate 510(S) 0 Offset 0
+                              MemberDecorate 510(S) 1 Offset 16
+                              MemberDecorate 510(S) 2 Offset 32
+                              Decorate 511 ArrayStride 64
+                              MemberDecorate 512(B1) 0 Offset 0
+                              MemberDecorate 512(B1) 1 Offset 16
+                              MemberDecorate 512(B1) 2 Offset 32
+                              MemberDecorate 512(B1) 3 Offset 64
+                              MemberDecorate 512(B1) 4 ColMajor
+                              MemberDecorate 512(B1) 4 Offset 96
+                              MemberDecorate 512(B1) 4 MatrixStride 32
+                              MemberDecorate 512(B1) 5 ColMajor
+                              MemberDecorate 512(B1) 5 Offset 160
+                              MemberDecorate 512(B1) 5 MatrixStride 32
+                              MemberDecorate 512(B1) 6 Offset 288
+                              MemberDecorate 512(B1) 7 Offset 352
+                              Decorate 512(B1) Block
+                              Decorate 514 DescriptorSet 0
+                              Decorate 515(sf16) SpecId 100
+                              Decorate 517(sf) SpecId 101
+                              Decorate 518(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
               26:             TypeFloat 64
@@ -163,48 +163,51 @@ spv.float64.frag
              188:             TypeInt 64 1
              189:             TypeVector 188(int64_t) 3
              190:             TypePointer Function 189(i64vec3)
-             197:             TypeInt 16 0
-             198:             TypeVector 197(int16_t) 3
-             199:             TypePointer Function 198(i16vec3)
-             203:             TypeVector 31(int) 3
-             204:             TypePointer Function 203(ivec3)
-             208:             TypeInt 64 0
-             209:             TypeVector 208(int64_t) 3
-             210:             TypePointer Function 209(i64vec3)
-             214:             TypeVector 26(float64_t) 4
-             215:             TypePointer Function 214(f64vec4)
-    364(ResType):             TypeStruct 149(f64vec3) 183(ivec3)
-             399:             TypeMatrix 149(f64vec3) 2
-             400:             TypePointer Function 399
-             418:             TypeMatrix 27(f64vec2) 3
-             419:             TypePointer Function 418
-             424:             TypeMatrix 149(f64vec3) 3
-             425:             TypePointer Function 424
-             429:             TypeMatrix 214(f64vec4) 4
-             430:             TypePointer Function 429
-             457:             TypePointer Input 149(f64vec3)
-      458(if64v):    457(ptr) Variable Input
-             459:             TypePointer Input 26(float64_t)
-             496:    182(int) Constant 1
-             501:26(float64_t) Constant 0 1071644672
-             502: 27(f64vec2) ConstantComposite 501 501
-             504:     31(int) Constant 2
-             505:             TypeArray 26(float64_t) 504
-             506:             TypeArray 399 504
-          507(S):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3)
-             508:             TypeArray 507(S) 504
-         509(B1):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 505 399 506 507(S) 508
-             510:             TypePointer Uniform 509(B1)
-             511:    510(ptr) Variable Uniform
-       512(sf16):162(float16_t) SpecConstant 12288
-             513:             TypeFloat 32
-         514(sf):  513(float) SpecConstant 1048576000
-         515(sd):26(float64_t) SpecConstant 0 1071644672
-             516:  513(float) SpecConstantOp 115 512(sf16)
-             517:  513(float) SpecConstantOp 115 512(sf16)
-             518:26(float64_t) SpecConstantOp 115 517
-             519:162(float16_t) SpecConstantOp 115 514(sf)
-             520:162(float16_t) SpecConstantOp 115 515(sd)
+             194:             TypeInt 8 0
+             195:             TypeVector 194(int8_t) 3
+             196:             TypePointer Function 195(i8vec3)
+             200:             TypeInt 16 0
+             201:             TypeVector 200(int16_t) 3
+             202:             TypePointer Function 201(i16vec3)
+             206:             TypeVector 31(int) 3
+             207:             TypePointer Function 206(ivec3)
+             211:             TypeInt 64 0
+             212:             TypeVector 211(int64_t) 3
+             213:             TypePointer Function 212(i64vec3)
+             217:             TypeVector 26(float64_t) 4
+             218:             TypePointer Function 217(f64vec4)
+    367(ResType):             TypeStruct 149(f64vec3) 183(ivec3)
+             402:             TypeMatrix 149(f64vec3) 2
+             403:             TypePointer Function 402
+             421:             TypeMatrix 27(f64vec2) 3
+             422:             TypePointer Function 421
+             427:             TypeMatrix 149(f64vec3) 3
+             428:             TypePointer Function 427
+             432:             TypeMatrix 217(f64vec4) 4
+             433:             TypePointer Function 432
+             460:             TypePointer Input 149(f64vec3)
+      461(if64v):    460(ptr) Variable Input
+             462:             TypePointer Input 26(float64_t)
+             499:    182(int) Constant 1
+             504:26(float64_t) Constant 0 1071644672
+             505: 27(f64vec2) ConstantComposite 504 504
+             507:     31(int) Constant 2
+             508:             TypeArray 26(float64_t) 507
+             509:             TypeArray 402 507
+          510(S):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3)
+             511:             TypeArray 510(S) 507
+         512(B1):             TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 508 402 509 510(S) 511
+             513:             TypePointer Uniform 512(B1)
+             514:    513(ptr) Variable Uniform
+       515(sf16):162(float16_t) SpecConstant 12288
+             516:             TypeFloat 32
+         517(sf):  516(float) SpecConstant 1048576000
+         518(sd):26(float64_t) SpecConstant 0 1071644672
+             519:  516(float) SpecConstantOp 115 515(sf16)
+             520:  516(float) SpecConstantOp 115 515(sf16)
+             521:26(float64_t) SpecConstantOp 115 520
+             522:162(float16_t) SpecConstantOp 115 517(sf)
+             523:162(float16_t) SpecConstantOp 115 518(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -360,10 +363,10 @@ spv.float64.frag
        179(i16v):    178(ptr) Variable Function
        185(i32v):    184(ptr) Variable Function
        191(i64v):    190(ptr) Variable Function
-        194(u8v):    172(ptr) Variable Function
-       200(u16v):    199(ptr) Variable Function
-       205(u32v):    204(ptr) Variable Function
-       211(u64v):    210(ptr) Variable Function
+        197(u8v):    196(ptr) Variable Function
+       203(u16v):    202(ptr) Variable Function
+       208(u32v):    207(ptr) Variable Function
+       214(u64v):    213(ptr) Variable Function
              155:  152(bvec3) Load 154(bv)
              159:149(f64vec3) Select 155 158 157
                               Store 151(f64v) 159
@@ -388,401 +391,401 @@ spv.float64.frag
              192:149(f64vec3) Load 151(f64v)
              193:189(i64vec3) ConvertFToS 192
                               Store 191(i64v) 193
-             195:149(f64vec3) Load 151(f64v)
-             196: 171(i8vec3) ConvertFToS 195
-                              Store 194(u8v) 196
-             201:149(f64vec3) Load 151(f64v)
-             202:198(i16vec3) ConvertFToU 201
-                              Store 200(u16v) 202
-             206:149(f64vec3) Load 151(f64v)
-             207:  203(ivec3) ConvertFToU 206
-                              Store 205(u32v) 207
-             212:149(f64vec3) Load 151(f64v)
-             213:209(i64vec3) ConvertFToU 212
-                              Store 211(u64v) 213
+             198:149(f64vec3) Load 151(f64v)
+             199: 195(i8vec3) ConvertFToU 198
+                              Store 197(u8v) 199
+             204:149(f64vec3) Load 151(f64v)
+             205:201(i16vec3) ConvertFToU 204
+                              Store 203(u16v) 205
+             209:149(f64vec3) Load 151(f64v)
+             210:  206(ivec3) ConvertFToU 209
+                              Store 208(u32v) 210
+             215:149(f64vec3) Load 151(f64v)
+             216:212(i64vec3) ConvertFToU 215
+                              Store 214(u64v) 216
                               Return
                               FunctionEnd
 12(builtinAngleTrigFuncs():           2 Function None 3
               13:             Label
-      216(f64v2):    215(ptr) Variable Function
-      217(f64v1):    215(ptr) Variable Function
-             218:214(f64vec4) Load 217(f64v1)
-             219:214(f64vec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
-                              Store 216(f64v2) 219
-             220:214(f64vec4) Load 217(f64v1)
-             221:214(f64vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
-                              Store 216(f64v2) 221
-             222:214(f64vec4) Load 217(f64v1)
-             223:214(f64vec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
-                              Store 216(f64v2) 223
-             224:214(f64vec4) Load 217(f64v1)
-             225:214(f64vec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
-                              Store 216(f64v2) 225
-             226:214(f64vec4) Load 217(f64v1)
-             227:214(f64vec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
-                              Store 216(f64v2) 227
-             228:214(f64vec4) Load 217(f64v1)
-             229:214(f64vec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
-                              Store 216(f64v2) 229
-             230:214(f64vec4) Load 217(f64v1)
-             231:214(f64vec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
-                              Store 216(f64v2) 231
-             232:214(f64vec4) Load 217(f64v1)
-             233:214(f64vec4) Load 216(f64v2)
-             234:214(f64vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
-                              Store 216(f64v2) 234
-             235:214(f64vec4) Load 217(f64v1)
-             236:214(f64vec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
-                              Store 216(f64v2) 236
-             237:214(f64vec4) Load 217(f64v1)
-             238:214(f64vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
-                              Store 216(f64v2) 238
-             239:214(f64vec4) Load 217(f64v1)
-             240:214(f64vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
-                              Store 216(f64v2) 240
-             241:214(f64vec4) Load 217(f64v1)
-             242:214(f64vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
-                              Store 216(f64v2) 242
-             243:214(f64vec4) Load 217(f64v1)
-             244:214(f64vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
-                              Store 216(f64v2) 244
-             245:214(f64vec4) Load 217(f64v1)
-             246:214(f64vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
-                              Store 216(f64v2) 246
-             247:214(f64vec4) Load 217(f64v1)
-             248:214(f64vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
-                              Store 216(f64v2) 248
+      219(f64v2):    218(ptr) Variable Function
+      220(f64v1):    218(ptr) Variable Function
+             221:217(f64vec4) Load 220(f64v1)
+             222:217(f64vec4) ExtInst 1(GLSL.std.450) 11(Radians) 221
+                              Store 219(f64v2) 222
+             223:217(f64vec4) Load 220(f64v1)
+             224:217(f64vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 223
+                              Store 219(f64v2) 224
+             225:217(f64vec4) Load 220(f64v1)
+             226:217(f64vec4) ExtInst 1(GLSL.std.450) 13(Sin) 225
+                              Store 219(f64v2) 226
+             227:217(f64vec4) Load 220(f64v1)
+             228:217(f64vec4) ExtInst 1(GLSL.std.450) 14(Cos) 227
+                              Store 219(f64v2) 228
+             229:217(f64vec4) Load 220(f64v1)
+             230:217(f64vec4) ExtInst 1(GLSL.std.450) 15(Tan) 229
+                              Store 219(f64v2) 230
+             231:217(f64vec4) Load 220(f64v1)
+             232:217(f64vec4) ExtInst 1(GLSL.std.450) 16(Asin) 231
+                              Store 219(f64v2) 232
+             233:217(f64vec4) Load 220(f64v1)
+             234:217(f64vec4) ExtInst 1(GLSL.std.450) 17(Acos) 233
+                              Store 219(f64v2) 234
+             235:217(f64vec4) Load 220(f64v1)
+             236:217(f64vec4) Load 219(f64v2)
+             237:217(f64vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 235 236
+                              Store 219(f64v2) 237
+             238:217(f64vec4) Load 220(f64v1)
+             239:217(f64vec4) ExtInst 1(GLSL.std.450) 18(Atan) 238
+                              Store 219(f64v2) 239
+             240:217(f64vec4) Load 220(f64v1)
+             241:217(f64vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 240
+                              Store 219(f64v2) 241
+             242:217(f64vec4) Load 220(f64v1)
+             243:217(f64vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 242
+                              Store 219(f64v2) 243
+             244:217(f64vec4) Load 220(f64v1)
+             245:217(f64vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 244
+                              Store 219(f64v2) 245
+             246:217(f64vec4) Load 220(f64v1)
+             247:217(f64vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 246
+                              Store 219(f64v2) 247
+             248:217(f64vec4) Load 220(f64v1)
+             249:217(f64vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 248
+                              Store 219(f64v2) 249
+             250:217(f64vec4) Load 220(f64v1)
+             251:217(f64vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 250
+                              Store 219(f64v2) 251
                               Return
                               FunctionEnd
 14(builtinExpFuncs():           2 Function None 3
               15:             Label
-      249(f64v2):     28(ptr) Variable Function
-      250(f64v1):     28(ptr) Variable Function
-             251: 27(f64vec2) Load 250(f64v1)
-             252: 27(f64vec2) Load 249(f64v2)
-             253: 27(f64vec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
-                              Store 249(f64v2) 253
-             254: 27(f64vec2) Load 250(f64v1)
-             255: 27(f64vec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
-                              Store 249(f64v2) 255
-             256: 27(f64vec2) Load 250(f64v1)
-             257: 27(f64vec2) ExtInst 1(GLSL.std.450) 28(Log) 256
-                              Store 249(f64v2) 257
-             258: 27(f64vec2) Load 250(f64v1)
-             259: 27(f64vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
-                              Store 249(f64v2) 259
-             260: 27(f64vec2) Load 250(f64v1)
-             261: 27(f64vec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
-                              Store 249(f64v2) 261
-             262: 27(f64vec2) Load 250(f64v1)
-             263: 27(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
-                              Store 249(f64v2) 263
-             264: 27(f64vec2) Load 250(f64v1)
-             265: 27(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
-                              Store 249(f64v2) 265
+      252(f64v2):     28(ptr) Variable Function
+      253(f64v1):     28(ptr) Variable Function
+             254: 27(f64vec2) Load 253(f64v1)
+             255: 27(f64vec2) Load 252(f64v2)
+             256: 27(f64vec2) ExtInst 1(GLSL.std.450) 26(Pow) 254 255
+                              Store 252(f64v2) 256
+             257: 27(f64vec2) Load 253(f64v1)
+             258: 27(f64vec2) ExtInst 1(GLSL.std.450) 27(Exp) 257
+                              Store 252(f64v2) 258
+             259: 27(f64vec2) Load 253(f64v1)
+             260: 27(f64vec2) ExtInst 1(GLSL.std.450) 28(Log) 259
+                              Store 252(f64v2) 260
+             261: 27(f64vec2) Load 253(f64v1)
+             262: 27(f64vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 261
+                              Store 252(f64v2) 262
+             263: 27(f64vec2) Load 253(f64v1)
+             264: 27(f64vec2) ExtInst 1(GLSL.std.450) 30(Log2) 263
+                              Store 252(f64v2) 264
+             265: 27(f64vec2) Load 253(f64v1)
+             266: 27(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 265
+                              Store 252(f64v2) 266
+             267: 27(f64vec2) Load 253(f64v1)
+             268: 27(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 267
+                              Store 252(f64v2) 268
                               Return
                               FunctionEnd
 16(builtinCommonFuncs():           2 Function None 3
               17:             Label
-      266(f64v2):    150(ptr) Variable Function
-      267(f64v1):    150(ptr) Variable Function
-        288(f64):     33(ptr) Variable Function
-      292(f64v3):    150(ptr) Variable Function
-         332(bv):    153(ptr) Variable Function
-          353(b):    108(ptr) Variable Function
-         363(iv):    184(ptr) Variable Function
-             268:149(f64vec3) Load 267(f64v1)
-             269:149(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
-                              Store 266(f64v2) 269
-             270:149(f64vec3) Load 267(f64v1)
-             271:149(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
-                              Store 266(f64v2) 271
-             272:149(f64vec3) Load 267(f64v1)
-             273:149(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
-                              Store 266(f64v2) 273
-             274:149(f64vec3) Load 267(f64v1)
-             275:149(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
-                              Store 266(f64v2) 275
-             276:149(f64vec3) Load 267(f64v1)
-             277:149(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 276
-                              Store 266(f64v2) 277
-             278:149(f64vec3) Load 267(f64v1)
-             279:149(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
-                              Store 266(f64v2) 279
-             280:149(f64vec3) Load 267(f64v1)
-             281:149(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
-                              Store 266(f64v2) 281
-             282:149(f64vec3) Load 267(f64v1)
-             283:149(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
-                              Store 266(f64v2) 283
-             284:149(f64vec3) Load 267(f64v1)
-             285:149(f64vec3) Load 266(f64v2)
-             286:149(f64vec3) FMod 284 285
-                              Store 266(f64v2) 286
-             287:149(f64vec3) Load 267(f64v1)
-             289:26(float64_t) Load 288(f64)
-             290:149(f64vec3) CompositeConstruct 289 289 289
-             291:149(f64vec3) FMod 287 290
-                              Store 266(f64v2) 291
-             293:149(f64vec3) Load 267(f64v1)
-             294:149(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f64v2)
-                              Store 292(f64v3) 294
-             295:149(f64vec3) Load 267(f64v1)
-             296:149(f64vec3) Load 266(f64v2)
-             297:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
-                              Store 292(f64v3) 297
-             298:149(f64vec3) Load 267(f64v1)
-             299:26(float64_t) Load 288(f64)
-             300:149(f64vec3) CompositeConstruct 299 299 299
-             301:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
-                              Store 292(f64v3) 301
-             302:149(f64vec3) Load 267(f64v1)
-             303:149(f64vec3) Load 266(f64v2)
-             304:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
-                              Store 292(f64v3) 304
-             305:149(f64vec3) Load 267(f64v1)
-             306:26(float64_t) Load 288(f64)
-             307:149(f64vec3) CompositeConstruct 306 306 306
-             308:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
-                              Store 292(f64v3) 308
-             309:149(f64vec3) Load 267(f64v1)
-             310:26(float64_t) Load 288(f64)
-             311:     33(ptr) AccessChain 266(f64v2) 32
-             312:26(float64_t) Load 311
-             313:149(f64vec3) CompositeConstruct 310 310 310
-             314:149(f64vec3) CompositeConstruct 312 312 312
-             315:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
-                              Store 292(f64v3) 315
-             316:149(f64vec3) Load 267(f64v1)
-             317:149(f64vec3) Load 266(f64v2)
-             318:26(float64_t) Load 288(f64)
-             319:149(f64vec3) CompositeConstruct 318 318 318
-             320:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
-                              Store 292(f64v3) 320
-             321:149(f64vec3) Load 267(f64v1)
-             322:149(f64vec3) Load 266(f64v2)
-             323:26(float64_t) Load 288(f64)
-             324:149(f64vec3) CompositeConstruct 323 323 323
-             325:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
-                              Store 292(f64v3) 325
-             326:149(f64vec3) Load 267(f64v1)
-             327:149(f64vec3) Load 266(f64v2)
-             328:149(f64vec3) Load 292(f64v3)
-             329:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
-                              Store 292(f64v3) 329
-             330:149(f64vec3) Load 267(f64v1)
-             331:149(f64vec3) Load 266(f64v2)
-             333:  152(bvec3) Load 332(bv)
-             334:149(f64vec3) Select 333 331 330
-                              Store 292(f64v3) 334
-             335:149(f64vec3) Load 267(f64v1)
-             336:149(f64vec3) Load 266(f64v2)
-             337:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
-                              Store 292(f64v3) 337
-             338:26(float64_t) Load 288(f64)
-             339:149(f64vec3) Load 292(f64v3)
-             340:149(f64vec3) CompositeConstruct 338 338 338
-             341:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
-                              Store 292(f64v3) 341
-             342:149(f64vec3) Load 267(f64v1)
-             343:149(f64vec3) Load 266(f64v2)
-             344:149(f64vec3) Load 292(f64v3)
-             345:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
-                              Store 292(f64v3) 345
-             346:26(float64_t) Load 288(f64)
-             347:     33(ptr) AccessChain 267(f64v1) 32
-             348:26(float64_t) Load 347
-             349:149(f64vec3) Load 266(f64v2)
-             350:149(f64vec3) CompositeConstruct 346 346 346
-             351:149(f64vec3) CompositeConstruct 348 348 348
-             352:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
-                              Store 292(f64v3) 352
-             354:26(float64_t) Load 288(f64)
-             355:   107(bool) IsNan 354
-                              Store 353(b) 355
-             356:149(f64vec3) Load 267(f64v1)
-             357:  152(bvec3) IsInf 356
-                              Store 332(bv) 357
-             358:149(f64vec3) Load 267(f64v1)
-             359:149(f64vec3) Load 266(f64v2)
-             360:149(f64vec3) Load 292(f64v3)
-             361:149(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
-                              Store 292(f64v3) 361
-             362:149(f64vec3) Load 267(f64v1)
-             365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
-             366:  183(ivec3) CompositeExtract 365 1
-                              Store 363(iv) 366
-             367:149(f64vec3) CompositeExtract 365 0
-                              Store 266(f64v2) 367
-             368:149(f64vec3) Load 267(f64v1)
-             369:  183(ivec3) Load 363(iv)
-             370:149(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
-                              Store 266(f64v2) 370
+      269(f64v2):    150(ptr) Variable Function
+      270(f64v1):    150(ptr) Variable Function
+        291(f64):     33(ptr) Variable Function
+      295(f64v3):    150(ptr) Variable Function
+         335(bv):    153(ptr) Variable Function
+          356(b):    108(ptr) Variable Function
+         366(iv):    184(ptr) Variable Function
+             271:149(f64vec3) Load 270(f64v1)
+             272:149(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 271
+                              Store 269(f64v2) 272
+             273:149(f64vec3) Load 270(f64v1)
+             274:149(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 273
+                              Store 269(f64v2) 274
+             275:149(f64vec3) Load 270(f64v1)
+             276:149(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 275
+                              Store 269(f64v2) 276
+             277:149(f64vec3) Load 270(f64v1)
+             278:149(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 277
+                              Store 269(f64v2) 278
+             279:149(f64vec3) Load 270(f64v1)
+             280:149(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 279
+                              Store 269(f64v2) 280
+             281:149(f64vec3) Load 270(f64v1)
+             282:149(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 281
+                              Store 269(f64v2) 282
+             283:149(f64vec3) Load 270(f64v1)
+             284:149(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 283
+                              Store 269(f64v2) 284
+             285:149(f64vec3) Load 270(f64v1)
+             286:149(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 285
+                              Store 269(f64v2) 286
+             287:149(f64vec3) Load 270(f64v1)
+             288:149(f64vec3) Load 269(f64v2)
+             289:149(f64vec3) FMod 287 288
+                              Store 269(f64v2) 289
+             290:149(f64vec3) Load 270(f64v1)
+             292:26(float64_t) Load 291(f64)
+             293:149(f64vec3) CompositeConstruct 292 292 292
+             294:149(f64vec3) FMod 290 293
+                              Store 269(f64v2) 294
+             296:149(f64vec3) Load 270(f64v1)
+             297:149(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 296 269(f64v2)
+                              Store 295(f64v3) 297
+             298:149(f64vec3) Load 270(f64v1)
+             299:149(f64vec3) Load 269(f64v2)
+             300:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 299
+                              Store 295(f64v3) 300
+             301:149(f64vec3) Load 270(f64v1)
+             302:26(float64_t) Load 291(f64)
+             303:149(f64vec3) CompositeConstruct 302 302 302
+             304:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 301 303
+                              Store 295(f64v3) 304
+             305:149(f64vec3) Load 270(f64v1)
+             306:149(f64vec3) Load 269(f64v2)
+             307:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 306
+                              Store 295(f64v3) 307
+             308:149(f64vec3) Load 270(f64v1)
+             309:26(float64_t) Load 291(f64)
+             310:149(f64vec3) CompositeConstruct 309 309 309
+             311:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 308 310
+                              Store 295(f64v3) 311
+             312:149(f64vec3) Load 270(f64v1)
+             313:26(float64_t) Load 291(f64)
+             314:     33(ptr) AccessChain 269(f64v2) 32
+             315:26(float64_t) Load 314
+             316:149(f64vec3) CompositeConstruct 313 313 313
+             317:149(f64vec3) CompositeConstruct 315 315 315
+             318:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 312 316 317
+                              Store 295(f64v3) 318
+             319:149(f64vec3) Load 270(f64v1)
+             320:149(f64vec3) Load 269(f64v2)
+             321:26(float64_t) Load 291(f64)
+             322:149(f64vec3) CompositeConstruct 321 321 321
+             323:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 320 322
+                              Store 295(f64v3) 323
+             324:149(f64vec3) Load 270(f64v1)
+             325:149(f64vec3) Load 269(f64v2)
+             326:26(float64_t) Load 291(f64)
+             327:149(f64vec3) CompositeConstruct 326 326 326
+             328:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 324 325 327
+                              Store 295(f64v3) 328
+             329:149(f64vec3) Load 270(f64v1)
+             330:149(f64vec3) Load 269(f64v2)
+             331:149(f64vec3) Load 295(f64v3)
+             332:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331
+                              Store 295(f64v3) 332
+             333:149(f64vec3) Load 270(f64v1)
+             334:149(f64vec3) Load 269(f64v2)
+             336:  152(bvec3) Load 335(bv)
+             337:149(f64vec3) Select 336 334 333
+                              Store 295(f64v3) 337
+             338:149(f64vec3) Load 270(f64v1)
+             339:149(f64vec3) Load 269(f64v2)
+             340:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 338 339
+                              Store 295(f64v3) 340
+             341:26(float64_t) Load 291(f64)
+             342:149(f64vec3) Load 295(f64v3)
+             343:149(f64vec3) CompositeConstruct 341 341 341
+             344:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 343 342
+                              Store 295(f64v3) 344
+             345:149(f64vec3) Load 270(f64v1)
+             346:149(f64vec3) Load 269(f64v2)
+             347:149(f64vec3) Load 295(f64v3)
+             348:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 345 346 347
+                              Store 295(f64v3) 348
+             349:26(float64_t) Load 291(f64)
+             350:     33(ptr) AccessChain 270(f64v1) 32
+             351:26(float64_t) Load 350
+             352:149(f64vec3) Load 269(f64v2)
+             353:149(f64vec3) CompositeConstruct 349 349 349
+             354:149(f64vec3) CompositeConstruct 351 351 351
+             355:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 353 354 352
+                              Store 295(f64v3) 355
+             357:26(float64_t) Load 291(f64)
+             358:   107(bool) IsNan 357
+                              Store 356(b) 358
+             359:149(f64vec3) Load 270(f64v1)
+             360:  152(bvec3) IsInf 359
+                              Store 335(bv) 360
+             361:149(f64vec3) Load 270(f64v1)
+             362:149(f64vec3) Load 269(f64v2)
+             363:149(f64vec3) Load 295(f64v3)
+             364:149(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 361 362 363
+                              Store 295(f64v3) 364
+             365:149(f64vec3) Load 270(f64v1)
+             368:367(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 365
+             369:  183(ivec3) CompositeExtract 368 1
+                              Store 366(iv) 369
+             370:149(f64vec3) CompositeExtract 368 0
+                              Store 269(f64v2) 370
+             371:149(f64vec3) Load 270(f64v1)
+             372:  183(ivec3) Load 366(iv)
+             373:149(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 371 372
+                              Store 269(f64v2) 373
                               Return
                               FunctionEnd
 18(builtinGeometryFuncs():           2 Function None 3
               19:             Label
-        371(f64):     33(ptr) Variable Function
-      372(f64v1):    150(ptr) Variable Function
-      376(f64v2):    150(ptr) Variable Function
-      382(f64v3):    150(ptr) Variable Function
-             373:149(f64vec3) Load 372(f64v1)
-             374:26(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 373
-                              Store 371(f64) 374
-             375:149(f64vec3) Load 372(f64v1)
-             377:149(f64vec3) Load 376(f64v2)
-             378:26(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 375 377
-                              Store 371(f64) 378
-             379:149(f64vec3) Load 372(f64v1)
-             380:149(f64vec3) Load 376(f64v2)
-             381:26(float64_t) Dot 379 380
-                              Store 371(f64) 381
-             383:149(f64vec3) Load 372(f64v1)
-             384:149(f64vec3) Load 376(f64v2)
-             385:149(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 383 384
-                              Store 382(f64v3) 385
-             386:149(f64vec3) Load 372(f64v1)
-             387:149(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 386
-                              Store 376(f64v2) 387
-             388:149(f64vec3) Load 372(f64v1)
-             389:149(f64vec3) Load 376(f64v2)
-             390:149(f64vec3) Load 382(f64v3)
-             391:149(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 388 389 390
-                              Store 382(f64v3) 391
-             392:149(f64vec3) Load 372(f64v1)
-             393:149(f64vec3) Load 376(f64v2)
-             394:149(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 392 393
-                              Store 382(f64v3) 394
-             395:149(f64vec3) Load 372(f64v1)
-             396:149(f64vec3) Load 376(f64v2)
-             397:26(float64_t) Load 371(f64)
-             398:149(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 395 396 397
-                              Store 382(f64v3) 398
+        374(f64):     33(ptr) Variable Function
+      375(f64v1):    150(ptr) Variable Function
+      379(f64v2):    150(ptr) Variable Function
+      385(f64v3):    150(ptr) Variable Function
+             376:149(f64vec3) Load 375(f64v1)
+             377:26(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 376
+                              Store 374(f64) 377
+             378:149(f64vec3) Load 375(f64v1)
+             380:149(f64vec3) Load 379(f64v2)
+             381:26(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 378 380
+                              Store 374(f64) 381
+             382:149(f64vec3) Load 375(f64v1)
+             383:149(f64vec3) Load 379(f64v2)
+             384:26(float64_t) Dot 382 383
+                              Store 374(f64) 384
+             386:149(f64vec3) Load 375(f64v1)
+             387:149(f64vec3) Load 379(f64v2)
+             388:149(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 386 387
+                              Store 385(f64v3) 388
+             389:149(f64vec3) Load 375(f64v1)
+             390:149(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 389
+                              Store 379(f64v2) 390
+             391:149(f64vec3) Load 375(f64v1)
+             392:149(f64vec3) Load 379(f64v2)
+             393:149(f64vec3) Load 385(f64v3)
+             394:149(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 391 392 393
+                              Store 385(f64v3) 394
+             395:149(f64vec3) Load 375(f64v1)
+             396:149(f64vec3) Load 379(f64v2)
+             397:149(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 395 396
+                              Store 385(f64v3) 397
+             398:149(f64vec3) Load 375(f64v1)
+             399:149(f64vec3) Load 379(f64v2)
+             400:26(float64_t) Load 374(f64)
+             401:149(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 398 399 400
+                              Store 385(f64v3) 401
                               Return
                               FunctionEnd
 20(builtinMatrixFuncs():           2 Function None 3
               21:             Label
-      401(f64m3):    400(ptr) Variable Function
-      402(f64m1):    400(ptr) Variable Function
-      404(f64m2):    400(ptr) Variable Function
-      413(f64v1):    150(ptr) Variable Function
-      415(f64v2):     28(ptr) Variable Function
-      420(f64m4):    419(ptr) Variable Function
-        423(f64):     33(ptr) Variable Function
-      426(f64m5):    425(ptr) Variable Function
-      431(f64m6):    430(ptr) Variable Function
-      432(f64m7):    430(ptr) Variable Function
-             403:         399 Load 402(f64m1)
-             405:         399 Load 404(f64m2)
-             406:149(f64vec3) CompositeExtract 403 0
-             407:149(f64vec3) CompositeExtract 405 0
-             408:149(f64vec3) FMul 406 407
-             409:149(f64vec3) CompositeExtract 403 1
-             410:149(f64vec3) CompositeExtract 405 1
+      404(f64m3):    403(ptr) Variable Function
+      405(f64m1):    403(ptr) Variable Function
+      407(f64m2):    403(ptr) Variable Function
+      416(f64v1):    150(ptr) Variable Function
+      418(f64v2):     28(ptr) Variable Function
+      423(f64m4):    422(ptr) Variable Function
+        426(f64):     33(ptr) Variable Function
+      429(f64m5):    428(ptr) Variable Function
+      434(f64m6):    433(ptr) Variable Function
+      435(f64m7):    433(ptr) Variable Function
+             406:         402 Load 405(f64m1)
+             408:         402 Load 407(f64m2)
+             409:149(f64vec3) CompositeExtract 406 0
+             410:149(f64vec3) CompositeExtract 408 0
              411:149(f64vec3) FMul 409 410
-             412:         399 CompositeConstruct 408 411
-                              Store 401(f64m3) 412
-             414:149(f64vec3) Load 413(f64v1)
-             416: 27(f64vec2) Load 415(f64v2)
-             417:         399 OuterProduct 414 416
-                              Store 402(f64m1) 417
-             421:         399 Load 402(f64m1)
-             422:         418 Transpose 421
-                              Store 420(f64m4) 422
-             427:         424 Load 426(f64m5)
-             428:26(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 427
-                              Store 423(f64) 428
-             433:         429 Load 432(f64m7)
-             434:         429 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 433
-                              Store 431(f64m6) 434
+             412:149(f64vec3) CompositeExtract 406 1
+             413:149(f64vec3) CompositeExtract 408 1
+             414:149(f64vec3) FMul 412 413
+             415:         402 CompositeConstruct 411 414
+                              Store 404(f64m3) 415
+             417:149(f64vec3) Load 416(f64v1)
+             419: 27(f64vec2) Load 418(f64v2)
+             420:         402 OuterProduct 417 419
+                              Store 405(f64m1) 420
+             424:         402 Load 405(f64m1)
+             425:         421 Transpose 424
+                              Store 423(f64m4) 425
+             430:         427 Load 429(f64m5)
+             431:26(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 430
+                              Store 426(f64) 431
+             436:         432 Load 435(f64m7)
+             437:         432 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 436
+                              Store 434(f64m6) 437
                               Return
                               FunctionEnd
 22(builtinVecRelFuncs():           2 Function None 3
               23:             Label
-         435(bv):    153(ptr) Variable Function
-      436(f64v1):    150(ptr) Variable Function
-      438(f64v2):    150(ptr) Variable Function
-             437:149(f64vec3) Load 436(f64v1)
-             439:149(f64vec3) Load 438(f64v2)
-             440:  152(bvec3) FOrdLessThan 437 439
-                              Store 435(bv) 440
-             441:149(f64vec3) Load 436(f64v1)
-             442:149(f64vec3) Load 438(f64v2)
-             443:  152(bvec3) FOrdLessThanEqual 441 442
-                              Store 435(bv) 443
-             444:149(f64vec3) Load 436(f64v1)
-             445:149(f64vec3) Load 438(f64v2)
-             446:  152(bvec3) FOrdGreaterThan 444 445
-                              Store 435(bv) 446
-             447:149(f64vec3) Load 436(f64v1)
-             448:149(f64vec3) Load 438(f64v2)
-             449:  152(bvec3) FOrdGreaterThanEqual 447 448
-                              Store 435(bv) 449
-             450:149(f64vec3) Load 436(f64v1)
-             451:149(f64vec3) Load 438(f64v2)
-             452:  152(bvec3) FOrdEqual 450 451
-                              Store 435(bv) 452
-             453:149(f64vec3) Load 436(f64v1)
-             454:149(f64vec3) Load 438(f64v2)
-             455:  152(bvec3) FOrdNotEqual 453 454
-                              Store 435(bv) 455
+         438(bv):    153(ptr) Variable Function
+      439(f64v1):    150(ptr) Variable Function
+      441(f64v2):    150(ptr) Variable Function
+             440:149(f64vec3) Load 439(f64v1)
+             442:149(f64vec3) Load 441(f64v2)
+             443:  152(bvec3) FOrdLessThan 440 442
+                              Store 438(bv) 443
+             444:149(f64vec3) Load 439(f64v1)
+             445:149(f64vec3) Load 441(f64v2)
+             446:  152(bvec3) FOrdLessThanEqual 444 445
+                              Store 438(bv) 446
+             447:149(f64vec3) Load 439(f64v1)
+             448:149(f64vec3) Load 441(f64v2)
+             449:  152(bvec3) FOrdGreaterThan 447 448
+                              Store 438(bv) 449
+             450:149(f64vec3) Load 439(f64v1)
+             451:149(f64vec3) Load 441(f64v2)
+             452:  152(bvec3) FOrdGreaterThanEqual 450 451
+                              Store 438(bv) 452
+             453:149(f64vec3) Load 439(f64v1)
+             454:149(f64vec3) Load 441(f64v2)
+             455:  152(bvec3) FOrdEqual 453 454
+                              Store 438(bv) 455
+             456:149(f64vec3) Load 439(f64v1)
+             457:149(f64vec3) Load 441(f64v2)
+             458:  152(bvec3) FOrdNotEqual 456 457
+                              Store 438(bv) 458
                               Return
                               FunctionEnd
 24(builtinFragProcFuncs():           2 Function None 3
               25:             Label
-       456(f64v):    150(ptr) Variable Function
-             460:    459(ptr) AccessChain 458(if64v) 32
-             461:26(float64_t) Load 460
-             462:26(float64_t) DPdx 461
-             463:     33(ptr) AccessChain 456(f64v) 32
-                              Store 463 462
-             464:    459(ptr) AccessChain 458(if64v) 88
-             465:26(float64_t) Load 464
-             466:26(float64_t) DPdy 465
-             467:     33(ptr) AccessChain 456(f64v) 88
-                              Store 467 466
-             468:149(f64vec3) Load 458(if64v)
-             469: 27(f64vec2) VectorShuffle 468 468 0 1
-             470: 27(f64vec2) DPdxFine 469
-             471:149(f64vec3) Load 456(f64v)
-             472:149(f64vec3) VectorShuffle 471 470 3 4 2
-                              Store 456(f64v) 472
-             473:149(f64vec3) Load 458(if64v)
-             474: 27(f64vec2) VectorShuffle 473 473 0 1
-             475: 27(f64vec2) DPdyFine 474
-             476:149(f64vec3) Load 456(f64v)
-             477:149(f64vec3) VectorShuffle 476 475 3 4 2
-                              Store 456(f64v) 477
-             478:149(f64vec3) Load 458(if64v)
-             479:149(f64vec3) DPdxCoarse 478
-                              Store 456(f64v) 479
-             480:149(f64vec3) Load 458(if64v)
-             481:149(f64vec3) DPdxCoarse 480
-                              Store 456(f64v) 481
-             482:    459(ptr) AccessChain 458(if64v) 32
-             483:26(float64_t) Load 482
-             484:26(float64_t) Fwidth 483
-             485:     33(ptr) AccessChain 456(f64v) 32
-                              Store 485 484
-             486:149(f64vec3) Load 458(if64v)
-             487: 27(f64vec2) VectorShuffle 486 486 0 1
-             488: 27(f64vec2) FwidthFine 487
-             489:149(f64vec3) Load 456(f64v)
-             490:149(f64vec3) VectorShuffle 489 488 3 4 2
-                              Store 456(f64v) 490
-             491:149(f64vec3) Load 458(if64v)
-             492:149(f64vec3) FwidthCoarse 491
-                              Store 456(f64v) 492
-             493:    459(ptr) AccessChain 458(if64v) 32
-             494:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 493
-             495:     33(ptr) AccessChain 456(f64v) 32
-                              Store 495 494
-             497:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 458(if64v) 496
-             498: 27(f64vec2) VectorShuffle 497 497 0 1
-             499:149(f64vec3) Load 456(f64v)
-             500:149(f64vec3) VectorShuffle 499 498 3 4 2
-                              Store 456(f64v) 500
-             503:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 458(if64v) 502
-                              Store 456(f64v) 503
+       459(f64v):    150(ptr) Variable Function
+             463:    462(ptr) AccessChain 461(if64v) 32
+             464:26(float64_t) Load 463
+             465:26(float64_t) DPdx 464
+             466:     33(ptr) AccessChain 459(f64v) 32
+                              Store 466 465
+             467:    462(ptr) AccessChain 461(if64v) 88
+             468:26(float64_t) Load 467
+             469:26(float64_t) DPdy 468
+             470:     33(ptr) AccessChain 459(f64v) 88
+                              Store 470 469
+             471:149(f64vec3) Load 461(if64v)
+             472: 27(f64vec2) VectorShuffle 471 471 0 1
+             473: 27(f64vec2) DPdxFine 472
+             474:149(f64vec3) Load 459(f64v)
+             475:149(f64vec3) VectorShuffle 474 473 3 4 2
+                              Store 459(f64v) 475
+             476:149(f64vec3) Load 461(if64v)
+             477: 27(f64vec2) VectorShuffle 476 476 0 1
+             478: 27(f64vec2) DPdyFine 477
+             479:149(f64vec3) Load 459(f64v)
+             480:149(f64vec3) VectorShuffle 479 478 3 4 2
+                              Store 459(f64v) 480
+             481:149(f64vec3) Load 461(if64v)
+             482:149(f64vec3) DPdxCoarse 481
+                              Store 459(f64v) 482
+             483:149(f64vec3) Load 461(if64v)
+             484:149(f64vec3) DPdxCoarse 483
+                              Store 459(f64v) 484
+             485:    462(ptr) AccessChain 461(if64v) 32
+             486:26(float64_t) Load 485
+             487:26(float64_t) Fwidth 486
+             488:     33(ptr) AccessChain 459(f64v) 32
+                              Store 488 487
+             489:149(f64vec3) Load 461(if64v)
+             490: 27(f64vec2) VectorShuffle 489 489 0 1
+             491: 27(f64vec2) FwidthFine 490
+             492:149(f64vec3) Load 459(f64v)
+             493:149(f64vec3) VectorShuffle 492 491 3 4 2
+                              Store 459(f64v) 493
+             494:149(f64vec3) Load 461(if64v)
+             495:149(f64vec3) FwidthCoarse 494
+                              Store 459(f64v) 495
+             496:    462(ptr) AccessChain 461(if64v) 32
+             497:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 496
+             498:     33(ptr) AccessChain 459(f64v) 32
+                              Store 498 497
+             500:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 499
+             501: 27(f64vec2) VectorShuffle 500 500 0 1
+             502:149(f64vec3) Load 459(f64v)
+             503:149(f64vec3) VectorShuffle 502 501 3 4 2
+                              Store 459(f64v) 503
+             506:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 505
+                              Store 459(f64v) 506
                               Return
                               FunctionEnd
index 20c37cc..14922b2 100644 (file)
@@ -1,7 +1,7 @@
 spv.int8.frag
 // Module Version 10300
 // Generated by (magic number): 80007
-// Id's are bound by 531
+// Id's are bound by 518
 
                               Capability Shader
                               Capability Float16
@@ -9,6 +9,8 @@ spv.int8.frag
                               Capability Int64
                               Capability Int16
                               Capability Int8
+                              Capability CapabilityUniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main"
@@ -47,52 +49,52 @@ spv.int8.frag
                               Name 144  "u16v"
                               Name 174  "bv"
                               Name 192  "u8v"
-                              Name 196  "i8"
-                              Name 216  "i"
-                              Name 223  "uv"
-                              Name 242  "i16"
-                              Name 279  "b"
-                              Name 341  "i8v"
-                              Name 344  "i8"
-                              Name 354  "u8v"
-                              Name 356  "u8"
-                              Name 430  "i16"
-                              Name 433  "i32"
-                              Name 436  "i8v4"
-                              Name 440  "u16"
-                              Name 441  "u8v2"
-                              Name 444  "u32"
-                              Name 447  "u8v4"
-                              Name 459  "bv"
-                              Name 526  "Block"
-                              MemberName 526(Block) 0  "i8"
-                              MemberName 526(Block) 1  "i8v2"
-                              MemberName 526(Block) 2  "i8v3"
-                              MemberName 526(Block) 3  "i8v4"
-                              MemberName 526(Block) 4  "u8"
-                              MemberName 526(Block) 5  "u8v2"
-                              MemberName 526(Block) 6  "u8v3"
-                              MemberName 526(Block) 7  "u8v4"
-                              Name 528  "block"
-                              Name 529  "si8"
-                              Name 530  "su8"
+                              Name 197  "i8"
+                              Name 217  "i"
+                              Name 224  "uv"
+                              Name 240  "i16"
+                              Name 276  "b"
+                              Name 338  "i8v"
+                              Name 341  "i8"
+                              Name 351  "u8v"
+                              Name 353  "u8"
+                              Name 423  "i16"
+                              Name 426  "i32"
+                              Name 429  "i8v4"
+                              Name 433  "u16"
+                              Name 434  "u8v2"
+                              Name 437  "u32"
+                              Name 440  "u8v4"
+                              Name 452  "bv"
+                              Name 513  "Block"
+                              MemberName 513(Block) 0  "i8"
+                              MemberName 513(Block) 1  "i8v2"
+                              MemberName 513(Block) 2  "i8v3"
+                              MemberName 513(Block) 3  "i8v4"
+                              MemberName 513(Block) 4  "u8"
+                              MemberName 513(Block) 5  "u8v2"
+                              MemberName 513(Block) 6  "u8v3"
+                              MemberName 513(Block) 7  "u8v4"
+                              Name 515  "block"
+                              Name 516  "si8"
+                              Name 517  "su8"
                               MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
                               Decorate 26 DescriptorSet 0
                               Decorate 26 Binding 0
-                              MemberDecorate 526(Block) 0 Offset 0
-                              MemberDecorate 526(Block) 1 Offset 2
-                              MemberDecorate 526(Block) 2 Offset 4
-                              MemberDecorate 526(Block) 3 Offset 8
-                              MemberDecorate 526(Block) 4 Offset 12
-                              MemberDecorate 526(Block) 5 Offset 14
-                              MemberDecorate 526(Block) 6 Offset 16
-                              MemberDecorate 526(Block) 7 Offset 20
-                              Decorate 526(Block) Block
-                              Decorate 528(block) DescriptorSet 0
-                              Decorate 528(block) Binding 1
-                              Decorate 529(si8) SpecId 100
-                              Decorate 530(su8) SpecId 101
+                              MemberDecorate 513(Block) 0 Offset 0
+                              MemberDecorate 513(Block) 1 Offset 2
+                              MemberDecorate 513(Block) 2 Offset 4
+                              MemberDecorate 513(Block) 3 Offset 8
+                              MemberDecorate 513(Block) 4 Offset 12
+                              MemberDecorate 513(Block) 5 Offset 14
+                              MemberDecorate 513(Block) 6 Offset 16
+                              MemberDecorate 513(Block) 7 Offset 20
+                              Decorate 513(Block) Block
+                              Decorate 515(block) DescriptorSet 0
+                              Decorate 515(block) Binding 1
+                              Decorate 516(si8) SpecId 100
+                              Decorate 517(su8) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 8 1
@@ -157,37 +159,36 @@ spv.int8.frag
              182:  36(int8_t) Constant 1
              183:  49(i8vec2) ConstantComposite 181 181
              184:  49(i8vec2) ConstantComposite 182 182
-             190:             TypeVector 14(int8_t) 3
+             190:             TypeVector 36(int8_t) 3
              191:             TypePointer Function 190(i8vec3)
-             215:             TypePointer Function 27(int)
-             221:             TypeVector 17(int) 3
-             222:             TypePointer Function 221(ivec3)
-             225:             TypeVector 27(int) 3
-             241:             TypePointer Function 57(int16_t)
-             264:     17(int) Constant 1
-             270:     17(int) Constant 2
-             278:             TypePointer Function 171(bool)
-             280:     17(int) Constant 0
-             293:             TypePointer Function 17(int)
-             352:  52(i8vec2) ConstantComposite 21 21
-             358:             TypeVector 36(int8_t) 3
-             362: 190(i8vec3) ConstantComposite 22 22 22
-             404:   171(bool) ConstantTrue
-             411:   171(bool) ConstantFalse
-             412:  172(bvec2) ConstantComposite 411 411
-             427:             TypeVector 171(bool) 3
-             428:  427(bvec3) ConstantComposite 411 411 411
-             434:             TypeVector 14(int8_t) 4
-             435:             TypePointer Function 434(i8vec4)
-             439:             TypePointer Function 64(int16_t)
-             445:             TypeVector 36(int8_t) 4
-             446:             TypePointer Function 445(i8vec4)
-             458:             TypePointer Function 427(bvec3)
-      526(Block):             TypeStruct 14(int8_t) 52(i8vec2) 190(i8vec3) 434(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 445(i8vec4)
-             527:             TypePointer Uniform 526(Block)
-      528(block):    527(ptr) Variable Uniform
-        529(si8):  14(int8_t) SpecConstant 4294967286
-        530(su8):  36(int8_t) SpecConstant 20
+             194:             TypeVector 14(int8_t) 3
+             216:             TypePointer Function 27(int)
+             222:             TypeVector 17(int) 3
+             223:             TypePointer Function 222(ivec3)
+             239:             TypePointer Function 57(int16_t)
+             261:     17(int) Constant 1
+             267:     17(int) Constant 2
+             275:             TypePointer Function 171(bool)
+             277:     17(int) Constant 0
+             291:             TypePointer Function 17(int)
+             349:  52(i8vec2) ConstantComposite 21 21
+             358: 190(i8vec3) ConstantComposite 181 181 181
+             400:   171(bool) ConstantTrue
+             407:   171(bool) ConstantFalse
+             408:  172(bvec2) ConstantComposite 407 407
+             420:             TypeVector 171(bool) 3
+             421:  420(bvec3) ConstantComposite 407 407 407
+             427:             TypeVector 14(int8_t) 4
+             428:             TypePointer Function 427(i8vec4)
+             432:             TypePointer Function 64(int16_t)
+             438:             TypeVector 36(int8_t) 4
+             439:             TypePointer Function 438(i8vec4)
+             451:             TypePointer Function 420(bvec3)
+      513(Block):             TypeStruct 14(int8_t) 52(i8vec2) 194(i8vec3) 427(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 438(i8vec4)
+             514:             TypePointer Uniform 513(Block)
+      515(block):    514(ptr) Variable Uniform
+        516(si8):  14(int8_t) SpecConstant 4294967286
+        517(su8):  36(int8_t) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -360,389 +361,377 @@ spv.int8.frag
   10(operators():           2 Function None 3
               11:             Label
         192(u8v):    191(ptr) Variable Function
-         196(i8):     15(ptr) Variable Function
-          216(i):    215(ptr) Variable Function
-         223(uv):    222(ptr) Variable Function
-        242(i16):    241(ptr) Variable Function
-          279(b):    278(ptr) Variable Function
+         197(i8):     15(ptr) Variable Function
+          217(i):    216(ptr) Variable Function
+         224(uv):    223(ptr) Variable Function
+        240(i16):    239(ptr) Variable Function
+          276(b):    275(ptr) Variable Function
              193: 190(i8vec3) Load 192(u8v)
-             194: 190(i8vec3) CompositeConstruct 176 176 176
-             195: 190(i8vec3) IAdd 193 194
-                              Store 192(u8v) 195
-             197:  14(int8_t) Load 196(i8)
-             198:  14(int8_t) ISub 197 176
-                              Store 196(i8) 198
-             199:  14(int8_t) Load 196(i8)
-             200:  14(int8_t) IAdd 199 176
-                              Store 196(i8) 200
-             201: 190(i8vec3) Load 192(u8v)
-             202: 190(i8vec3) CompositeConstruct 176 176 176
-             203: 190(i8vec3) ISub 201 202
-                              Store 192(u8v) 203
-             204: 190(i8vec3) Load 192(u8v)
-             205: 190(i8vec3) Not 204
-                              Store 192(u8v) 205
-             206:  14(int8_t) Load 196(i8)
-                              Store 196(i8) 206
-             207: 190(i8vec3) Load 192(u8v)
-             208: 190(i8vec3) SNegate 207
-                              Store 192(u8v) 208
-             209:  14(int8_t) Load 196(i8)
-             210:  14(int8_t) Load 196(i8)
-             211:  14(int8_t) IAdd 210 209
-                              Store 196(i8) 211
-             212: 190(i8vec3) Load 192(u8v)
+             195: 194(i8vec3) CompositeConstruct 176 176 176
+             196: 190(i8vec3) IAdd 193 195
+                              Store 192(u8v) 196
+             198:  14(int8_t) Load 197(i8)
+             199:  14(int8_t) ISub 198 176
+                              Store 197(i8) 199
+             200:  14(int8_t) Load 197(i8)
+             201:  14(int8_t) IAdd 200 176
+                              Store 197(i8) 201
+             202: 190(i8vec3) Load 192(u8v)
+             203: 194(i8vec3) CompositeConstruct 176 176 176
+             204: 190(i8vec3) ISub 202 203
+                              Store 192(u8v) 204
+             205: 190(i8vec3) Load 192(u8v)
+             206: 190(i8vec3) Not 205
+                              Store 192(u8v) 206
+             207:  14(int8_t) Load 197(i8)
+                              Store 197(i8) 207
+             208: 190(i8vec3) Load 192(u8v)
+             209: 190(i8vec3) SNegate 208
+                              Store 192(u8v) 209
+             210:  14(int8_t) Load 197(i8)
+             211:  14(int8_t) Load 197(i8)
+             212:  14(int8_t) IAdd 211 210
+                              Store 197(i8) 212
              213: 190(i8vec3) Load 192(u8v)
-             214: 190(i8vec3) ISub 213 212
-                              Store 192(u8v) 214
-             217:  14(int8_t) Load 196(i8)
-             218:     27(int) SConvert 217
-             219:     27(int) Load 216(i)
-             220:     27(int) IMul 219 218
-                              Store 216(i) 220
-             224: 190(i8vec3) Load 192(u8v)
-             226:  225(ivec3) SConvert 224
-             227:  221(ivec3) Bitcast 226
-             228:  221(ivec3) Load 223(uv)
-             229:  221(ivec3) UDiv 228 227
-                              Store 223(uv) 229
-             230:  14(int8_t) Load 196(i8)
-             231:     27(int) SConvert 230
-             232:     17(int) Bitcast 231
-             233:  221(ivec3) Load 223(uv)
-             234:  221(ivec3) CompositeConstruct 232 232 232
-             235:  221(ivec3) UMod 233 234
-                              Store 223(uv) 235
-             236: 190(i8vec3) Load 192(u8v)
-             237:  225(ivec3) SConvert 236
-             238:  221(ivec3) Bitcast 237
-             239:  221(ivec3) Load 223(uv)
-             240:  221(ivec3) IAdd 238 239
-                              Store 223(uv) 240
-             243:  14(int8_t) Load 196(i8)
-             244: 57(int16_t) SConvert 243
-             245: 57(int16_t) Load 242(i16)
-             246: 57(int16_t) ISub 244 245
-                              Store 242(i16) 246
-             247: 190(i8vec3) Load 192(u8v)
-             248:  225(ivec3) SConvert 247
-             249:  221(ivec3) Bitcast 248
-             250:  221(ivec3) Load 223(uv)
-             251:  221(ivec3) IMul 249 250
-                              Store 223(uv) 251
-             252:  14(int8_t) Load 196(i8)
-             253: 57(int16_t) SConvert 252
-             254: 57(int16_t) Load 242(i16)
-             255: 57(int16_t) IMul 253 254
-                              Store 242(i16) 255
-             256:  14(int8_t) Load 196(i8)
-             257:     27(int) SConvert 256
-             258:     27(int) Load 216(i)
-             259:     27(int) SMod 257 258
-                              Store 216(i) 259
-             260:  14(int8_t) Load 196(i8)
-             261: 190(i8vec3) Load 192(u8v)
-             262: 190(i8vec3) CompositeConstruct 260 260 260
-             263: 190(i8vec3) ShiftLeftLogical 261 262
-                              Store 192(u8v) 263
-             265:     15(ptr) AccessChain 192(u8v) 264
-             266:  14(int8_t) Load 265
-             267:  14(int8_t) Load 196(i8)
-             268:  14(int8_t) ShiftRightArithmetic 267 266
-                              Store 196(i8) 268
-             269:  14(int8_t) Load 196(i8)
-             271:     15(ptr) AccessChain 192(u8v) 270
-             272:  14(int8_t) Load 271
-             273:  14(int8_t) ShiftLeftLogical 269 272
-                              Store 196(i8) 273
-             274: 190(i8vec3) Load 192(u8v)
-             275:  14(int8_t) Load 196(i8)
-             276: 190(i8vec3) CompositeConstruct 275 275 275
-             277: 190(i8vec3) ShiftLeftLogical 274 276
-                              Store 192(u8v) 277
-             281:     15(ptr) AccessChain 192(u8v) 280
-             282:  14(int8_t) Load 281
-             283:  14(int8_t) Load 196(i8)
-             284:   171(bool) INotEqual 282 283
-                              Store 279(b) 284
-             285:  14(int8_t) Load 196(i8)
-             286:     15(ptr) AccessChain 192(u8v) 280
-             287:  14(int8_t) Load 286
-             288:   171(bool) IEqual 285 287
-                              Store 279(b) 288
-             289:     15(ptr) AccessChain 192(u8v) 280
-             290:  14(int8_t) Load 289
-             291:     27(int) SConvert 290
-             292:     17(int) Bitcast 291
-             294:    293(ptr) AccessChain 223(uv) 264
-             295:     17(int) Load 294
-             296:   171(bool) UGreaterThan 292 295
-                              Store 279(b) 296
-             297:  14(int8_t) Load 196(i8)
-             298:     27(int) SConvert 297
-             299:     27(int) Load 216(i)
-             300:   171(bool) SLessThan 298 299
-                              Store 279(b) 300
-             301:     15(ptr) AccessChain 192(u8v) 264
-             302:  14(int8_t) Load 301
-             303:     27(int) SConvert 302
-             304:     17(int) Bitcast 303
-             305:    293(ptr) AccessChain 223(uv) 280
-             306:     17(int) Load 305
-             307:   171(bool) UGreaterThanEqual 304 306
-                              Store 279(b) 307
-             308:  14(int8_t) Load 196(i8)
-             309:     27(int) SConvert 308
-             310:     27(int) Load 216(i)
-             311:   171(bool) SLessThanEqual 309 310
-                              Store 279(b) 311
-             312:  14(int8_t) Load 196(i8)
-             313:     27(int) SConvert 312
-             314:     17(int) Bitcast 313
-             315:  221(ivec3) Load 223(uv)
-             316:  221(ivec3) CompositeConstruct 314 314 314
-             317:  221(ivec3) BitwiseOr 315 316
-                              Store 223(uv) 317
-             318:  14(int8_t) Load 196(i8)
-             319:     27(int) SConvert 318
-             320:     27(int) Load 216(i)
-             321:     27(int) BitwiseOr 319 320
-                              Store 216(i) 321
-             322:  14(int8_t) Load 196(i8)
-             323: 57(int16_t) SConvert 322
-             324: 57(int16_t) Load 242(i16)
-             325: 57(int16_t) BitwiseAnd 324 323
-                              Store 242(i16) 325
-             326: 190(i8vec3) Load 192(u8v)
-             327:  225(ivec3) SConvert 326
-             328:  221(ivec3) Bitcast 327
-             329:  221(ivec3) Load 223(uv)
-             330:  221(ivec3) BitwiseAnd 328 329
-                              Store 223(uv) 330
-             331:  14(int8_t) Load 196(i8)
-             332:     27(int) SConvert 331
-             333:     17(int) Bitcast 332
-             334:  221(ivec3) Load 223(uv)
-             335:  221(ivec3) CompositeConstruct 333 333 333
-             336:  221(ivec3) BitwiseXor 334 335
-                              Store 223(uv) 336
-             337: 190(i8vec3) Load 192(u8v)
-             338:  14(int8_t) Load 196(i8)
-             339: 190(i8vec3) CompositeConstruct 338 338 338
-             340: 190(i8vec3) BitwiseXor 337 339
-                              Store 192(u8v) 340
+             214: 190(i8vec3) Load 192(u8v)
+             215: 190(i8vec3) ISub 214 213
+                              Store 192(u8v) 215
+             218:  14(int8_t) Load 197(i8)
+             219:     27(int) SConvert 218
+             220:     27(int) Load 217(i)
+             221:     27(int) IMul 220 219
+                              Store 217(i) 221
+             225: 190(i8vec3) Load 192(u8v)
+             226:  222(ivec3) UConvert 225
+             227:  222(ivec3) Load 224(uv)
+             228:  222(ivec3) UDiv 227 226
+                              Store 224(uv) 228
+             229:  14(int8_t) Load 197(i8)
+             230:     27(int) SConvert 229
+             231:     17(int) Bitcast 230
+             232:  222(ivec3) Load 224(uv)
+             233:  222(ivec3) CompositeConstruct 231 231 231
+             234:  222(ivec3) UMod 232 233
+                              Store 224(uv) 234
+             235: 190(i8vec3) Load 192(u8v)
+             236:  222(ivec3) UConvert 235
+             237:  222(ivec3) Load 224(uv)
+             238:  222(ivec3) IAdd 236 237
+                              Store 224(uv) 238
+             241:  14(int8_t) Load 197(i8)
+             242: 57(int16_t) SConvert 241
+             243: 57(int16_t) Load 240(i16)
+             244: 57(int16_t) ISub 242 243
+                              Store 240(i16) 244
+             245: 190(i8vec3) Load 192(u8v)
+             246:  222(ivec3) UConvert 245
+             247:  222(ivec3) Load 224(uv)
+             248:  222(ivec3) IMul 246 247
+                              Store 224(uv) 248
+             249:  14(int8_t) Load 197(i8)
+             250: 57(int16_t) SConvert 249
+             251: 57(int16_t) Load 240(i16)
+             252: 57(int16_t) IMul 250 251
+                              Store 240(i16) 252
+             253:  14(int8_t) Load 197(i8)
+             254:     27(int) SConvert 253
+             255:     27(int) Load 217(i)
+             256:     27(int) SMod 254 255
+                              Store 217(i) 256
+             257:  14(int8_t) Load 197(i8)
+             258: 190(i8vec3) Load 192(u8v)
+             259: 194(i8vec3) CompositeConstruct 257 257 257
+             260: 190(i8vec3) ShiftLeftLogical 258 259
+                              Store 192(u8v) 260
+             262:     37(ptr) AccessChain 192(u8v) 261
+             263:  36(int8_t) Load 262
+             264:  14(int8_t) Load 197(i8)
+             265:  14(int8_t) ShiftRightArithmetic 264 263
+                              Store 197(i8) 265
+             266:  14(int8_t) Load 197(i8)
+             268:     37(ptr) AccessChain 192(u8v) 267
+             269:  36(int8_t) Load 268
+             270:  14(int8_t) ShiftLeftLogical 266 269
+                              Store 197(i8) 270
+             271: 190(i8vec3) Load 192(u8v)
+             272:  14(int8_t) Load 197(i8)
+             273: 194(i8vec3) CompositeConstruct 272 272 272
+             274: 190(i8vec3) ShiftLeftLogical 271 273
+                              Store 192(u8v) 274
+             278:     37(ptr) AccessChain 192(u8v) 277
+             279:  36(int8_t) Load 278
+             280:  14(int8_t) Load 197(i8)
+             281:  36(int8_t) Bitcast 280
+             282:   171(bool) INotEqual 279 281
+                              Store 276(b) 282
+             283:  14(int8_t) Load 197(i8)
+             284:  36(int8_t) Bitcast 283
+             285:     37(ptr) AccessChain 192(u8v) 277
+             286:  36(int8_t) Load 285
+             287:   171(bool) IEqual 284 286
+                              Store 276(b) 287
+             288:     37(ptr) AccessChain 192(u8v) 277
+             289:  36(int8_t) Load 288
+             290:     17(int) UConvert 289
+             292:    291(ptr) AccessChain 224(uv) 261
+             293:     17(int) Load 292
+             294:   171(bool) UGreaterThan 290 293
+                              Store 276(b) 294
+             295:  14(int8_t) Load 197(i8)
+             296:     27(int) SConvert 295
+             297:     27(int) Load 217(i)
+             298:   171(bool) SLessThan 296 297
+                              Store 276(b) 298
+             299:     37(ptr) AccessChain 192(u8v) 261
+             300:  36(int8_t) Load 299
+             301:     17(int) UConvert 300
+             302:    291(ptr) AccessChain 224(uv) 277
+             303:     17(int) Load 302
+             304:   171(bool) UGreaterThanEqual 301 303
+                              Store 276(b) 304
+             305:  14(int8_t) Load 197(i8)
+             306:     27(int) SConvert 305
+             307:     27(int) Load 217(i)
+             308:   171(bool) SLessThanEqual 306 307
+                              Store 276(b) 308
+             309:  14(int8_t) Load 197(i8)
+             310:     27(int) SConvert 309
+             311:     17(int) Bitcast 310
+             312:  222(ivec3) Load 224(uv)
+             313:  222(ivec3) CompositeConstruct 311 311 311
+             314:  222(ivec3) BitwiseOr 312 313
+                              Store 224(uv) 314
+             315:  14(int8_t) Load 197(i8)
+             316:     27(int) SConvert 315
+             317:     27(int) Load 217(i)
+             318:     27(int) BitwiseOr 316 317
+                              Store 217(i) 318
+             319:  14(int8_t) Load 197(i8)
+             320: 57(int16_t) SConvert 319
+             321: 57(int16_t) Load 240(i16)
+             322: 57(int16_t) BitwiseAnd 321 320
+                              Store 240(i16) 322
+             323: 190(i8vec3) Load 192(u8v)
+             324:  222(ivec3) UConvert 323
+             325:  222(ivec3) Load 224(uv)
+             326:  222(ivec3) BitwiseAnd 324 325
+                              Store 224(uv) 326
+             327:  14(int8_t) Load 197(i8)
+             328:     27(int) SConvert 327
+             329:     17(int) Bitcast 328
+             330:  222(ivec3) Load 224(uv)
+             331:  222(ivec3) CompositeConstruct 329 329 329
+             332:  222(ivec3) BitwiseXor 330 331
+                              Store 224(uv) 332
+             333: 190(i8vec3) Load 192(u8v)
+             334:  14(int8_t) Load 197(i8)
+             335:  36(int8_t) Bitcast 334
+             336: 190(i8vec3) CompositeConstruct 335 335 335
+             337: 190(i8vec3) BitwiseXor 333 336
+                              Store 192(u8v) 337
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-        341(i8v):     53(ptr) Variable Function
-         344(i8):     15(ptr) Variable Function
-        354(u8v):    191(ptr) Variable Function
-         356(u8):     37(ptr) Variable Function
-        430(i16):    241(ptr) Variable Function
-        433(i32):    215(ptr) Variable Function
-       436(i8v4):    435(ptr) Variable Function
-        440(u16):    439(ptr) Variable Function
-       441(u8v2):     50(ptr) Variable Function
-        444(u32):    293(ptr) Variable Function
-       447(u8v4):    446(ptr) Variable Function
-         459(bv):    458(ptr) Variable Function
-             342:  52(i8vec2) Load 341(i8v)
-             343:  52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 342
-                              Store 341(i8v) 343
-             345:  14(int8_t) Load 344(i8)
-             346:  14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 345
-                              Store 344(i8) 346
-             347:  52(i8vec2) Load 341(i8v)
-             348:  14(int8_t) Load 344(i8)
-             349:  52(i8vec2) CompositeConstruct 348 348
-             350:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 347 349
-                              Store 341(i8v) 350
-             351:  52(i8vec2) Load 341(i8v)
-             353:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 352
-                              Store 341(i8v) 353
-             355: 190(i8vec3) Load 354(u8v)
-             357:  36(int8_t) Load 356(u8)
-             359: 358(i8vec3) CompositeConstruct 357 357 357
-             360: 190(i8vec3) ExtInst 1(GLSL.std.450) 39(SMin) 355 359
-                              Store 354(u8v) 360
-             361: 190(i8vec3) Load 354(u8v)
-             363: 190(i8vec3) ExtInst 1(GLSL.std.450) 39(SMin) 361 362
-                              Store 354(u8v) 363
-             364:  52(i8vec2) Load 341(i8v)
-             365:  14(int8_t) Load 344(i8)
-             366:  52(i8vec2) CompositeConstruct 365 365
-             367:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 366
-                              Store 341(i8v) 367
-             368:  52(i8vec2) Load 341(i8v)
-             369:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 368 352
-                              Store 341(i8v) 369
-             370: 190(i8vec3) Load 354(u8v)
-             371:  36(int8_t) Load 356(u8)
-             372: 358(i8vec3) CompositeConstruct 371 371 371
-             373: 190(i8vec3) ExtInst 1(GLSL.std.450) 42(SMax) 370 372
-                              Store 354(u8v) 373
-             374: 190(i8vec3) Load 354(u8v)
-             375: 190(i8vec3) ExtInst 1(GLSL.std.450) 42(SMax) 374 362
-                              Store 354(u8v) 375
-             376:  52(i8vec2) Load 341(i8v)
-             377:  14(int8_t) Load 344(i8)
-             378:  14(int8_t) SNegate 377
-             379:  14(int8_t) Load 344(i8)
-             380:  52(i8vec2) CompositeConstruct 378 378
-             381:  52(i8vec2) CompositeConstruct 379 379
-             382:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 376 380 381
-                              Store 341(i8v) 382
-             383:  52(i8vec2) Load 341(i8v)
-             384:  52(i8vec2) Load 341(i8v)
-             385:  52(i8vec2) SNegate 384
-             386:  52(i8vec2) Load 341(i8v)
-             387:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 383 385 386
-                              Store 341(i8v) 387
-             388: 190(i8vec3) Load 354(u8v)
-             389:  36(int8_t) Load 356(u8)
-             390:  36(int8_t) SNegate 389
-             391:  36(int8_t) Load 356(u8)
-             392: 358(i8vec3) CompositeConstruct 390 390 390
-             393: 358(i8vec3) CompositeConstruct 391 391 391
-             394: 190(i8vec3) ExtInst 1(GLSL.std.450) 45(SClamp) 388 392 393
-                              Store 354(u8v) 394
-             395: 190(i8vec3) Load 354(u8v)
-             396: 190(i8vec3) Load 354(u8v)
-             397: 190(i8vec3) SNegate 396
-             398: 190(i8vec3) Load 354(u8v)
-             399: 190(i8vec3) ExtInst 1(GLSL.std.450) 45(SClamp) 395 397 398
-                              Store 354(u8v) 399
-             400:     15(ptr) AccessChain 341(i8v) 280
-             401:  14(int8_t) Load 400
-             402:     15(ptr) AccessChain 341(i8v) 264
-             403:  14(int8_t) Load 402
-             405:  14(int8_t) Select 404 403 401
-                              Store 344(i8) 405
-             406:  14(int8_t) Load 344(i8)
-             407:  52(i8vec2) CompositeConstruct 406 406
-             408:  14(int8_t) Load 344(i8)
-             409:  14(int8_t) SNegate 408
-             410:  52(i8vec2) CompositeConstruct 409 409
-             413:  52(i8vec2) Select 412 410 407
-                              Store 341(i8v) 413
-             414:     15(ptr) AccessChain 354(u8v) 280
-             415:  14(int8_t) Load 414
-             416:     15(ptr) AccessChain 354(u8v) 264
-             417:  14(int8_t) Load 416
-             418:  14(int8_t) Select 404 417 415
-             419:  36(int8_t) Bitcast 418
-                              Store 356(u8) 419
-             420:  36(int8_t) Load 356(u8)
-             421:  14(int8_t) Bitcast 420
-             422: 190(i8vec3) CompositeConstruct 421 421 421
-             423:  36(int8_t) Load 356(u8)
-             424:  36(int8_t) SNegate 423
-             425:  14(int8_t) Bitcast 424
-             426: 190(i8vec3) CompositeConstruct 425 425 425
-             429: 190(i8vec3) Select 428 426 422
-                              Store 354(u8v) 429
-             431:  52(i8vec2) Load 341(i8v)
-             432: 57(int16_t) Bitcast 431
-                              Store 430(i16) 432
-             437: 434(i8vec4) Load 436(i8v4)
-             438:     27(int) Bitcast 437
-                              Store 433(i32) 438
-             442:  49(i8vec2) Load 441(u8v2)
-             443: 64(int16_t) Bitcast 442
-                              Store 440(u16) 443
-             448: 445(i8vec4) Load 447(u8v4)
-             449:     17(int) Bitcast 448
-                              Store 444(u32) 449
-             450: 57(int16_t) Load 430(i16)
-             451:  52(i8vec2) Bitcast 450
-                              Store 341(i8v) 451
-             452:     27(int) Load 433(i32)
-             453: 434(i8vec4) Bitcast 452
-                              Store 436(i8v4) 453
-             454: 64(int16_t) Load 440(u16)
-             455:  49(i8vec2) Bitcast 454
-                              Store 441(u8v2) 455
-             456:     17(int) Load 444(u32)
-             457: 445(i8vec4) Bitcast 456
-                              Store 447(u8v4) 457
-             460: 190(i8vec3) Load 354(u8v)
-             461:  36(int8_t) Load 356(u8)
-             462:  14(int8_t) Bitcast 461
-             463: 190(i8vec3) CompositeConstruct 462 462 462
-             464:  427(bvec3) SLessThan 460 463
-                              Store 459(bv) 464
-             465:  52(i8vec2) Load 341(i8v)
-             466:  14(int8_t) Load 344(i8)
-             467:  52(i8vec2) CompositeConstruct 466 466
-             468:  172(bvec2) SLessThan 465 467
-             469:  427(bvec3) Load 459(bv)
-             470:  427(bvec3) VectorShuffle 469 468 3 4 2
-                              Store 459(bv) 470
-             471: 190(i8vec3) Load 354(u8v)
-             472:  36(int8_t) Load 356(u8)
-             473:  14(int8_t) Bitcast 472
-             474: 190(i8vec3) CompositeConstruct 473 473 473
-             475:  427(bvec3) SLessThanEqual 471 474
-                              Store 459(bv) 475
-             476:  52(i8vec2) Load 341(i8v)
-             477:  14(int8_t) Load 344(i8)
-             478:  52(i8vec2) CompositeConstruct 477 477
-             479:  172(bvec2) SLessThanEqual 476 478
-             480:  427(bvec3) Load 459(bv)
-             481:  427(bvec3) VectorShuffle 480 479 3 4 2
-                              Store 459(bv) 481
-             482: 190(i8vec3) Load 354(u8v)
-             483:  36(int8_t) Load 356(u8)
-             484:  14(int8_t) Bitcast 483
+        338(i8v):     53(ptr) Variable Function
+         341(i8):     15(ptr) Variable Function
+        351(u8v):    191(ptr) Variable Function
+         353(u8):     37(ptr) Variable Function
+        423(i16):    239(ptr) Variable Function
+        426(i32):    216(ptr) Variable Function
+       429(i8v4):    428(ptr) Variable Function
+        433(u16):    432(ptr) Variable Function
+       434(u8v2):     50(ptr) Variable Function
+        437(u32):    291(ptr) Variable Function
+       440(u8v4):    439(ptr) Variable Function
+         452(bv):    451(ptr) Variable Function
+             339:  52(i8vec2) Load 338(i8v)
+             340:  52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 339
+                              Store 338(i8v) 340
+             342:  14(int8_t) Load 341(i8)
+             343:  14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 342
+                              Store 341(i8) 343
+             344:  52(i8vec2) Load 338(i8v)
+             345:  14(int8_t) Load 341(i8)
+             346:  52(i8vec2) CompositeConstruct 345 345
+             347:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 344 346
+                              Store 338(i8v) 347
+             348:  52(i8vec2) Load 338(i8v)
+             350:  52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 348 349
+                              Store 338(i8v) 350
+             352: 190(i8vec3) Load 351(u8v)
+             354:  36(int8_t) Load 353(u8)
+             355: 190(i8vec3) CompositeConstruct 354 354 354
+             356: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 352 355
+                              Store 351(u8v) 356
+             357: 190(i8vec3) Load 351(u8v)
+             359: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 358
+                              Store 351(u8v) 359
+             360:  52(i8vec2) Load 338(i8v)
+             361:  14(int8_t) Load 341(i8)
+             362:  52(i8vec2) CompositeConstruct 361 361
+             363:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 360 362
+                              Store 338(i8v) 363
+             364:  52(i8vec2) Load 338(i8v)
+             365:  52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 349
+                              Store 338(i8v) 365
+             366: 190(i8vec3) Load 351(u8v)
+             367:  36(int8_t) Load 353(u8)
+             368: 190(i8vec3) CompositeConstruct 367 367 367
+             369: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 366 368
+                              Store 351(u8v) 369
+             370: 190(i8vec3) Load 351(u8v)
+             371: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 370 358
+                              Store 351(u8v) 371
+             372:  52(i8vec2) Load 338(i8v)
+             373:  14(int8_t) Load 341(i8)
+             374:  14(int8_t) SNegate 373
+             375:  14(int8_t) Load 341(i8)
+             376:  52(i8vec2) CompositeConstruct 374 374
+             377:  52(i8vec2) CompositeConstruct 375 375
+             378:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 372 376 377
+                              Store 338(i8v) 378
+             379:  52(i8vec2) Load 338(i8v)
+             380:  52(i8vec2) Load 338(i8v)
+             381:  52(i8vec2) SNegate 380
+             382:  52(i8vec2) Load 338(i8v)
+             383:  52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 381 382
+                              Store 338(i8v) 383
+             384: 190(i8vec3) Load 351(u8v)
+             385:  36(int8_t) Load 353(u8)
+             386:  36(int8_t) SNegate 385
+             387:  36(int8_t) Load 353(u8)
+             388: 190(i8vec3) CompositeConstruct 386 386 386
+             389: 190(i8vec3) CompositeConstruct 387 387 387
+             390: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 384 388 389
+                              Store 351(u8v) 390
+             391: 190(i8vec3) Load 351(u8v)
+             392: 190(i8vec3) Load 351(u8v)
+             393: 190(i8vec3) SNegate 392
+             394: 190(i8vec3) Load 351(u8v)
+             395: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 393 394
+                              Store 351(u8v) 395
+             396:     15(ptr) AccessChain 338(i8v) 277
+             397:  14(int8_t) Load 396
+             398:     15(ptr) AccessChain 338(i8v) 261
+             399:  14(int8_t) Load 398
+             401:  14(int8_t) Select 400 399 397
+                              Store 341(i8) 401
+             402:  14(int8_t) Load 341(i8)
+             403:  52(i8vec2) CompositeConstruct 402 402
+             404:  14(int8_t) Load 341(i8)
+             405:  14(int8_t) SNegate 404
+             406:  52(i8vec2) CompositeConstruct 405 405
+             409:  52(i8vec2) Select 408 406 403
+                              Store 338(i8v) 409
+             410:     37(ptr) AccessChain 351(u8v) 277
+             411:  36(int8_t) Load 410
+             412:     37(ptr) AccessChain 351(u8v) 261
+             413:  36(int8_t) Load 412
+             414:  36(int8_t) Select 400 413 411
+                              Store 353(u8) 414
+             415:  36(int8_t) Load 353(u8)
+             416: 190(i8vec3) CompositeConstruct 415 415 415
+             417:  36(int8_t) Load 353(u8)
+             418:  36(int8_t) SNegate 417
+             419: 190(i8vec3) CompositeConstruct 418 418 418
+             422: 190(i8vec3) Select 421 419 416
+                              Store 351(u8v) 422
+             424:  52(i8vec2) Load 338(i8v)
+             425: 57(int16_t) Bitcast 424
+                              Store 423(i16) 425
+             430: 427(i8vec4) Load 429(i8v4)
+             431:     27(int) Bitcast 430
+                              Store 426(i32) 431
+             435:  49(i8vec2) Load 434(u8v2)
+             436: 64(int16_t) Bitcast 435
+                              Store 433(u16) 436
+             441: 438(i8vec4) Load 440(u8v4)
+             442:     17(int) Bitcast 441
+                              Store 437(u32) 442
+             443: 57(int16_t) Load 423(i16)
+             444:  52(i8vec2) Bitcast 443
+                              Store 338(i8v) 444
+             445:     27(int) Load 426(i32)
+             446: 427(i8vec4) Bitcast 445
+                              Store 429(i8v4) 446
+             447: 64(int16_t) Load 433(u16)
+             448:  49(i8vec2) Bitcast 447
+                              Store 434(u8v2) 448
+             449:     17(int) Load 437(u32)
+             450: 438(i8vec4) Bitcast 449
+                              Store 440(u8v4) 450
+             453: 190(i8vec3) Load 351(u8v)
+             454:  36(int8_t) Load 353(u8)
+             455: 190(i8vec3) CompositeConstruct 454 454 454
+             456:  420(bvec3) ULessThan 453 455
+                              Store 452(bv) 456
+             457:  52(i8vec2) Load 338(i8v)
+             458:  14(int8_t) Load 341(i8)
+             459:  52(i8vec2) CompositeConstruct 458 458
+             460:  172(bvec2) SLessThan 457 459
+             461:  420(bvec3) Load 452(bv)
+             462:  420(bvec3) VectorShuffle 461 460 3 4 2
+                              Store 452(bv) 462
+             463: 190(i8vec3) Load 351(u8v)
+             464:  36(int8_t) Load 353(u8)
+             465: 190(i8vec3) CompositeConstruct 464 464 464
+             466:  420(bvec3) ULessThanEqual 463 465
+                              Store 452(bv) 466
+             467:  52(i8vec2) Load 338(i8v)
+             468:  14(int8_t) Load 341(i8)
+             469:  52(i8vec2) CompositeConstruct 468 468
+             470:  172(bvec2) SLessThanEqual 467 469
+             471:  420(bvec3) Load 452(bv)
+             472:  420(bvec3) VectorShuffle 471 470 3 4 2
+                              Store 452(bv) 472
+             473: 190(i8vec3) Load 351(u8v)
+             474:  36(int8_t) Load 353(u8)
+             475: 190(i8vec3) CompositeConstruct 474 474 474
+             476:  420(bvec3) UGreaterThan 473 475
+                              Store 452(bv) 476
+             477:  52(i8vec2) Load 338(i8v)
+             478:  14(int8_t) Load 341(i8)
+             479:  52(i8vec2) CompositeConstruct 478 478
+             480:  172(bvec2) SGreaterThan 477 479
+             481:  420(bvec3) Load 452(bv)
+             482:  420(bvec3) VectorShuffle 481 480 3 4 2
+                              Store 452(bv) 482
+             483: 190(i8vec3) Load 351(u8v)
+             484:  36(int8_t) Load 353(u8)
              485: 190(i8vec3) CompositeConstruct 484 484 484
-             486:  427(bvec3) SGreaterThan 482 485
-                              Store 459(bv) 486
-             487:  52(i8vec2) Load 341(i8v)
-             488:  14(int8_t) Load 344(i8)
+             486:  420(bvec3) UGreaterThanEqual 483 485
+                              Store 452(bv) 486
+             487:  52(i8vec2) Load 338(i8v)
+             488:  14(int8_t) Load 341(i8)
              489:  52(i8vec2) CompositeConstruct 488 488
-             490:  172(bvec2) SGreaterThan 487 489
-             491:  427(bvec3) Load 459(bv)
-             492:  427(bvec3) VectorShuffle 491 490 3 4 2
-                              Store 459(bv) 492
-             493: 190(i8vec3) Load 354(u8v)
-             494:  36(int8_t) Load 356(u8)
-             495:  14(int8_t) Bitcast 494
-             496: 190(i8vec3) CompositeConstruct 495 495 495
-             497:  427(bvec3) SGreaterThanEqual 493 496
-                              Store 459(bv) 497
-             498:  52(i8vec2) Load 341(i8v)
-             499:  14(int8_t) Load 344(i8)
-             500:  52(i8vec2) CompositeConstruct 499 499
-             501:  172(bvec2) SGreaterThanEqual 498 500
-             502:  427(bvec3) Load 459(bv)
-             503:  427(bvec3) VectorShuffle 502 501 3 4 2
-                              Store 459(bv) 503
-             504: 190(i8vec3) Load 354(u8v)
-             505:  36(int8_t) Load 356(u8)
-             506:  14(int8_t) Bitcast 505
-             507: 190(i8vec3) CompositeConstruct 506 506 506
-             508:  427(bvec3) IEqual 504 507
-                              Store 459(bv) 508
-             509:  52(i8vec2) Load 341(i8v)
-             510:  14(int8_t) Load 344(i8)
-             511:  52(i8vec2) CompositeConstruct 510 510
-             512:  172(bvec2) IEqual 509 511
-             513:  427(bvec3) Load 459(bv)
-             514:  427(bvec3) VectorShuffle 513 512 3 4 2
-                              Store 459(bv) 514
-             515: 190(i8vec3) Load 354(u8v)
-             516:  36(int8_t) Load 356(u8)
-             517:  14(int8_t) Bitcast 516
-             518: 190(i8vec3) CompositeConstruct 517 517 517
-             519:  427(bvec3) INotEqual 515 518
-                              Store 459(bv) 519
-             520:  52(i8vec2) Load 341(i8v)
-             521:  14(int8_t) Load 344(i8)
-             522:  52(i8vec2) CompositeConstruct 521 521
-             523:  172(bvec2) INotEqual 520 522
-             524:  427(bvec3) Load 459(bv)
-             525:  427(bvec3) VectorShuffle 524 523 3 4 2
-                              Store 459(bv) 525
+             490:  172(bvec2) SGreaterThanEqual 487 489
+             491:  420(bvec3) Load 452(bv)
+             492:  420(bvec3) VectorShuffle 491 490 3 4 2
+                              Store 452(bv) 492
+             493: 190(i8vec3) Load 351(u8v)
+             494:  36(int8_t) Load 353(u8)
+             495: 190(i8vec3) CompositeConstruct 494 494 494
+             496:  420(bvec3) IEqual 493 495
+                              Store 452(bv) 496
+             497:  52(i8vec2) Load 338(i8v)
+             498:  14(int8_t) Load 341(i8)
+             499:  52(i8vec2) CompositeConstruct 498 498
+             500:  172(bvec2) IEqual 497 499
+             501:  420(bvec3) Load 452(bv)
+             502:  420(bvec3) VectorShuffle 501 500 3 4 2
+                              Store 452(bv) 502
+             503: 190(i8vec3) Load 351(u8v)
+             504:  36(int8_t) Load 353(u8)
+             505: 190(i8vec3) CompositeConstruct 504 504 504
+             506:  420(bvec3) INotEqual 503 505
+                              Store 452(bv) 506
+             507:  52(i8vec2) Load 338(i8v)
+             508:  14(int8_t) Load 341(i8)
+             509:  52(i8vec2) CompositeConstruct 508 508
+             510:  172(bvec2) INotEqual 507 509
+             511:  420(bvec3) Load 452(bv)
+             512:  420(bvec3) VectorShuffle 511 510 3 4 2
+                              Store 452(bv) 512
                               Return
                               FunctionEnd
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/Test/spv.16bitstorage-int.frag b/Test/spv.16bitstorage-int.frag
new file mode 100755 (executable)
index 0000000..57be67e
--- /dev/null
@@ -0,0 +1,90 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    int16_t  x;\r
+    i16vec2    y;\r
+    i16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    int16_t  a;\r
+    i16vec2    b;\r
+    i16vec3    c;\r
+    int16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    int16_t  o;\r
+    i16vec2    p;\r
+    i16vec3    q;\r
+    int16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    i16vec2    x[100];\r
+    int16_t  w[];\r
+} b2;\r
+\r
+layout(row_major, std140) uniform B5\r
+{\r
+    int16_t  o;\r
+    i16vec2    p;\r
+    i16vec3    q;\r
+    int16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    i16vec2    x[100];\r
+    int16_t  w[100];\r
+} b5;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    int16_t y;\r
+    int z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+    S3 y;\r
+} b4;\r
+\r
+void main()\r
+{\r
+    b2.o = b1.a;\r
+    b2.p = i16vec2(ivec3(b2.q).xy);\r
+    b2.p = i16vec2(ivec3(b5.q).xy);\r
+    b2.r[0] = b2.r[0];\r
+    b2.r[1] = b5.r[1];\r
+    b2.p = b2.p;\r
+    int x0 = int(b1.a);\r
+    ivec4 x1 = ivec4(b1.a, b2.p, 1);\r
+    b4.x.x = b3.x.x;\r
+    b2.o = int16_t(ivec2(b2.p).x);\r
+    b2.p = b2.v[1].y;\r
+    ivec3 v3 = ivec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);\r
+    ivec3 u3 = ivec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);\r
+    b2.x[0] = b2.x[0];\r
+    b2.x[1] = b5.x[1];\r
+    b2.p.x = b1.a;\r
+    b2.o = b2.p.x;\r
+    b2.p = i16vec2(ivec2(1, 2));\r
+    b2.o = int16_t(3);\r
+}\r
+\r
diff --git a/Test/spv.16bitstorage-uint.frag b/Test/spv.16bitstorage-uint.frag
new file mode 100755 (executable)
index 0000000..aeecd04
--- /dev/null
@@ -0,0 +1,90 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    uint16_t  x;\r
+    u16vec2    y;\r
+    u16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    uint16_t  a;\r
+    u16vec2    b;\r
+    u16vec3    c;\r
+    uint16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    uint        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    uint16_t  o;\r
+    u16vec2    p;\r
+    u16vec3    q;\r
+    uint16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    u16vec2    x[100];\r
+    uint16_t  w[];\r
+} b2;\r
+\r
+layout(row_major, std140) uniform B5\r
+{\r
+    uint16_t  o;\r
+    u16vec2    p;\r
+    u16vec3    q;\r
+    uint16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    u16vec2    x[100];\r
+    uint16_t  w[100];\r
+} b5;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    uint16_t y;\r
+    uint z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+    S3 y;\r
+} b4;\r
+\r
+void main()\r
+{\r
+    b2.o = b1.a;\r
+    b2.p = u16vec2(uvec3(b2.q).xy);\r
+    b2.p = u16vec2(uvec3(b5.q).xy);\r
+    b2.r[0] = b2.r[0];\r
+    b2.r[1] = b5.r[1];\r
+    b2.p = b2.p;\r
+    uint x0 = uint(b1.a);\r
+    uvec4 x1 = uvec4(b1.a, b2.p, 1);\r
+    b4.x.x = b3.x.x;\r
+    b2.o = uint16_t(uvec2(b2.p).x);\r
+    b2.p = b2.v[1].y;\r
+    uvec3 v3 = uvec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);\r
+    uvec3 u3 = uvec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);\r
+    b2.x[0] = b2.x[0];\r
+    b2.x[1] = b5.x[1];\r
+    b2.p.x = b1.a;\r
+    b2.o = b2.p.x;\r
+    b2.p = u16vec2(uvec2(1, 2));\r
+    b2.o = uint16_t(3u);\r
+}\r
+\r
diff --git a/Test/spv.16bitstorage.frag b/Test/spv.16bitstorage.frag
new file mode 100755 (executable)
index 0000000..b821be1
--- /dev/null
@@ -0,0 +1,90 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    float16_t  x;\r
+    f16vec2    y;\r
+    f16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    float16_t  a;\r
+    f16vec2    b;\r
+    f16vec3    c;\r
+    float16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    float16_t  o;\r
+    f16vec2    p;\r
+    f16vec3    q;\r
+    float16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    f16vec2    x[100];\r
+    float16_t  w[];\r
+} b2;\r
+\r
+layout(row_major, std140) uniform B5\r
+{\r
+    float16_t  o;\r
+    f16vec2    p;\r
+    f16vec3    q;\r
+    float16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    f16vec2    x[100];\r
+    float16_t  w[100];\r
+} b5;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    float16_t y;\r
+    float z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+    S3 y;\r
+} b4;\r
+\r
+void main()\r
+{\r
+    b2.o = b1.a;\r
+    b2.p = f16vec2(vec3(b2.q).xy);\r
+    b2.p = f16vec2(vec3(b5.q).xy);\r
+    b2.r[0] = b2.r[0];\r
+    b2.r[1] = b5.r[1];\r
+    b2.p = b2.p;\r
+    float x0 = float(b1.a);\r
+    vec4 x1 = vec4(b1.a, b2.p, 1.0);\r
+    b4.x.x = b3.x.x;\r
+    b2.o = float16_t(vec2(b2.p).x);\r
+    b2.p = b2.v[1].y;\r
+    vec3 v3 = vec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);\r
+    vec3 u3 = vec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);\r
+    b2.x[0] = b2.x[0];\r
+    b2.x[1] = b5.x[1];\r
+    b2.p.x = b1.a;\r
+    b2.o = b2.p.x;\r
+    b2.p = f16vec2(vec2(1.0, 2.0));\r
+    b2.o = float16_t(3.0);\r
+}\r
+\r
diff --git a/Test/spv.16bitstorage_Error-int.frag b/Test/spv.16bitstorage_Error-int.frag
new file mode 100755 (executable)
index 0000000..1897b02
--- /dev/null
@@ -0,0 +1,101 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    int16_t  x;\r
+    i16vec2    y;\r
+    i16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    int16_t  a;\r
+    i16vec2    b;\r
+    i16vec3    c;\r
+    int16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    int16_t  o;\r
+    i16vec2    p;\r
+    i16vec3    q;\r
+    int16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    int16_t  w[];\r
+} b2;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    int16_t y;\r
+    int z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+} b4;\r
+\r
+void func3(S2 x) {\r
+}\r
+\r
+S2 func4() {\r
+    return b4.x;\r
+}\r
+\r
+int func(int16_t a) {\r
+    return 0;\r
+}\r
+\r
+struct S4 {\r
+    int x;\r
+    int16_t y;\r
+};\r
+\r
+int func2(int a) { return 0; }\r
+\r
+void main()\r
+{\r
+    b2.o = b2.q[1];\r
+    b2.p = b2.q.xy;\r
+    b2.o = max(b1.a, b1.a);\r
+    bvec2 bv = lessThan(b2.p, b2.p);\r
+    b2.o = b1.a + b1.a;\r
+    b2.o = -b1.a;\r
+    b2.o = b1.a + 1;\r
+    b2.p = b2.p.yx;\r
+    b4.x = b3.x;\r
+    int16_t f0;\r
+    S2 f1;\r
+    S3 f2;\r
+    if (b1.a == b1.a) {}\r
+    b2.r = b2.r;\r
+    b2.p = i16vec2(3, 4);\r
+    i16vec2[2](i16vec2(ivec2(1,2)), i16vec2(ivec2(3,4)));\r
+    // NOT ERRORING YET\r
+    b3.x;\r
+    S4(0, int16_t(0));\r
+    func2(b1.a);\r
+}\r
+\r
+\r
+layout(column_major, std140) uniform B6\r
+{\r
+    i16mat2x3  e;\r
+} b6;\r
+\r
diff --git a/Test/spv.16bitstorage_Error-uint.frag b/Test/spv.16bitstorage_Error-uint.frag
new file mode 100755 (executable)
index 0000000..5f32a3b
--- /dev/null
@@ -0,0 +1,101 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    uint16_t  x;\r
+    u16vec2    y;\r
+    u16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    uint16_t  a;\r
+    u16vec2    b;\r
+    u16vec3    c;\r
+    uint16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    uint        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    uint16_t  o;\r
+    u16vec2    p;\r
+    u16vec3    q;\r
+    uint16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    uint16_t  w[];\r
+} b2;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    uint16_t y;\r
+    uint z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+} b4;\r
+\r
+void func3(S2 x) {\r
+}\r
+\r
+S2 func4() {\r
+    return b4.x;\r
+}\r
+\r
+uint func(uint16_t a) {\r
+    return 0;\r
+}\r
+\r
+struct S4 {\r
+    uint x;\r
+    uint16_t y;\r
+};\r
+\r
+uint func2(uint a) { return 0; }\r
+\r
+void main()\r
+{\r
+    b2.o = b2.q[1];\r
+    b2.p = b2.q.xy;\r
+    b2.o = max(b1.a, b1.a);\r
+    bvec2 bv = lessThan(b2.p, b2.p);\r
+    b2.o = b1.a + b1.a;\r
+    b2.o = -b1.a;\r
+    b2.o = b1.a + 1;\r
+    b2.p = b2.p.yx;\r
+    b4.x = b3.x;\r
+    uint16_t f0;\r
+    S2 f1;\r
+    S3 f2;\r
+    if (b1.a == b1.a) {}\r
+    b2.r = b2.r;\r
+    b2.p = u16vec2(3, 4);\r
+    u16vec2[2](u16vec2(uvec2(1,2)), u16vec2(uvec2(3,4)));\r
+    // NOT ERRORING YET\r
+    b3.x;\r
+    S4(0u, uint16_t(0u));\r
+    func2(b1.a);\r
+}\r
+\r
+\r
+layout(column_major, std140) uniform B6\r
+{\r
+    u16mat2x3  e;\r
+} b6;\r
+\r
diff --git a/Test/spv.16bitstorage_Error.frag b/Test/spv.16bitstorage_Error.frag
new file mode 100755 (executable)
index 0000000..7a61a97
--- /dev/null
@@ -0,0 +1,102 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_16bit_storage : enable\r
+\r
+struct S\r
+{\r
+    float16_t  x;\r
+    f16vec2    y;\r
+    f16vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    float16_t  a;\r
+    f16vec2    b;\r
+    f16vec3    c;\r
+    float16_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    float16_t  o;\r
+    f16vec2    p;\r
+    f16vec3    q;\r
+    float16_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    float16_t  w[];\r
+} b2;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    float16_t y;\r
+    float z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+} b4;\r
+\r
+void func3(S2 x) {\r
+}\r
+\r
+S2 func4() {\r
+    return b4.x;\r
+}\r
+\r
+float func(float16_t a) {\r
+    return 0.0;\r
+}\r
+\r
+struct S4 {\r
+    float x;\r
+    float16_t y;\r
+};\r
+\r
+float func2(float a) { return 0.0; }\r
+\r
+void main()\r
+{\r
+    b2.o = b2.q[1];\r
+    b2.p = b2.q.xy;\r
+    b2.o = max(b1.a, b1.a);\r
+    bvec2 bv = lessThan(b2.p, b2.p);\r
+    b2.o = b1.a + b1.a;\r
+    b2.o = -b1.a;\r
+    b2.o = b1.a + 1.0;\r
+    b2.p = b2.p.yx;\r
+    b4.x = b3.x;\r
+    float16_t f0;\r
+    S2 f1;\r
+    S3 f2;\r
+    if (b1.a == b1.a) {}\r
+    b2.r = b2.r;\r
+    b2.o = 1.0HF;\r
+    b2.p = f16vec2(3.0, 4.0);\r
+    f16vec2[2](f16vec2(vec2(1.0,2.0)), f16vec2(vec2(3.0,4.0)));\r
+    // NOT ERRORING YET\r
+    b3.x;\r
+    S4(0.0, float16_t(0.0));\r
+    func2(b1.a);\r
+}\r
+\r
+\r
+layout(column_major, std140) uniform B6\r
+{\r
+    f16mat2x3  e;\r
+} b6;\r
+\r
diff --git a/Test/spv.8bitstorage-int.frag b/Test/spv.8bitstorage-int.frag
new file mode 100755 (executable)
index 0000000..93203c3
--- /dev/null
@@ -0,0 +1,90 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_8bit_storage : enable\r
+\r
+struct S\r
+{\r
+    int8_t  x;\r
+    i8vec2    y;\r
+    i8vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    int8_t  a;\r
+    i8vec2    b;\r
+    i8vec3    c;\r
+    int8_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    int8_t  o;\r
+    i8vec2    p;\r
+    i8vec3    q;\r
+    int8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    i8vec2    x[100];\r
+    int8_t  w[];\r
+} b2;\r
+\r
+layout(row_major, std140) uniform B5\r
+{\r
+    int8_t  o;\r
+    i8vec2    p;\r
+    i8vec3    q;\r
+    int8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    i8vec2    x[100];\r
+    int8_t  w[100];\r
+} b5;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    int8_t y;\r
+    int z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+    S3 y;\r
+} b4;\r
+\r
+void main()\r
+{\r
+    b2.o = b1.a;\r
+    b2.p = i8vec2(ivec3(b2.q).xy);\r
+    b2.p = i8vec2(ivec3(b5.q).xy);\r
+    b2.r[0] = b2.r[0];\r
+    b2.r[1] = b5.r[1];\r
+    b2.p = b2.p;\r
+    int x0 = int(b1.a);\r
+    ivec4 x1 = ivec4(b1.a, b2.p, 1);\r
+    b4.x.x = b3.x.x;\r
+    b2.o = int8_t(ivec2(b2.p).x);\r
+    b2.p = b2.v[1].y;\r
+    ivec3 v3 = ivec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);\r
+    ivec3 u3 = ivec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);\r
+    b2.x[0] = b2.x[0];\r
+    b2.x[1] = b5.x[1];\r
+    b2.p.x = b1.a;\r
+    b2.o = b2.p.x;\r
+    b2.p = i8vec2(ivec2(1, 2));\r
+    b2.o = int8_t(3);\r
+}\r
+\r
diff --git a/Test/spv.8bitstorage-uint.frag b/Test/spv.8bitstorage-uint.frag
new file mode 100755 (executable)
index 0000000..574d088
--- /dev/null
@@ -0,0 +1,90 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_8bit_storage : enable\r
+\r
+struct S\r
+{\r
+    uint8_t  x;\r
+    u8vec2    y;\r
+    u8vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    uint8_t  a;\r
+    u8vec2    b;\r
+    u8vec3    c;\r
+    uint8_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    uint        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    uint8_t  o;\r
+    u8vec2    p;\r
+    u8vec3    q;\r
+    uint8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    u8vec2    x[100];\r
+    uint8_t  w[];\r
+} b2;\r
+\r
+layout(row_major, std140) uniform B5\r
+{\r
+    uint8_t  o;\r
+    u8vec2    p;\r
+    u8vec3    q;\r
+    uint8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    u8vec2    x[100];\r
+    uint8_t  w[100];\r
+} b5;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    uint8_t y;\r
+    uint z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+    S3 y;\r
+} b4;\r
+\r
+void main()\r
+{\r
+    b2.o = b1.a;\r
+    b2.p = u8vec2(uvec3(b2.q).xy);\r
+    b2.p = u8vec2(uvec3(b5.q).xy);\r
+    b2.r[0] = b2.r[0];\r
+    b2.r[1] = b5.r[1];\r
+    b2.p = b2.p;\r
+    uint x0 = uint(b1.a);\r
+    uvec4 x1 = uvec4(b1.a, b2.p, 1);\r
+    b4.x.x = b3.x.x;\r
+    b2.o = uint8_t(uvec2(b2.p).x);\r
+    b2.p = b2.v[1].y;\r
+    uvec3 v3 = uvec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);\r
+    uvec3 u3 = uvec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);\r
+    b2.x[0] = b2.x[0];\r
+    b2.x[1] = b5.x[1];\r
+    b2.p.x = b1.a;\r
+    b2.o = b2.p.x;\r
+    b2.p = u8vec2(uvec2(1, 2));\r
+    b2.o = uint8_t(3u);\r
+}\r
+\r
diff --git a/Test/spv.8bitstorage_Error-int.frag b/Test/spv.8bitstorage_Error-int.frag
new file mode 100755 (executable)
index 0000000..35fe182
--- /dev/null
@@ -0,0 +1,101 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_8bit_storage : enable\r
+\r
+struct S\r
+{\r
+    int8_t  x;\r
+    i8vec2    y;\r
+    i8vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    int8_t  a;\r
+    i8vec2    b;\r
+    i8vec3    c;\r
+    int8_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    int        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    int8_t  o;\r
+    i8vec2    p;\r
+    i8vec3    q;\r
+    int8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    int8_t  w[];\r
+} b2;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    int8_t y;\r
+    int z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+} b4;\r
+\r
+void func3(S2 x) {\r
+}\r
+\r
+S2 func4() {\r
+    return b4.x;\r
+}\r
+\r
+int func(int8_t a) {\r
+    return 0;\r
+}\r
+\r
+struct S4 {\r
+    int x;\r
+    int8_t y;\r
+};\r
+\r
+int func2(int a) { return 0; }\r
+\r
+void main()\r
+{\r
+    b2.o = b2.q[1];\r
+    b2.p = b2.q.xy;\r
+    b2.o = max(b1.a, b1.a);\r
+    bvec2 bv = lessThan(b2.p, b2.p);\r
+    b2.o = b1.a + b1.a;\r
+    b2.o = -b1.a;\r
+    b2.o = b1.a + 1;\r
+    b2.p = b2.p.yx;\r
+    b4.x = b3.x;\r
+    int8_t f0;\r
+    S2 f1;\r
+    S3 f2;\r
+    if (b1.a == b1.a) {}\r
+    b2.r = b2.r;\r
+    b2.p = i8vec2(3, 4);\r
+    i8vec2[2](i8vec2(ivec2(1,2)), i8vec2(ivec2(3,4)));\r
+    // NOT ERRORING YET\r
+    b3.x;\r
+    S4(0, int8_t(0));\r
+    func2(b1.a);\r
+}\r
+\r
+\r
+layout(column_major, std140) uniform B6\r
+{\r
+    i8mat2x3  e;\r
+} b6;\r
+\r
diff --git a/Test/spv.8bitstorage_Error-uint.frag b/Test/spv.8bitstorage_Error-uint.frag
new file mode 100755 (executable)
index 0000000..5d0209f
--- /dev/null
@@ -0,0 +1,101 @@
+#version 450 core\r
+\r
+#extension GL_EXT_shader_8bit_storage : enable\r
+\r
+struct S\r
+{\r
+    uint8_t  x;\r
+    u8vec2    y;\r
+    u8vec3    z;\r
+};\r
+\r
+layout(column_major, std140) uniform B1\r
+{\r
+    uint8_t  a;\r
+    u8vec2    b;\r
+    u8vec3    c;\r
+    uint8_t  d[2];\r
+    S          g;\r
+    S          h[2];\r
+    uint        j;\r
+} b1;\r
+\r
+layout(row_major, std430) buffer B2\r
+{\r
+    uint8_t  o;\r
+    u8vec2    p;\r
+    u8vec3    q;\r
+    uint8_t  r[2];\r
+    S          u;\r
+    S          v[2];\r
+    uint8_t  w[];\r
+} b2;\r
+\r
+struct S2 {\r
+    mat4x4 x;\r
+    uint8_t y;\r
+    uint z;\r
+};\r
+\r
+struct S3 {\r
+    S2 x;\r
+};\r
+\r
+layout(row_major, std430) buffer B3\r
+{\r
+    S2 x;\r
+} b3;\r
+\r
+layout(column_major, std430) buffer B4\r
+{\r
+    S2 x;\r
+} b4;\r
+\r
+void func3(S2 x) {\r
+}\r
+\r
+S2 func4() {\r
+    return b4.x;\r
+}\r
+\r
+uint func(uint8_t a) {\r
+    return 0;\r
+}\r
+\r
+struct S4 {\r
+    uint x;\r
+    uint8_t y;\r
+};\r
+\r
+uint func2(uint a) { return 0; }\r
+\r
+void main()\r
+{\r
+    b2.o = b2.q[1];\r
+    b2.p = b2.q.xy;\r
+    b2.o = max(b1.a, b1.a);\r
+    bvec2 bv = lessThan(b2.p, b2.p);\r
+    b2.o = b1.a + b1.a;\r
+    b2.o = -b1.a;\r
+    b2.o = b1.a + 1;\r
+    b2.p = b2.p.yx;\r
+    b4.x = b3.x;\r
+    uint8_t f0;\r
+    S2 f1;\r
+    S3 f2;\r
+    if (b1.a == b1.a) {}\r
+    b2.r = b2.r;\r
+    b2.p = u8vec2(3, 4);\r
+    u8vec2[2](u8vec2(uvec2(1,2)), u8vec2(uvec2(3,4)));\r
+    // NOT ERRORING YET\r
+    b3.x;\r
+    S4(0u, uint8_t(0u));\r
+    func2(b1.a);\r
+}\r
+\r
+\r
+layout(column_major, std140) uniform B6\r
+{\r
+    u8mat2x3  e;\r
+} b6;\r
+\r
old mode 100644 (file)
new mode 100755 (executable)
index 39d6737..2b0c7a1
@@ -1472,6 +1472,16 @@ public:
         return contains([](const TType* t) { return t->isArray() && t->arraySizes->isOuterSpecialization(); } );
     }
 
+    virtual bool contains16BitInt() const
+    {
+        return containsBasicType(EbtInt16) || containsBasicType(EbtUint16);
+    }
+
+    virtual bool contains8BitInt() const
+    {
+        return containsBasicType(EbtInt8) || containsBasicType(EbtUint8);
+    }
+
     // Array editing methods.  Array descriptors can be shared across
     // type instances.  This allows all uses of the same array
     // to be updated at once.  E.g., all nodes can be explicitly sized
index 90db388..b8d443b 100644 (file)
@@ -1,3 +1,3 @@
 // This header is generated by the make-revision script.
 
-#define GLSLANG_PATCH_LEVEL 2796
+#define GLSLANG_PATCH_LEVEL 2797
old mode 100644 (file)
new mode 100755 (executable)
index de72217..8eb5ff5
@@ -881,6 +881,9 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
     // like vector and matrix sizes.
 
     TBasicType promoteTo;
+    // GL_EXT_shader_16bit_storage can't do OpConstantComposite with
+    // 16-bit types, so disable promotion for those types.
+    bool canPromoteConstant = true;
 
     switch (op) {
     //
@@ -897,18 +900,28 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
         break;
     case EOpConstructFloat16:
         promoteTo = EbtFloat16;
+        canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                             extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16);
         break;
     case EOpConstructInt8:
         promoteTo = EbtInt8;
+        canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                             extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8);
         break;
     case EOpConstructUint8:
         promoteTo = EbtUint8;
+        canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                             extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8);
         break;
     case EOpConstructInt16:
         promoteTo = EbtInt16;
+        canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                             extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16);
         break;
     case EOpConstructUint16:
         promoteTo = EbtUint16;
+        canPromoteConstant = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                             extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16);
         break;
     case EOpConstructInt:
         promoteTo = EbtInt;
@@ -999,7 +1012,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
             return nullptr;
     }
 
-    if (node->getAsConstantUnion())
+    if (canPromoteConstant && node->getAsConstantUnion())
         return promoteConstantUnion(promoteTo, node->getAsConstantUnion());
 
     //
@@ -1468,16 +1481,16 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             case EbtUint:
             case EbtInt64:
             case EbtUint64:
+            case EbtFloat:
+            case EbtDouble:
+                return true;
 #ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
+            case EbtFloat16:
+                return extensionRequested(E_GL_AMD_gpu_shader_half_float);
 #endif
-             case EbtFloat:
-             case EbtDouble:
-#ifdef AMD_EXTENSIONS
-             case EbtFloat16:
-#endif
-                return true;
             default:
                 return false;
            }
@@ -1485,17 +1498,21 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             switch (from) {
             case EbtInt:
             case EbtUint:
+            case EbtFloat:
+                 return true;
+            case EbtBool:
+                 return (source == EShSourceHlsl);
 #ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
 #endif
-            case EbtFloat:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
+                return 
+#ifdef AMD_EXTENSIONS
+                    extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
 #endif
-                 return true;
-            case EbtBool:
-                 return (source == EShSourceHlsl);
+                    (source == EShSourceHlsl);
             default:
                  return false;
             }
@@ -1504,25 +1521,27 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             case EbtInt:
                  return version >= 400 || (source == EShSourceHlsl);
             case EbtUint:
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
 #ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
 #endif
-                return true;
-            case EbtBool:
-                return (source == EShSourceHlsl);
             default:
                 return false;
             }
         case EbtInt:
             switch (from) {
             case EbtInt:
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-#endif
                 return true;
             case EbtBool:
                 return (source == EShSourceHlsl);
+#ifdef AMD_EXTENSIONS
+            case EbtInt16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
+#endif
             default:
                 return false;
             }
@@ -1532,11 +1551,12 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             case EbtUint:
             case EbtInt64:
             case EbtUint64:
+                return true;
 #ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
 #endif
-                return true;
             default:
                 return false;
             }
@@ -1544,32 +1564,36 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
             switch (from) {
             case EbtInt:
             case EbtInt64:
+                return true;
 #ifdef AMD_EXTENSIONS
             case EbtInt16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
 #endif
-                return true;
             default:
                 return false;
             }
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
             switch (from) {
+#ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
             case EbtFloat16:
-                return true;
+                return extensionRequested(E_GL_AMD_gpu_shader_half_float);
+#endif
             default:
                 return false;
         }
         case EbtUint16:
             switch (from) {
+#ifdef AMD_EXTENSIONS
             case EbtInt16:
             case EbtUint16:
-                return true;
+                return extensionRequested(E_GL_AMD_gpu_shader_int16);
+#endif
             default:
                 return false;
         }
-#endif
         default:
             return false;
         }
index 92c6f53..926cb49 100755 (executable)
@@ -354,95 +354,108 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
 //
 TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index)
 {
-    TIntermTyped* result = nullptr;
-
     int indexValue = 0;
     if (index->getQualifier().isFrontEndConstant())
         indexValue = index->getAsConstantUnion()->getConstArray()[0].getIConst();
 
+    // basic type checks...
     variableCheck(base);
+
     if (! base->isArray() && ! base->isMatrix() && ! base->isVector()) {
         if (base->getAsSymbolNode())
             error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), "");
         else
             error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
-    } else if (base->getType().getQualifier().isFrontEndConstant() && index->getQualifier().isFrontEndConstant()) {
+
+        // Insert dummy error-recovery result
+        return intermediate.addConstantUnion(0.0, EbtFloat, loc);
+    }
+
+    if (!base->isArray() && base->isVector()) {
+        if (base->getType().containsBasicType(EbtFloat16)) {
+            requireFloat16Arithmetic(loc, "'[' does not operate on types containing float16");
+        }
+        if (base->getType().contains16BitInt()) {
+            requireInt16Arithmetic(loc, "'[' does not operate on types containing (u)int16");
+        }
+        if (base->getType().contains8BitInt()) {
+            requireInt8Arithmetic(loc, "'[' does not operate on types containing (u)int8");
+        }
+    }
+
+    // check for constant folding
+    if (base->getType().getQualifier().isFrontEndConstant() && index->getQualifier().isFrontEndConstant()) {
         // both base and index are front-end constants
         checkIndex(loc, base->getType(), indexValue);
         return intermediate.foldDereference(base, indexValue, loc);
-    } else {
-        // at least one of base and index is not a front-end constant variable...
+    }
 
-        if (index->getQualifier().isFrontEndConstant())
-            checkIndex(loc, base->getType(), indexValue);
+    // at least one of base and index is not a front-end constant variable...
+    TIntermTyped* result = nullptr;
+    if (index->getQualifier().isFrontEndConstant())
+        checkIndex(loc, base->getType(), indexValue);
 
-        if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
-            handleIoResizeArrayAccess(loc, base);
+    if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
+        handleIoResizeArrayAccess(loc, base);
 
-        if (index->getQualifier().isFrontEndConstant()) {
-            if (base->getType().isUnsizedArray())
-                base->getWritableType().updateImplicitArraySize(indexValue + 1);
-            else
-                checkIndex(loc, base->getType(), indexValue);
-            result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
-        } else {
-            if (base->getType().isUnsizedArray()) {
-                // we have a variable index into an unsized array, which is okay,
-                // depending on the situation
-                if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
-                    error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable");
-                else {
-                    // it is okay for a run-time sized array
-                    checkRuntimeSizable(loc, *base);
-                }
-                base->getWritableType().setArrayVariablyIndexed();
+    if (index->getQualifier().isFrontEndConstant()) {
+        if (base->getType().isUnsizedArray())
+            base->getWritableType().updateImplicitArraySize(indexValue + 1);
+        else
+            checkIndex(loc, base->getType(), indexValue);
+        result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
+    } else {
+        if (base->getType().isUnsizedArray()) {
+            // we have a variable index into an unsized array, which is okay,
+            // depending on the situation
+            if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
+                error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable");
+            else {
+                // it is okay for a run-time sized array
+                checkRuntimeSizable(loc, *base);
             }
-            if (base->getBasicType() == EbtBlock) {
-                if (base->getQualifier().storage == EvqBuffer)
-                    requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
-                else if (base->getQualifier().storage == EvqUniform)
-                    profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
-                                    "variable indexing uniform block array");
-                else {
-                    // input/output blocks either don't exist or can be variable indexed
-                }
-            } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
-                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
-            else if (base->getBasicType() == EbtSampler && version >= 130) {
-                const char* explanation = "variable indexing sampler array";
-                requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation);
-                profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation);
-                profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation);
+            base->getWritableType().setArrayVariablyIndexed();
+        }
+        if (base->getBasicType() == EbtBlock) {
+            if (base->getQualifier().storage == EvqBuffer)
+                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
+            else if (base->getQualifier().storage == EvqUniform)
+                profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
+                                "variable indexing uniform block array");
+            else {
+                // input/output blocks either don't exist or can be variable indexed
             }
-
-            result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
+        } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
+            requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
+        else if (base->getBasicType() == EbtSampler && version >= 130) {
+            const char* explanation = "variable indexing sampler array";
+            requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation);
+            profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation);
+            profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation);
         }
+
+        result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
     }
 
-    if (result == nullptr) {
-        // Insert dummy error-recovery result
-        result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
-    } else {
-        // Insert valid dereferenced result
-        TType newType(base->getType(), 0);  // dereferenced type
-        if (base->getType().getQualifier().isConstant() && index->getQualifier().isConstant()) {
-            newType.getQualifier().storage = EvqConst;
-            // If base or index is a specialization constant, the result should also be a specialization constant.
-            if (base->getType().getQualifier().isSpecConstant() || index->getQualifier().isSpecConstant()) {
-                newType.getQualifier().makeSpecConstant();
-            }
-        } else {
-            newType.getQualifier().makePartialTemporary();
+    // Insert valid dereferenced result
+    TType newType(base->getType(), 0);  // dereferenced type
+    if (base->getType().getQualifier().isConstant() && index->getQualifier().isConstant()) {
+        newType.getQualifier().storage = EvqConst;
+        // If base or index is a specialization constant, the result should also be a specialization constant.
+        if (base->getType().getQualifier().isSpecConstant() || index->getQualifier().isSpecConstant()) {
+            newType.getQualifier().makeSpecConstant();
         }
-        result->setType(newType);
+    } else {
+        newType.getQualifier().makePartialTemporary();
+    }
+    result->setType(newType);
 
-        // Propagate nonuniform
-        if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
-            result->getWritableType().getQualifier().nonUniform = true;
+    // Propagate nonuniform
+    if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
+        result->getWritableType().getQualifier().nonUniform = true;
 
-        if (anyIndexLimits)
-            handleIndexLimits(loc, base, index);
-    }
+    if (anyIndexLimits)
+        handleIndexLimits(loc, base, index);
 
     return result;
 }
@@ -615,6 +628,12 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char*
         break;
     }
 
+    if (((left->getType().containsBasicType(EbtFloat16) || right->getType().containsBasicType(EbtFloat16)) && !float16Arithmetic()) ||
+        ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) ||
+        ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic())) {
+        allowed = false;
+    }
+
     TIntermTyped* result = nullptr;
     if (allowed)
         result = intermediate.addBinaryMath(op, left, right, loc);
@@ -630,7 +649,17 @@ TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char*
 {
     rValueErrorCheck(loc, str, childNode);
 
-    TIntermTyped* result = intermediate.addUnaryMath(op, childNode, loc);
+    bool allowed = true;
+    if ((childNode->getType().containsBasicType(EbtFloat16) && !float16Arithmetic()) ||
+        (childNode->getType().contains16BitInt() && !int16Arithmetic()) ||
+        (childNode->getType().contains8BitInt() && !int8Arithmetic())) {
+        allowed = false;
+    }
+
+    TIntermTyped* result = nullptr;
+    
+    if (allowed)
+        result = intermediate.addUnaryMath(op, childNode, loc);
 
     if (result)
         return result;
@@ -692,6 +721,16 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm
         TSwizzleSelectors<TVectorSelector> selectors;
         parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
 
+        if (base->isVector() && selectors.size() != 1 && base->getType().containsBasicType(EbtFloat16)) {
+            requireFloat16Arithmetic(loc, "can't swizzle types containing float16");
+        }
+        if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt()) {
+            requireInt16Arithmetic(loc, "can't swizzle types containing (u)int16");
+        }
+        if (base->isVector() && selectors.size() != 1 && base->getType().contains8BitInt()) {
+            requireInt8Arithmetic(loc, "can't swizzle types containing (u)int8");
+        }
+
         if (base->isScalar()) {
             if (selectors.size() == 1)
                 return result;
@@ -970,6 +1009,16 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
             if (builtIn && fnCandidate->getNumExtensions())
                 requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 
+            if (builtIn && fnCandidate->getType().containsBasicType(EbtFloat16)) {
+                requireFloat16Arithmetic(loc, "float16 types can only be in uniform block or buffer storage");
+            }
+            if (builtIn && fnCandidate->getType().contains16BitInt()) {
+                requireInt16Arithmetic(loc, "(u)int16 types can only be in uniform block or buffer storage");
+            }
+            if (builtIn && fnCandidate->getType().contains8BitInt()) {
+                requireInt8Arithmetic(loc, "(u)int8 types can only be in uniform block or buffer storage");
+            }
+
             if (arguments != nullptr) {
                 // Make sure qualifications work for these arguments.
                 TIntermAggregate* aggregate = arguments->getAsAggregate();
@@ -995,6 +1044,17 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
                         if (argQualifier.writeonly && ! formalQualifier.writeonly)
                             error(arguments->getLoc(), message, "writeonly", "");
                     }
+
+                    if (builtIn && arg->getAsTyped()->getType().containsBasicType(EbtFloat16)) {
+                        requireFloat16Arithmetic(arguments->getLoc(), "float16 types can only be in uniform block or buffer storage");
+                    }
+                    if (builtIn && arg->getAsTyped()->getType().contains16BitInt()) {
+                        requireInt16Arithmetic(arguments->getLoc(), "(u)int16 types can only be in uniform block or buffer storage");
+                    }
+                    if (builtIn && arg->getAsTyped()->getType().contains8BitInt()) {
+                        requireInt8Arithmetic(arguments->getLoc(), "(u)int8 types can only be in uniform block or buffer storage");
+                    }
+
                     // TODO 4.5 functionality:  A shader will fail to compile
                     // if the value passed to the memargument of an atomic memory function does not correspond to a buffer or
                     // shared variable. It is acceptable to pass an element of an array or a single component of a vector to the
@@ -1179,6 +1239,8 @@ void TParseContext::computeBuiltinPrecisions(TIntermTyped& node, const TFunction
 
 TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
 {
+    storage16BitAssignmentCheck(loc, value->getType(), "return");
+
     functionReturnsValue = true;
     if (currentFunctionType->getBasicType() == EbtVoid) {
         error(loc, "void function cannot return a value", "return", "");
@@ -2353,6 +2415,68 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
             specConstType = true;
         if (function[arg].type->isFloatingDomain())
             floatArgument = true;
+        if (type.isStruct()) {
+            if (function[arg].type->containsBasicType(EbtFloat16)) {
+                requireFloat16Arithmetic(loc, "Can't construct structure containing 16-bit type");
+            }
+            if (function[arg].type->containsBasicType(EbtUint16) ||
+                function[arg].type->containsBasicType(EbtInt16)) {
+                requireInt16Arithmetic(loc, "Can't construct structure containing 16-bit type");
+            }
+            if (function[arg].type->containsBasicType(EbtUint8) ||
+                function[arg].type->containsBasicType(EbtInt8)) {
+                requireInt8Arithmetic(loc, "Can't construct structure containing 8-bit type");
+            }
+        }
+    }
+
+    switch (op) {
+    case EOpConstructFloat16:
+    case EOpConstructF16Vec2:
+    case EOpConstructF16Vec3:
+    case EOpConstructF16Vec4:
+        if (type.isArray()) {
+            requireFloat16Arithmetic(loc, "16-bit array constructors not supported");
+        }
+
+        if (type.isVector() && function.getParamCount() != 1) {
+            requireFloat16Arithmetic(loc, "16-bit vector constructors only take vector types");
+        }
+        break;
+    case EOpConstructUint16:
+    case EOpConstructU16Vec2:
+    case EOpConstructU16Vec3:
+    case EOpConstructU16Vec4:
+    case EOpConstructInt16:
+    case EOpConstructI16Vec2:
+    case EOpConstructI16Vec3:
+    case EOpConstructI16Vec4:
+        if (type.isArray()) {
+            requireInt16Arithmetic(loc, "16-bit array constructors not supported");
+        }
+
+        if (type.isVector() && function.getParamCount() != 1) {
+            requireInt16Arithmetic(loc, "16-bit vector constructors only take vector types");
+        }
+        break;
+    case EOpConstructUint8:
+    case EOpConstructU8Vec2:
+    case EOpConstructU8Vec3:
+    case EOpConstructU8Vec4:
+    case EOpConstructInt8:
+    case EOpConstructI8Vec2:
+    case EOpConstructI8Vec3:
+    case EOpConstructI8Vec4:
+        if (type.isArray()) {
+            requireInt8Arithmetic(loc, "8-bit array constructors not supported");
+        }
+
+        if (type.isVector() && function.getParamCount() != 1) {
+            requireInt8Arithmetic(loc, "8-bit vector constructors only take vector types");
+        }
+        break;
+    default:
+        break;
     }
 
     // inherit constness from children
@@ -3037,6 +3161,16 @@ void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier
 {
     if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque())
         error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
+
+    if (!parsingBuiltins && type.containsBasicType(EbtFloat16)) {
+        requireFloat16Arithmetic(loc, "float16 types can only be in uniform block or buffer storage");
+    }
+    if (!parsingBuiltins && type.contains16BitInt()) {
+        requireInt16Arithmetic(loc, "(u)int16 types can only be in uniform block or buffer storage");
+    }
+    if (!parsingBuiltins && type.contains8BitInt()) {
+        requireInt8Arithmetic(loc, "(u)int8 types can only be in uniform block or buffer storage");
+    }
 }
 
 bool TParseContext::containsFieldWithBasicType(const TType& type, TBasicType basicType)
@@ -3811,6 +3945,39 @@ void TParseContext::opaqueCheck(const TSourceLoc& loc, const TType& type, const
         error(loc, "can't use with samplers or structs containing samplers", op, "");
 }
 
+void TParseContext::storage16BitAssignmentCheck(const TSourceLoc& loc, const TType& type, const char* op)
+{
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtFloat16))
+        requireFloat16Arithmetic(loc, "can't use with structs containing float16");
+
+    if (type.isArray() && type.getBasicType() == EbtFloat16)
+        requireFloat16Arithmetic(loc, "can't use with arrays containing float16");
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtInt16))
+        requireInt16Arithmetic(loc, "can't use with structs containing int16");
+
+    if (type.isArray() && type.getBasicType() == EbtInt16)
+        requireInt16Arithmetic(loc, "can't use with arrays containing int16");
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtUint16))
+        requireInt16Arithmetic(loc, "can't use with structs containing uint16");
+
+    if (type.isArray() && type.getBasicType() == EbtUint16)
+        requireInt16Arithmetic(loc, "can't use with arrays containing uint16");
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtInt8))
+        requireInt8Arithmetic(loc, "can't use with structs containing int8");
+
+    if (type.isArray() && type.getBasicType() == EbtInt8)
+        requireInt8Arithmetic(loc, "can't use with arrays containing int8");
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtUint8))
+        requireInt8Arithmetic(loc, "can't use with structs containing uint8");
+
+    if (type.isArray() && type.getBasicType() == EbtUint8)
+        requireInt8Arithmetic(loc, "can't use with arrays containing uint8");
+}
+
 void TParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op)
 {
     if (type.containsSpecializationSize())
@@ -5414,6 +5581,18 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
     atomicUintCheck(loc, type, identifier);
     transparentOpaqueCheck(loc, type, identifier);
 
+    if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
+        if (type.containsBasicType(EbtFloat16)) {
+            requireFloat16Arithmetic(loc, "float16 types can only be in uniform block or buffer storage");
+        }
+        if (type.contains16BitInt()) {
+            requireInt16Arithmetic(loc, "(u)int16 types can only be in uniform block or buffer storage");
+        }
+        if (type.contains8BitInt()) {
+            requireInt8Arithmetic(loc, "(u)int8 types can only be in uniform block or buffer storage");
+        }
+    }
+
     if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
         error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
     if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.layoutDepth != EldNone)
old mode 100644 (file)
new mode 100755 (executable)
index dd8e30d..e40855e
@@ -367,6 +367,7 @@ public:
     void nestedStructCheck(const TSourceLoc&);
     void arrayObjectCheck(const TSourceLoc&, const TType&, const char* op);
     void opaqueCheck(const TSourceLoc&, const TType&, const char* op);
+    void storage16BitAssignmentCheck(const TSourceLoc&, const TType&, const char* op);
     void specializationCheck(const TSourceLoc&, const TType&, const char* op);
     void structTypeCheck(const TSourceLoc&, TPublicType&);
     void inductiveLoopCheck(const TSourceLoc&, TIntermNode* init, TIntermLoop* loop);
index aa21d8a..66ac4a8 100755 (executable)
@@ -1110,6 +1110,7 @@ int TScanContext::tokenizeIdentifier()
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
             ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
               parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8)) &&
               parseContext.profile != EEsProfile && parseContext.version >= 450))
             return keyword;
@@ -1130,6 +1131,7 @@ int TScanContext::tokenizeIdentifier()
 #ifdef AMD_EXTENSIONS
               parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
 #endif
+              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
               parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
               parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16))))
             return keyword;
@@ -1201,6 +1203,20 @@ int TScanContext::tokenizeIdentifier()
     case F16VEC2:
     case F16VEC3:
     case F16VEC4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+             (
+#ifdef AMD_EXTENSIONS
+              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+#endif
+              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
+            return keyword;
+
+        return identifierOrType();
+
     case F16MAT2:
     case F16MAT3:
     case F16MAT4:
index 5d83081..add65ef 100755 (executable)
@@ -202,6 +202,9 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_EXT_nonuniform_qualifier]                    = EBhDisable;
     extensionBehavior[E_GL_EXT_samplerless_texture_functions]           = EBhDisable;
 
+    extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
+
     // #line and #include
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
     extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
@@ -363,6 +366,8 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_EXT_post_depth_coverage 1\n"
             "#define GL_EXT_control_flow_attributes 1\n"
             "#define GL_EXT_nonuniform_qualifier 1\n"
+            "#define GL_EXT_shader_16bit_storage 1\n"
+            "#define GL_EXT_shader_8bit_storage 1\n"
             "#define GL_EXT_samplerless_texture_functions 1\n"
 
             // GL_KHR_shader_subgroup
@@ -813,27 +818,94 @@ void TParseVersions::fullIntegerCheck(const TSourceLoc& loc, const char* op)
 void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
 {
     requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-    profileRequires(loc, ECoreProfile, 400, nullptr, op);
-    profileRequires(loc, ECompatibilityProfile, 400, nullptr, op);
+    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 }
 
 // Call for any operation needing GLSL float16 data-type support.
 void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (!builtIn) {
+        const char* const extensions[] = {
 #if AMD_EXTENSIONS
-        const char* const extensions[3] = {E_GL_AMD_gpu_shader_half_float,
+                                           E_GL_AMD_gpu_shader_half_float,
+#endif
                                            E_GL_KHX_shader_explicit_arithmetic_types,
                                            E_GL_KHX_shader_explicit_arithmetic_types_float16};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
+    }
+}
 
-#else
-        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
-                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
+bool TParseVersions::float16Arithmetic()
+{
+    const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                       E_GL_AMD_gpu_shader_half_float,
+#endif
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_float16};
+    return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
+}
+
+bool TParseVersions::int16Arithmetic()
+{
+    const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                       E_GL_AMD_gpu_shader_int16,
+#endif
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_int16};
+    return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
+}
+
+bool TParseVersions::int8Arithmetic()
+{
+    const char* const extensions[] = {
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_int8};
+    return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions);
+}
+
+void TParseVersions::requireFloat16Arithmetic(const TSourceLoc& loc, const char* featureDesc)
+{
+    const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                       E_GL_AMD_gpu_shader_half_float,
+#endif
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_float16};
+    requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, featureDesc);
+}
+
+void TParseVersions::requireInt16Arithmetic(const TSourceLoc& loc, const char* featureDesc)
+{
+    const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                       E_GL_AMD_gpu_shader_int16,
+#endif
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_int16};
+    requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, featureDesc);
+}
+
+void TParseVersions::requireInt8Arithmetic(const TSourceLoc& loc, const char* featureDesc)
+{
+    const char* const extensions[] = {
+                                       E_GL_KHX_shader_explicit_arithmetic_types,
+                                       E_GL_KHX_shader_explicit_arithmetic_types_int8};
+    requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, featureDesc);
+}
+
+void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                           E_GL_AMD_gpu_shader_half_float,
 #endif
+                                           E_GL_EXT_shader_16bit_storage,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
         requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
@@ -844,9 +916,6 @@ void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op,
         const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
                                            E_GL_KHX_shader_explicit_arithmetic_types_float32};
         requireExtensions(loc, 2, extensions, "explicit types");
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
@@ -858,8 +927,7 @@ void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op,
                                            E_GL_KHX_shader_explicit_arithmetic_types_float64};
         requireExtensions(loc, 2, extensions, "explicit types");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
     }
 }
 
@@ -870,9 +938,6 @@ void TParseVersions::explicitInt8Check(const TSourceLoc& loc, const char* op, bo
         const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
                                            E_GL_KHX_shader_explicit_arithmetic_types_int8};
         requireExtensions(loc, 2, extensions, "explicit types");
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
@@ -883,8 +948,7 @@ void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, b
     if (! builtIn) {
         requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float_fetch, op);
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
     }
 }
 #endif
@@ -893,18 +957,38 @@ void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, b
 void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (! builtIn) {
+       const char* const extensions[] = {
 #if AMD_EXTENSIONS
-        const char* const extensions[3] = {E_GL_AMD_gpu_shader_int16,
-                                            E_GL_KHX_shader_explicit_arithmetic_types,
-                                            E_GL_KHX_shader_explicit_arithmetic_types_int16};
-#else
-        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
-                                            E_GL_KHX_shader_explicit_arithmetic_types_int16};
+                                           E_GL_AMD_gpu_shader_int16,
 #endif
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int16};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
+    }
+}
+
+void TParseVersions::int16ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+       const char* const extensions[] = {
+#if AMD_EXTENSIONS
+                                           E_GL_AMD_gpu_shader_int16,
+#endif
+                                           E_GL_EXT_shader_16bit_storage,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int16};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
+    }
+}
+
+void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+       const char* const extensions[] = {
+                                           E_GL_EXT_shader_8bit_storage,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int8};
         requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
@@ -915,9 +999,6 @@ void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, b
         const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
                                            E_GL_KHX_shader_explicit_arithmetic_types_int32};
         requireExtensions(loc, 2, extensions, "explicit types");
-        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
@@ -930,8 +1011,7 @@ void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool buil
                                            E_GL_KHX_shader_explicit_arithmetic_types_int64};
         requireExtensions(loc, 3, extensions, "shader int64");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-        profileRequires(loc, ECoreProfile, 450, nullptr, op);
-        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
     }
 }
 
index 0e11a8f..025e01c 100755 (executable)
@@ -152,6 +152,10 @@ const char* const E_GL_KHR_shader_subgroup_quad             = "GL_KHR_shader_sub
 const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
 const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
 
+const char* const E_GL_EXT_shader_16bit_storage             = "GL_EXT_shader_16bit_storage";
+const char* const E_GL_EXT_shader_8bit_storage              = "GL_EXT_shader_8bit_storage";
+
+
 // EXT extensions
 const char* const E_GL_EXT_device_group                     = "GL_EXT_device_group";
 const char* const E_GL_EXT_multiview                        = "GL_EXT_multiview";
old mode 100644 (file)
new mode 100755 (executable)
index e65483a..4d16b2b
@@ -699,6 +699,7 @@ assignment_expression
     | unary_expression assignment_operator assignment_expression {
         parseContext.arrayObjectCheck($2.loc, $1->getType(), "array assignment");
         parseContext.opaqueCheck($2.loc, $1->getType(), "=");
+        parseContext.storage16BitAssignmentCheck($2.loc, $1->getType(), "=");
         parseContext.specializationCheck($2.loc, $1->getType(), "=");
         parseContext.lValueErrorCheck($2.loc, "assign", $1);
         parseContext.rValueErrorCheck($2.loc, "assign", $3);
@@ -1419,7 +1420,7 @@ type_specifier_nonarray
         $$.basicType = EbtDouble;
     }
     | FLOAT16_T {
-        parseContext.float16Check($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
     }
@@ -1443,22 +1444,22 @@ type_specifier_nonarray
         $$.basicType = EbtUint;
     }
     | INT8_T {
-        parseContext.explicitInt8Check($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtInt8;
     }
     | UINT8_T {
-        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint8;
     }
     | INT16_T {
-        parseContext.explicitInt16Check($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtInt16;
     }
     | UINT16_T {
-        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint16;
     }
@@ -1520,19 +1521,19 @@ type_specifier_nonarray
         $$.setVector(4);
     }
     | F16VEC2 {
-        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(2);
     }
     | F16VEC3 {
-        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(3);
     }
     | F16VEC4 {
-        parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(4);
@@ -1604,40 +1605,40 @@ type_specifier_nonarray
         $$.setVector(4);
     }
     | I8VEC2 {
-       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt8;
-       $$.setVector(2);
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(2);
     }
     | I8VEC3 {
-       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt8;
-       $$.setVector(3);
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(3);
     }
     | I8VEC4 {
-       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt8;
-       $$.setVector(4);
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(4);
     }
     | I16VEC2 {
-       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt16;
-       $$.setVector(2);
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(2);
     }
     | I16VEC3 {
-       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt16;
-       $$.setVector(3);
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(3);
     }
     | I16VEC4 {
-       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtInt16;
-       $$.setVector(4);
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+        $$.setVector(4);
     }
     | I32VEC2 {
         parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
@@ -1694,37 +1695,37 @@ type_specifier_nonarray
         $$.setVector(4);
     }
     | U8VEC2 {
-        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint8;
         $$.setVector(2);
     }
     | U8VEC3 {
-        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt8;
+        $$.basicType = EbtUint8;
         $$.setVector(3);
     }
     | U8VEC4 {
-        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint8;
         $$.setVector(4);
     }
     | U16VEC2 {
-        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint16;
         $$.setVector(2);
     }
     | U16VEC3 {
-        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint16;
         $$.setVector(3);
     }
     | U16VEC4 {
-        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint16;
         $$.setVector(4);
old mode 100644 (file)
new mode 100755 (executable)
index 38672d6..96e245e
@@ -907,55 +907,55 @@ static const yytype_uint16 yyrline[] =
      519,   520,   521,   522,   528,   529,   534,   539,   548,   549,
      554,   562,   563,   569,   578,   579,   584,   589,   594,   602,
      603,   611,   622,   623,   632,   633,   642,   643,   652,   653,
-     661,   662,   670,   671,   679,   680,   680,   698,   699,   714,
-     718,   722,   726,   731,   735,   739,   743,   747,   751,   755,
-     762,   765,   776,   783,   788,   793,   801,   805,   809,   813,
-     818,   823,   832,   832,   843,   847,   854,   861,   864,   871,
-     879,   899,   922,   937,   962,   973,   983,   993,  1003,  1012,
-    1015,  1019,  1023,  1028,  1036,  1041,  1046,  1051,  1056,  1065,
-    1076,  1103,  1112,  1119,  1126,  1137,  1149,  1155,  1158,  1165,
-    1169,  1173,  1181,  1190,  1193,  1204,  1207,  1210,  1214,  1218,
-    1222,  1226,  1232,  1236,  1248,  1262,  1267,  1273,  1279,  1286,
-    1292,  1297,  1302,  1307,  1315,  1319,  1323,  1327,  1331,  1335,
-    1341,  1350,  1357,  1360,  1368,  1372,  1381,  1386,  1394,  1398,
-    1408,  1412,  1416,  1421,  1426,  1431,  1436,  1440,  1445,  1450,
-    1455,  1460,  1465,  1470,  1475,  1480,  1485,  1489,  1494,  1499,
-    1504,  1510,  1516,  1522,  1528,  1534,  1540,  1546,  1552,  1558,
-    1564,  1570,  1576,  1581,  1586,  1591,  1596,  1601,  1606,  1612,
-    1618,  1624,  1630,  1636,  1642,  1648,  1654,  1660,  1666,  1672,
-    1678,  1684,  1690,  1696,  1702,  1708,  1714,  1720,  1726,  1732,
-    1738,  1744,  1750,  1756,  1762,  1768,  1773,  1778,  1783,  1788,
-    1793,  1798,  1803,  1808,  1813,  1818,  1823,  1828,  1834,  1840,
-    1846,  1852,  1858,  1864,  1870,  1876,  1882,  1888,  1894,  1900,
-    1906,  1912,  1918,  1924,  1930,  1936,  1942,  1948,  1954,  1960,
-    1966,  1972,  1978,  1984,  1990,  1996,  2002,  2008,  2014,  2020,
-    2026,  2032,  2038,  2044,  2050,  2056,  2062,  2068,  2074,  2080,
-    2086,  2092,  2098,  2104,  2110,  2116,  2121,  2126,  2131,  2136,
-    2141,  2146,  2151,  2156,  2161,  2166,  2171,  2176,  2181,  2186,
-    2194,  2202,  2210,  2218,  2226,  2234,  2242,  2250,  2258,  2266,
-    2274,  2282,  2290,  2295,  2300,  2305,  2310,  2315,  2320,  2325,
-    2330,  2335,  2340,  2345,  2350,  2355,  2360,  2365,  2370,  2378,
-    2386,  2391,  2396,  2401,  2409,  2414,  2419,  2424,  2432,  2437,
-    2442,  2447,  2455,  2460,  2465,  2470,  2475,  2480,  2488,  2493,
-    2501,  2506,  2514,  2519,  2527,  2532,  2540,  2545,  2553,  2558,
-    2566,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2606,  2611,
-    2616,  2621,  2626,  2631,  2636,  2641,  2649,  2654,  2659,  2664,
-    2672,  2677,  2682,  2687,  2695,  2700,  2705,  2710,  2718,  2723,
-    2728,  2733,  2741,  2746,  2751,  2756,  2764,  2769,  2774,  2779,
-    2787,  2792,  2797,  2802,  2810,  2815,  2820,  2825,  2833,  2838,
-    2843,  2848,  2856,  2861,  2866,  2871,  2879,  2884,  2889,  2894,
-    2902,  2907,  2912,  2917,  2925,  2930,  2935,  2940,  2948,  2953,
-    2958,  2963,  2971,  2976,  2981,  2987,  2993,  2999,  3008,  3017,
-    3023,  3029,  3035,  3041,  3046,  3062,  3067,  3072,  3080,  3080,
-    3091,  3091,  3101,  3104,  3117,  3139,  3166,  3170,  3176,  3181,
-    3192,  3195,  3201,  3210,  3213,  3219,  3223,  3224,  3230,  3231,
-    3232,  3233,  3234,  3235,  3236,  3240,  3241,  3245,  3241,  3257,
-    3258,  3262,  3262,  3269,  3269,  3283,  3286,  3294,  3302,  3313,
-    3314,  3318,  3321,  3327,  3334,  3338,  3346,  3350,  3363,  3366,
-    3372,  3372,  3392,  3395,  3401,  3413,  3425,  3428,  3434,  3434,
-    3449,  3449,  3465,  3465,  3486,  3489,  3495,  3498,  3504,  3508,
-    3515,  3520,  3525,  3532,  3535,  3544,  3548,  3557,  3560,  3563,
-    3571,  3571,  3593,  3599,  3602,  3607,  3610
+     661,   662,   670,   671,   679,   680,   680,   698,   699,   715,
+     719,   723,   727,   732,   736,   740,   744,   748,   752,   756,
+     763,   766,   777,   784,   789,   794,   802,   806,   810,   814,
+     819,   824,   833,   833,   844,   848,   855,   862,   865,   872,
+     880,   900,   923,   938,   963,   974,   984,   994,  1004,  1013,
+    1016,  1020,  1024,  1029,  1037,  1042,  1047,  1052,  1057,  1066,
+    1077,  1104,  1113,  1120,  1127,  1138,  1150,  1156,  1159,  1166,
+    1170,  1174,  1182,  1191,  1194,  1205,  1208,  1211,  1215,  1219,
+    1223,  1227,  1233,  1237,  1249,  1263,  1268,  1274,  1280,  1287,
+    1293,  1298,  1303,  1308,  1316,  1320,  1324,  1328,  1332,  1336,
+    1342,  1351,  1358,  1361,  1369,  1373,  1382,  1387,  1395,  1399,
+    1409,  1413,  1417,  1422,  1427,  1432,  1437,  1441,  1446,  1451,
+    1456,  1461,  1466,  1471,  1476,  1481,  1486,  1490,  1495,  1500,
+    1505,  1511,  1517,  1523,  1529,  1535,  1541,  1547,  1553,  1559,
+    1565,  1571,  1577,  1582,  1587,  1592,  1597,  1602,  1607,  1613,
+    1619,  1625,  1631,  1637,  1643,  1649,  1655,  1661,  1667,  1673,
+    1679,  1685,  1691,  1697,  1703,  1709,  1715,  1721,  1727,  1733,
+    1739,  1745,  1751,  1757,  1763,  1769,  1774,  1779,  1784,  1789,
+    1794,  1799,  1804,  1809,  1814,  1819,  1824,  1829,  1835,  1841,
+    1847,  1853,  1859,  1865,  1871,  1877,  1883,  1889,  1895,  1901,
+    1907,  1913,  1919,  1925,  1931,  1937,  1943,  1949,  1955,  1961,
+    1967,  1973,  1979,  1985,  1991,  1997,  2003,  2009,  2015,  2021,
+    2027,  2033,  2039,  2045,  2051,  2057,  2063,  2069,  2075,  2081,
+    2087,  2093,  2099,  2105,  2111,  2117,  2122,  2127,  2132,  2137,
+    2142,  2147,  2152,  2157,  2162,  2167,  2172,  2177,  2182,  2187,
+    2195,  2203,  2211,  2219,  2227,  2235,  2243,  2251,  2259,  2267,
+    2275,  2283,  2291,  2296,  2301,  2306,  2311,  2316,  2321,  2326,
+    2331,  2336,  2341,  2346,  2351,  2356,  2361,  2366,  2371,  2379,
+    2387,  2392,  2397,  2402,  2410,  2415,  2420,  2425,  2433,  2438,
+    2443,  2448,  2456,  2461,  2466,  2471,  2476,  2481,  2489,  2494,
+    2502,  2507,  2515,  2520,  2528,  2533,  2541,  2546,  2554,  2559,
+    2567,  2572,  2577,  2582,  2587,  2592,  2597,  2602,  2607,  2612,
+    2617,  2622,  2627,  2632,  2637,  2642,  2650,  2655,  2660,  2665,
+    2673,  2678,  2683,  2688,  2696,  2701,  2706,  2711,  2719,  2724,
+    2729,  2734,  2742,  2747,  2752,  2757,  2765,  2770,  2775,  2780,
+    2788,  2793,  2798,  2803,  2811,  2816,  2821,  2826,  2834,  2839,
+    2844,  2849,  2857,  2862,  2867,  2872,  2880,  2885,  2890,  2895,
+    2903,  2908,  2913,  2918,  2926,  2931,  2936,  2941,  2949,  2954,
+    2959,  2964,  2972,  2977,  2982,  2988,  2994,  3000,  3009,  3018,
+    3024,  3030,  3036,  3042,  3047,  3063,  3068,  3073,  3081,  3081,
+    3092,  3092,  3102,  3105,  3118,  3140,  3167,  3171,  3177,  3182,
+    3193,  3196,  3202,  3211,  3214,  3220,  3224,  3225,  3231,  3232,
+    3233,  3234,  3235,  3236,  3237,  3241,  3242,  3246,  3242,  3258,
+    3259,  3263,  3263,  3270,  3270,  3284,  3287,  3295,  3303,  3314,
+    3315,  3319,  3322,  3328,  3335,  3339,  3347,  3351,  3364,  3367,
+    3373,  3373,  3393,  3396,  3402,  3414,  3426,  3429,  3435,  3435,
+    3450,  3450,  3466,  3466,  3487,  3490,  3496,  3499,  3505,  3509,
+    3516,  3521,  3526,  3533,  3536,  3545,  3549,  3558,  3561,  3564,
+    3572,  3572,  3594,  3600,  3603,  3608,  3611
 };
 #endif
 
@@ -4719,6 +4719,7 @@ yyreduce:
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
+        parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
         parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
         parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
         parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
@@ -4728,119 +4729,119 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4849,40 +4850,40 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 4882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4891,75 +4892,75 @@ yyreduce:
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 805 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 4953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4969,54 +4970,54 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5025,11 +5026,11 @@ yyreduce:
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5047,11 +5048,11 @@ yyreduce:
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5071,11 +5072,11 @@ yyreduce:
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 922 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5091,11 +5092,11 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 937 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5115,11 +5116,11 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5131,11 +5132,11 @@ yyreduce:
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5143,11 +5144,11 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5158,11 +5159,11 @@ yyreduce:
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 5162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5170,118 +5171,118 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5293,11 +5294,11 @@ yyreduce:
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5322,22 +5323,22 @@ yyreduce:
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5345,11 +5346,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5357,11 +5358,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
 #ifdef NV_EXTENSIONS
@@ -5373,11 +5374,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -5387,84 +5388,84 @@ yyreduce:
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5473,80 +5474,80 @@ yyreduce:
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1208 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1222 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5559,11 +5560,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1248 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5578,43 +5579,43 @@ yyreduce:
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 157:
-#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -5622,52 +5623,52 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 159:
-#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 160:
-#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 162:
-#line 1302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 163:
-#line 1307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -5676,135 +5677,135 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 5756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5813,20 +5814,20 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5834,1484 +5835,1484 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 1416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1417 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 1421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 1440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 5925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 1450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 5935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 5945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 5955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 1465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 1470 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 1475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 5985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 1485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 1499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1505 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1517 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1541 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1547 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 6144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 6155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 1581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 1586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt8;
-       (yyval.interm.type).setVector(2);
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(2);
     }
-#line 6237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1613 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt8;
-       (yyval.interm.type).setVector(3);
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(3);
     }
-#line 6248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt8;
-       (yyval.interm.type).setVector(4);
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(4);
     }
-#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt16;
-       (yyval.interm.type).setVector(2);
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(2);
     }
-#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt16;
-       (yyval.interm.type).setVector(3);
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(3);
     }
-#line 6281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtInt16;
-       (yyval.interm.type).setVector(4);
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).setVector(4);
     }
-#line 6292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 6347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 1672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 6358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1685 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 1690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1691 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 6402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 6413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1709 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 1714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 6435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1721 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(4);
     }
-#line 6457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 6501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 6512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 1762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 6523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1769 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1804 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1835 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 1840 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1841 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1853 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 1870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1877 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1895 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 1900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1901 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 1906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 1912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1925 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 1930 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 1936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1937 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 1942 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1955 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1961 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1991 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2021 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2075 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2087 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 2110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 2116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2117 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 2121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2122 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 2126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2132 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 2136 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 2141 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 7231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 2146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 2156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 7261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 2161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 2166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 2171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2172 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 2176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2177 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 2181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 2186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7320,11 +7321,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 #endif
     }
-#line 7324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7333,11 +7334,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 #endif
     }
-#line 7337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 2202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7346,11 +7347,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 #endif
     }
-#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 2210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7359,11 +7360,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 #endif
     }
-#line 7363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7372,11 +7373,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 #endif
     }
-#line 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 2226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7385,11 +7386,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 #endif
     }
-#line 7389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7398,11 +7399,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 #endif
     }
-#line 7402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7411,11 +7412,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 2250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7424,11 +7425,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 2258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7437,11 +7438,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 #endif
     }
-#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 2266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7450,11 +7451,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 #endif
     }
-#line 7454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7463,11 +7464,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7476,171 +7477,171 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 #endif
     }
-#line 7480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 2290 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2291 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 7490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 7500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 2300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 7510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 2305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 7520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 2310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 7530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 2315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 7540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 2320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 7550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 7560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 2330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 2335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 7580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 2340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 7590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 2345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 7600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 344:
-#line 2350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 7610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 345:
-#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 7620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 347:
-#line 2365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 7640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7649,11 +7650,11 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
 #endif
     }
-#line 7653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 2378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7662,41 +7663,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
 #endif
     }
-#line 7666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 2386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 7676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 7686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 2396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 7696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7705,41 +7706,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 7709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 2409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 7719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 2414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 7729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 7739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7748,41 +7749,41 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 7752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 7762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 7772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 2442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 7782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 2447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7791,61 +7792,61 @@ yyreduce:
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 7795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 2455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 7805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 2460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 2465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 7825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 2470 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 7835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 2475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 7845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 2480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7854,21 +7855,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
 #endif
     }
-#line 7858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 2488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 7868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 2493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7877,21 +7878,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
 #endif
     }
-#line 7881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 2501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 2506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7900,21 +7901,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
 #endif
     }
-#line 7904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 2514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 7914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 2519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7923,21 +7924,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
 #endif
     }
-#line 7927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 2527 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 7937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 375:
-#line 2532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7946,21 +7947,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 376:
-#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 7960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7969,21 +7970,21 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 7983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7992,161 +7993,161 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 380:
-#line 2566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 8006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 381:
-#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 8016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 382:
-#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 8026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 383:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 8036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 384:
-#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 8046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 385:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 8056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 386:
-#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 8066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 387:
-#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 8076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 388:
-#line 2606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 8086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 389:
-#line 2611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 8096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 2616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 8106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 2621 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 8116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 2626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 8126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 2631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 8136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 8146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 395:
-#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8155,41 +8156,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
 #endif
     }
-#line 8159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 2649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 8169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 2654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 8179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 398:
-#line 2659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 8189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 399:
-#line 2664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8198,41 +8199,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 400:
-#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 8212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 401:
-#line 2677 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 8222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 402:
-#line 2682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 8232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 403:
-#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8241,41 +8242,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 404:
-#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 8255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 405:
-#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 8265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 406:
-#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 8275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 407:
-#line 2710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8284,41 +8285,41 @@ yyreduce:
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 408:
-#line 2718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 8298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 409:
-#line 2723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 8308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 410:
-#line 2728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 411:
-#line 2733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8327,41 +8328,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
 #endif
     }
-#line 8331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 412:
-#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 8341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 413:
-#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 8351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 414:
-#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 8361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8370,41 +8371,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
 #endif
     }
-#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 2764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 2769 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 2774 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8413,41 +8414,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
 #endif
     }
-#line 8417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 8427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 2792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 8437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 422:
-#line 2797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 8447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 423:
-#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8456,41 +8457,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
 #endif
     }
-#line 8460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 424:
-#line 2810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 8470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 425:
-#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2816 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 8480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 426:
-#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 8490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 427:
-#line 2825 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8499,41 +8500,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
 #endif
     }
-#line 8503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 428:
-#line 2833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 8513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 429:
-#line 2838 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 8523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 430:
-#line 2843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 8533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 431:
-#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8542,41 +8543,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 432:
-#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 8556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 433:
-#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 8566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 434:
-#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 8576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 435:
-#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8585,41 +8586,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 8589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 436:
-#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 8599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 437:
-#line 2884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 8609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 438:
-#line 2889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 8619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 439:
-#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8628,41 +8629,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 8632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 440:
-#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 8642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 441:
-#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 8652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 442:
-#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 8662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 443:
-#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8671,41 +8672,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 8675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 444:
-#line 2925 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 8685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 445:
-#line 2930 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 8695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 446:
-#line 2935 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 8705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 447:
-#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8714,41 +8715,41 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 448:
-#line 2948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 8728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 449:
-#line 2953 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 8738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 450:
-#line 2958 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 8748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 451:
-#line 2963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8757,64 +8758,64 @@ yyreduce:
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 452:
-#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 8771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 453:
-#line 2976 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 8781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 454:
-#line 2981 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 8792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 455:
-#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 8803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 456:
-#line 2993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 8814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 457:
-#line 2999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3000 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -8824,11 +8825,11 @@ yyreduce:
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
 #endif
     }
-#line 8828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 458:
-#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -8838,65 +8839,65 @@ yyreduce:
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
 #endif
     }
-#line 8842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 459:
-#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 8853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 460:
-#line 3023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 8864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 461:
-#line 3029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 8875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 462:
-#line 3035 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 8886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 463:
-#line 3041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 8896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 464:
-#line 3046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -8910,47 +8911,47 @@ yyreduce:
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 8914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 465:
-#line 3062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 8924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 466:
-#line 3067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 8934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 467:
-#line 3072 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 8944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 468:
-#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 8950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 469:
-#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -8962,17 +8963,17 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 470:
-#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 8972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 471:
-#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -8980,19 +8981,19 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 472:
-#line 3101 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 8992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 473:
-#line 3104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -9003,11 +9004,11 @@ yyreduce:
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 474:
-#line 3117 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9030,11 +9031,11 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 475:
-#line 3139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9059,38 +9060,38 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 476:
-#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 477:
-#line 3170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 478:
-#line 3176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3177 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 9090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 479:
-#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -9099,219 +9100,219 @@ yyreduce:
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 480:
-#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 481:
-#line 3195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3196 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 9122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 482:
-#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 9133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 483:
-#line 3210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 9141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 484:
-#line 3213 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 485:
-#line 3219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 486:
-#line 3223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 487:
-#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 488:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 489:
-#line 3231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 490:
-#line 3232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 491:
-#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 492:
-#line 3234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 493:
-#line 3235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 494:
-#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 495:
-#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 496:
-#line 3241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 497:
-#line 3245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 498:
-#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 9243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 499:
-#line 3257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 500:
-#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 501:
-#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 502:
-#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 503:
-#line 3269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3270 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 504:
-#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 505:
-#line 3283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 506:
-#line 3286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 9311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 507:
-#line 3294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -9320,11 +9321,11 @@ yyreduce:
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 508:
-#line 3302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9333,76 +9334,76 @@ yyreduce:
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 509:
-#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 510:
-#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 511:
-#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 512:
-#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 513:
-#line 3327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 9375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 514:
-#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 515:
-#line 3338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 516:
-#line 3346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 517:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -9413,28 +9414,28 @@ yyreduce:
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 518:
-#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 519:
-#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 520:
-#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -9443,11 +9444,11 @@ yyreduce:
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 521:
-#line 3380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -9457,27 +9458,27 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 522:
-#line 3392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 523:
-#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 524:
-#line 3401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9490,11 +9491,11 @@ yyreduce:
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 9494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 525:
-#line 3413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9504,28 +9505,28 @@ yyreduce:
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 9508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 526:
-#line 3425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 527:
-#line 3428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 528:
-#line 3434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9534,11 +9535,11 @@ yyreduce:
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 529:
-#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -9546,21 +9547,21 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 530:
-#line 3449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 531:
-#line 3454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9572,22 +9573,22 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 532:
-#line 3465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 533:
-#line 3471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -9600,81 +9601,81 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 534:
-#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 535:
-#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 536:
-#line 3495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 537:
-#line 3498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 538:
-#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3505 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 539:
-#line 3508 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3509 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 540:
-#line 3515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 9664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 541:
-#line 3520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 9674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 542:
-#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -9682,83 +9683,83 @@ yyreduce:
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 9686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 543:
-#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 9694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 544:
-#line 3535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 9703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 545:
-#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 9712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 546:
-#line 3548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 9723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 547:
-#line 3557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 548:
-#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 549:
-#line 3563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 9749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 550:
-#line 3571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 9758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 551:
-#line 3575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -9774,52 +9775,52 @@ yyreduce:
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 552:
-#line 3593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 9787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 553:
-#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3600 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 9795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 554:
-#line 3602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 9803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 555:
-#line 3607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 9811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 556:
-#line 3610 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 9823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10047,5 +10048,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3614 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
index b2aaa39..a96f73a 100755 (executable)
@@ -79,6 +79,15 @@ public:
     virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
     virtual void doubleCheck(const TSourceLoc&, const char* op);
     virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void float16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual bool float16Arithmetic();
+    virtual void requireFloat16Arithmetic(const TSourceLoc& loc, const char* featureDesc);
+    virtual void int16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual bool int16Arithmetic();
+    virtual void requireInt16Arithmetic(const TSourceLoc& loc, const char* featureDesc);
+    virtual void int8ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual bool int8Arithmetic();
+    virtual void requireInt8Arithmetic(const TSourceLoc& loc, const char* featureDesc);
 #ifdef AMD_EXTENSIONS
     virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index 5c629ee..24c237b
@@ -70,7 +70,7 @@
 // This should always increase, as some paths to do not consume
 // a more major number.
 // It should increment by one when new functionality is added.
-#define GLSLANG_MINOR_VERSION 7
+#define GLSLANG_MINOR_VERSION 8
 
 //
 // Call before doing any other compiler/linker operations.
index 0e5f261..786d9ff 100755 (executable)
@@ -215,6 +215,12 @@ INSTANTIATE_TEST_CASE_P(
         "spv.140.frag",
         "spv.150.geom",
         "spv.150.vert",
+        "spv.16bitstorage.frag",
+        "spv.16bitstorage_Error.frag",
+        "spv.16bitstorage-int.frag",
+        "spv.16bitstorage_Error-int.frag",
+        "spv.16bitstorage-uint.frag",
+        "spv.16bitstorage_Error-uint.frag",
         "spv.300BuiltIns.vert",
         "spv.300layout.frag",
         "spv.300layout.vert",
@@ -231,6 +237,10 @@ INSTANTIATE_TEST_CASE_P(
         "spv.450.tesc",
         "spv.450.geom",
         "spv.450.noRedecl.tesc",
+        "spv.8bitstorage-int.frag",
+        "spv.8bitstorage_Error-int.frag",
+        "spv.8bitstorage-uint.frag",
+        "spv.8bitstorage_Error-uint.frag",
         "spv.accessChain.frag",
         "spv.aggOps.frag",
         "spv.always-discard.frag",
old mode 100644 (file)
new mode 100755 (executable)
index 083e771..a64198a
@@ -12,7 +12,7 @@
       "site" : "gitlab",
       "subrepo" : "spirv/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "4082a777bd5df31ed45acf40e64263094e85ed2e"
+      "commit" : "gitlab-prelim-rc4"
     }
   ]
 }