Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Includes:
91ac4290 Merge pull request #1510 from Kangz/complete_lib
873734dd BUILD.gn: make the static_lib complete to fix the build on OSX
5ff3c3da Interfaces: Remove NV_EXTENSIONS from two more headers.
01c4076a Merge pull request #1508 from jeffbolznv/remove_ifdefs_shaderlang
27f5db05 Remove NV_EXTENSION ifdefs from ShaderLang.h
1f60c72c Interface: remove NV_EXTENSIONS from the resources header.
a4752945 Merge pull request #1506 from alelenv/master
18268c85 Merge pull request #1505 from dj2/gn_build
aac6d637 Use unsigned int instead of uint32_t
a535bc13 Fix missing case label for miss stage.
b29c58ea Review feedback
257b25c8 Add BUILD.gn configuration.
a8453d4b SPIRV-Tools: Move to more recent (higher quality) version.
088da332 Bump revision.
dc591081 Merge pull request #1500 from KhronosGroup/turing-known-good
aedccf96 Update known-good to tools/headers for the Nvidia Turing extensions.
8751c13c Bump minor version.
5942c015 Merge pull request #1499 from chaoc/nvidia_turing
fb13a3ab update glslang test results for temporary validation fail
5b2203db Add-support-for-SPV_NV_shading_rate
b50c02ef Add-support-for-SPV_NVX_raytracing
3c366990 Add-support-for-SPV_NV_mesh_shader
3a137966 0003-Add-support-for-SPV_NV_shader_image_footprint
beae2251 Add-support-for-SPV_NV_compute_shader_derivatives
9eada4b9 Add-support-for-SPV_NV_fragment_shader_barycentric
6dd4757f Update to latest spirv.hpp header (which fixed a typo).
7105cb30 SPV: Move to latest SPIR-V header (latest NV extensions support).
d122a728 Build: Fix some warnings.
b4a598ba Bump revision.
92fab623 Merge pull request #1492 from NorbertGarnysAMD/shader_atomic_int64
dad0c1be Add GL_EXT_shader_atomic_int64
f658c303 Merge pull request #1491 from DennisOSRM/patch-1
fc89f065 Fix compiler warning emitted from GCC8
6def4375 Bump revision.
afe0c66f SPV: Fix #1487: Only declare AMD int16/half_float extensions when needed.
546b7885 Printing preprocessed shaders (not a supported path): Fix #1490: strings
1ca0f8e8 Bump version and revision.
ddfb4a80 Merge branch 'jeffbolznv-memory_scope_semantics'
36831c9b GL_KHR_memory_scope_semantics
97068d8b Merge pull request #1465 from otakuto/remove-execute-permissions
1d12970a Merge pull request #1485 from karl-lunarg/karl-lunarg-patch-1
12b99ef1 Merge pull request #1486 from mrtrizer/patch-1
949344f0 Update SpvTools.cpp
ac2e1b63 bump revision
4e11b615 SPV: Turn off the default validation done by the SPIRV-Tools optimizer.
a4dfede4 Merge pull request #1482 from KhronosGroup/validate
d5aabf34 GLSL: Remove use of __ in the implementation of keywords having __.
381dd3c0 GLSL: Remove use of __ in the implementation of keywords having __.
0cb8ad55 tooling: Fix update sources script for Python 3
c340425b SPV: Add option for controling when the SPIRV-Tools validator is used.
717c80a9 SPV: Isolate SPIRV-tools glue to its own file.
cc14f2d3 SPV: Add SPIRV-Tools validator. This needs the latest SPIR-Tools.
e7df8e0b Non-functional: Rationalize some existing use of SPIRV-Tools.
1323bf8e Merge pull request #1480 from dneto0/stringify
9fd2a8cd Use our own SPIRV-Tools message stringifier
93dbbdee Merge pull request #1474 from KhronosGroup/pure-8-16-bit-capability
09d7672d Merge pull request #1476 from greg-lunarg/kg24
1676e73d Update SPIRV-Tools known good.
31aa3d60 SPV: only declare the pure 8/16-bit capabilities when needed.
149afc39 SPV: More corrections of <id> versus "immediate" operands.
228e964b SPV: Correct SPIR-V operands for <id> versus immediate.
72f8c690 Bump version patch level.
251901ac Fix #1471: Merge shift amounts for different sets: --stb ... --std ...
ade8bbbf Fix #1393: rationalize usage, in the spirit of #1393.
ec5c1193 Bump revision.
640bd096 Fix #1468: Add command-line --entry-point support, same as existing -e.
56a75975 Fix #1469: Make it easier to copy/paste build instructions.
c4510e5e Merge pull request #1466 from Kangz/warning_fixes
242c28f2 Merge pull request #1470 from antiagainst/patch-2
fb4165b5 Appveyor CI: build artifacts for x64
e7061422 Fix -Wignored-qualifier and -Wunused-variable warnings
dae0b0a5 Add shebang
d03da06a Remove execute permissions
e0bc65b2 Merge pull request #1460 from KhronosGroup/postprocess
f04c51b3 Non-Functional: Add postprocess as more robust way to add capabilities
29619b23 Merge pull request #1459 from dgkoch/dgkoch_build_fixes4
883607d5 Fix build warnings/errors:
e99a2681 Merge pull request #1457 from KhronosGroup/parse-floats
7cdc24c0 PP: Address #1456: Strip float suffixes before using platform library.
994d4bf3 Tests: Add more string -> float tests. Related to #1456.
561a43d2 PP: floating-point parsing: more stable handling of istringstream::fail
13803b18 Bump revision.
6e382f63 Merge pull request #1455 from TiemoJung/nullpointer_crash_fix
e161cc11 GLSL: No more restrictions on (non)shadow sampler construction.
9f8cb850 Fixes a crash when in/out varying variable had no semantic name and an error was reported in ioremapper phase when the variable was rejected
62faea79 Merge pull request #1451 from KhronosGroup/shadow-forces-depth
11da9eed HLSL: Fix #1445: distance() works on scalars.
56b33196 Merge pull request #1453 from greg-lunarg/kg22
7d4c9a07 GLSL: Construct shadow texture from non-shadow sampler.
0339af3c GLSL/SPV: If a texture is used with a shadow sampler, force 'shadow'.
3f05bedd Update spirv-tools known good
fa4952c3 Merge branch 'zeux-master'
5a7321eb Merge branch 'master' of https://github.com/zeux/glslang into zeux-master
81793ad2 Merge pull request #1450 from KhronosGroup/link-merge-all
b617e14a Link: Merge all the settings in TIntermediate.
5d6b5679 Merge pull request #1436 from karl-lunarg/karl-ccache
8103cb95 Merge pull request #1446 from KhronosGroup/spv-link
ebd989dd Merge pull request #1437 from mattparks/patch-2
34e56891 Merge branch 'jeffbolznv-missing_descriptor_indexing_extension'
4137241a Merge branch 'missing_descriptor_indexing_extension' of https://github.com/jeffbolznv/glslang into jeffbolznv-missing_descriptor_indexing_extension
41436ad2 Link/SPV: Correct symbol IDs on merging ASTs to a single coherent space
806af25f Merge pull request #1442 from dneto0/use-forked-android-ndk-repo
c140b968 Add missing OpExtension SPV_EXT_descriptor_indexing for dynamic indexing capabilities
e7f9caea Errors and Build: Fix build warnings, which also improved error messages.
4aeca2df NDK build: Use NDK r17b and its own CMake toolchain file
b75c7065 Travis CI: Fix comments disabling code.
e5b27660 Merge pull request #1440 from dneto0/later-android
3541d8a5 Travis-CI: Use Android NDK r13b specifically
8dafeab4 Merge pull request #1438 from Think-Silicon/getUniformStages
0ea33a26 Non-functional: Retrigger bots; the previous failure looks suspicious.
cf6bd066 HLSL: Fix #1432: Globally initialize local static variables.
f556e5da Reflection exposes the Shader Stages where a Uniform is present
f9c2aeb7 Allowed debug postfix to be changed.
857f25cf Added the cmake option to disable building SPVRemapper.
64315a8a Merge pull request #1434 from antiagainst/fix-spirv-tools-header
23770b9a build: Add ccache option to CMake config
112e2858 SPIRV: Simplify matrix->matrix constructor
a2c39a29 Use public SPIRV-Tools header
cd57b4ba Merge pull request #1431 from KhronosGroup/implement-8-16-bit-storage
312dcfb0 Implement GL_EXT_shader_16bit_storage and GL_EXT_shader_8bit_storage extensions.
eefab240 Bump revision.
dccfeedf HLSL: Fix #1423: implement CalculateLevelOfDetailUnclamped().
ab8960fd Merge pull request #1416 from aejsmith/samplerless-texture-functions
513cc4cf Merge branch 'HaydnTrigg-patch-1'
c88edb13 Merge branch 'patch-1' of https://github.com/HaydnTrigg/glslang into HaydnTrigg-patch-1
5e701954 Merge pull request #1420 from KhronosGroup/spir-dis
e2156222 SPV: Add option to print disassembly in standard form using SPIRV-Tools.
6d61684f Bump revision.
802c62bc PP: Rationalize return values of MacroExpand.
9cc81de0 PP/HLSL: Fix #1424: support comma in nested curly braces for macro arg
e47bfaed Add support for GL_EXT_samplerless_texture_functions
e826286f Constant.cpp Floating point divide by zero
0b964b3c Merge pull request #1419 from tgjones/spirv-remap-artifact
9177e05f Include spirv-remap.exe in AppVeyor artifacts
ef1f899b Merge pull request #1413 from karl-lunarg/fix-update
fa403b96 script: Improve update sources script
16cf5a5d Merge pull request #1411 from KhronosGroup/fix-literal-warnings
866f6714 Build: Make literal casting have fewer warnings and be more consistent.
5fe506a8 Merge pull request #1409 from greg-lunarg/remap3
c6831d1e Add support for OpConstantNull and OpConstantSampler to spirv-remap
c99304c5 Bump revision.
2a805d9c Revert "GLSL: Fix #1279: refract does not have a double-type eta."
bea08fe0 Merge pull request #1405 from Igalia/nroberts/amb-arrays
1d024b53 Take into account arrays of opaque types when reserving bindings
2c8265bb GLSL: Fix #1358: Support "struct name", where name could be a user type
1ea8f595 Merge pull request #1402 from greg-lunarg/kg21
ff50b9fb Update spirv-tools known-good
7dc1a989 Merge pull request #1401 from dneto0/bad-e11
617d1b12 Relax a stringToDouble test for, OSX AppleClang 9.1
ba018e67 SPV: Fix #1399 emit ImageGatherExtended when using ConstOffsets operand
ad7645f4 Fix #1360: uint->int width conversions must still be typed as uint.
14b85d3f Fix #1395: GLSL volatile maps to SPIR-V Volatile and Coherent.
d6c97557 Change the major revision number for next commit.
a7eb582a Bump revision.
9c3fde7f Merge pull request #1397 from LoopDawg/warning-fix-4
470a68cf Fix several signed/unsigned comparison compile warnings.
32d3ec31 Merge pull request #1394 from greg-lunarg/kg20
b0c42b28 Update spirv-tools known-good.
4f888534 Fix #1391: Remove use of nonportable strnlen().
b91189db Merge pull request #876 from ligfx/cmaketargetincludedirectories
a895f378 CMake: use target_include_directories to expose includes
92d05c0c Merge pull request #1386 from zeux/master
369dc87a Merge pull request #1387 from jeffbolznv/disassembly_explicit_types
fa34a9ad Merge pull request #1385 from KhronosGroup/fix-strtod
3e8e9f7b PP: Implement locale-independent strtod, using istringstream and a fast path.
af7a9487 Add bit width of types to disassembleInstruction
6c52f896 PP: Remove second parsing of numbers recorded in macros; save/use original.
1ea1b13f Testing: Add new tests, and new ways of testing, for floating-point.
8e4b496d Merge pull request #1388 from greg-lunarg/kg19
d2b55801 Update spirv-tools known-good
b239d22f Fix TextureUpgradeAndSamplerRemovalTransform when used with qualifiers
c6d25539 Merge pull request #1384 from LoopDawg/self-cast
c5991671 HLSL: allow self-type cast (as no-op passthrough)
2aaef122 Bump revision.
ebec9094 GLSL: Fix #1279: refract does not have a double-type eta.
a0044f4f Merge pull request #1381 from LoopDawg/coverage_array
98e1d7f6 Merge pull request #1383 from amdrexu/bugfix
b4a2a6cf Fix issue #1376: SPV_AMD_gpu_shader_half_float is not emitted under vulkan1.1
4e6d3eaf HLSL: require coverage mask to be arrayed output.
cfb05ec7 Merge pull request #1379 from LoopDawg/groupid-fix
91a8178e HLSL: various SPIR-V compute shader IDs must be a 3-vector of integers.
90de7a74 Merge pull request #1378 from LoopDawg/append-decl-order
1326b8c7 HLSL: Allow stream output Append() method after entry point.
1831087e SPV: Fix #1374: For an SSBO 16-bit access, only emit StorageUniformBufferBlock16 capability.
2fb966aa Merge pull request #1375 from Igalia/nroberts/aml-arrayio
ecbd056b Tests: Fix #1372: Don't legalize runtests HLSL tests.
22b71f9a Skip outermost array when assigning locations to auto-array interfaces
fd9d9ef4 Bump version.
d2e9829a Merge pull request #1370 from KhronosGroup/fix-param-types
115c3b14 Merge pull request #1369 from greg-lunarg/kg18
d3ed90be Fix #944: Convert argument type to match formal parameter type.
517eabb4 Update spirv-opt known-good
25bef930 Merge pull request #1363 from mattparks/patch4
115cf8ea Merge pull request #1368 from danginsburg/issue_1367
fb6924d2 Fix issue #1367 - change the I/O remapper to ignore push constants so it does not apply a binding/descriptor set to them.
9cf275bb Build: Add missing break statements. Fixes #1052.
1199cf92 Fixed install for SPIRV, glslang, and hlsl when building shared libs
e375dad6 Merge pull request #1364 from greg-lunarg/kg17
6b5d52a6 Update known-good.
46e07313 GLSL/Vulkan: Warn about arrays of arrays of resources that need bindings.
b4cb70fc GLSL: Fix #1359: don't allow unsized arrays as initializers.
d8462c6f validate script: fix path
c325f436 GLSL: Fix #1300: Can redeclare without size a sized built-in block array.
3beac945 Infrastructure: If using .hlsl suffix, default is -D.
4c574708 Bump revision.
2ead40ff Tests: Add usage and tests for previous commit.
fccbb8b4 Merge branch 'nicebyte-glsl-ext'
62f84fd5 Merge branch 'glsl-ext' of https://github.com/nicebyte/glslang into nicebyte-glsl-ext
3bb4c48c Bump revision.
16b80f78 Merge pull request #1345 from amdrexu/bugfix
7c88aff1 Specify SPV_AMD_gpu_shader_int16 extension string when frexp() takes 16-bit exp operand
6cf7645c Bump revision.
c034c5a8 HLSL/SPV: Declare DepthReplacing for shaders declaring SV_Depth* outputs.
24eae066 Merge pull request #1348 from greg-lunarg/kg16
d91e0360 Merge pull request #1351 from danginsburg/issue_1350
5a69b675 Update gold results
33ddaaaf Make FindLanguage use the entire name if parseStageName is false
ef203bfa Fix build error
3350741e Make glslang validator support files ending in .glsl
95c87b65 Fix issue #1350 - set the node type to match the atomic TIntermAggregate node type so that AtomicSMin/Max is not generated with a result type of void.
0f8d43e5 GLSL/Vulkan: Enforce no location aliasing in vertex inputs.
c51bff8d Update spirv-opt known good
5d3babdb Build: Fix #1347: Compile with NV_EXTENSIONS disabled.
b9e9e57f Merge pull request #1326 from mattparks/patch1
461ea099 Non-functional: Fix tabs.
e891afac GLSL: Fix #1330: default outputs for GL_NV_geometry_shader_passthrough
9de57c81 Bump revision.
5cd155f0 Merge pull request #1343 from KhronosGroup/uint-counter-bufs
c3a370db Merge pull request #1341 from St0fF-NPL-ToM/master
6ae18707 HLSL: Fix #1332: consistently use uint for counter buf typing.
1aaa3567 Revert "add ability to record accessed and declared "named defines""
619dc896 Merge pull request #1338 from cgmb/minor-shaderlang-fixups
1dcd1623 GLSL/SPV: no location on atomic_uint; Fix #1339.
39bbad5a Minor cleanup in ShaderLang.cpp
a1184ddd fix further MSVC 2012 build issues
e7350423 add ability to record accessed and declared "named defines"
77d04598 fix VS2012 compile issues
b92ce60f GLSL/SPV: Fix #1310: don't create unnecessary integer matrices.
88a6a181 README: Expand on the C++11 compiler requirement for MSVS.
11b5c311 Update revision.
5d8d7882 Fix #1328: ENABLE_HLSL=OFF breaking build.
f52b6381 Fix #1331: Emit SPV_GOOGLE_hlsl_functionality1 for counters.
7f0bcfd8 Fix #1333: Protect against -g for non-generating code.
a89f8cf7 Merge branch 'nonuniform-dynindex'
4597fea8 Update revision.
6a8a678c Revision/Version update.
5611c6d2 GLSL/SPV: Implement SPV_EXT_descriptor_indexing and GL_EXT_nonuniform_qualifier
0b5e5da7 Update revision.
6a4a427e GLSL: Implement correct semantic checking for run-time sized arrays.
5a867aca Linker: Fix #1329: correctly merge unsized arrays, and fix link tests.
ed834895 Merge pull request #1327 from mattparks/patch2
21993569 Added getter for uniform block bindings
6c5f649a Allowed for LIB_TYPE to be set to switch between static and shared libs for glslang, SPIRV, and HLSL
fbdba369 Merge pull request #1325 from KhronosGroup/simplify-doc
10971553 Non-Functional: Remove unused parts of the disassembler.
d688796a Merge pull request #1322 from jeffbolznv/master
2abe9a4d Implement GL_NV_shader_subgroup_partitioned
6b1ede41 Merge pull request #1320 from greg-lunarg/addopt21
fb03a55e Only print legalization warning if optimizer disabled
7be36647 Merge pull request #1319 from KhronosGroup/array-rationalization
f9a05f96 Merge pull request #1316 from greg-lunarg/addopt18
c408b430 Merge pull request #1318 from amdrexu/feature
ead86224 Non-functional. Rationalizations enabling future generalizations:
2316924b Non-Functional: Remove merge-replicated code and fix white space.
ae06d1fe Add int16 support to AMD_trinary_minmax and AMD_shader_ballot
4bede9eb Disable DCE by Remapper through glslangValidator...
643e57cd Merge pull request #1313 from greg-lunarg/kg15
26ad99b5 Merge pull request #1312 from KhronosGroup/fix-mixed-array-styles
0b46c1ed Merge branch 'master' into kg15
eecb874c Update SPIRV-Tools known good.
859b0342 Types: Fix #1290: Rationalize and correct "mixed" style array dimensioning.
1c3ab274 Test Results Only: Include size in implicitly sized arrays (change to unsized).
7cec64fc Non functional: add EshTargetClientVersion alias for EShTargetClientVersion.
97e35420 Non-functional: always return value from makeFpConstant().
569dd84a Merge pull request #1306 from Igalia/uniform-aml-v2
1b1ad97d Merge pull request #1305 from amdrexu/bugfix
2d539049 Take into account the number of locations taken up by a uniform
1fe4a447 Add locations to opaque types for OpenGL
b126550b Add additional error check for fragment shader outputs
95b1334a Bump patch version.
ca4366cf Merge pull request #1302 from KhronosGroup/cpp-relax-skiptokens-errors
e7e081bd PP: don't give errors on some tokens under #if 0 (or similar).
56e80565 Merge pull request #1282 from KhronosGroup/hlslFunctionality1
5d610ee1 Implement SPV_GOOGLE_hlsl_functionality1.
cd23a475 Merge pull request #1291 from ben-clayton/add-nv-nopersp
0af69da1 Bump patch version.
fb1e40b4 Merge pull request #1299 from KhronosGroup/fix-conversions
f6480833 Add tests for GL_NV_shader_noperspective_interpolation
cb32c544 Merge pull request #1289 from Igalia/igalia/dmat-scalar-division
647fccaf AST: Fix shift conversions, which don't require matching types.
6e899be5 Non-functional: Rationalize operators handled by the split addConversion() functions.
137a24df AST: Remove convertToBasicType() which was obfuscating the conversion design.
075c8c11 Merge pull request #1294 from dgkoch/dgkoch_build_fixes4
bfe09521 Fix build several build errors
3e2a3c46 Merge pull request #1293 from baldurk/remove-en-dash
34cd7630 Replace en-dash with simple ASCII hyphen
017a567b Add support for GL_NV_shader_noperspective_interpolation
eddb1318 Use the correct type for the constant for matrix/scalar division
2ad4737d Merge pull request #1286 from greg-lunarg/kg14
b095da74 Merge pull request #1288 from amdrexu/bugfix
2bd8cd04 Merge pull request #1287 from eintw1ck/master
a00e51b5 HLSL: Correct some mistakes for min16 types
b3e80f5a include/Common.h: reorder includes to avoid redefinition on some platforms
bfa64afb Increment minor version to 4
c96885f4 Update known_good to SPIR-V 1.3 support
845860d5 Merge pull request #1283 from siavashserver/fix-memory-leak
ca279340 Merge pull request #1284 from amdrexu/bugfix
7798aaf1 Allow --hlsl-enable-16bit-types to be used without AMD_EXTENSIONS
b502a802 Fix memory leak upon ProcessDeferred failure.
a5152505 Merge pull request #1269 from bkaradzic/master
9c82dd10 Merge branch 'amdrexu-feature'
fb97d25c Merge branch 'feature' of https://github.com/amdrexu/glslang into amdrexu-feature
45422f18 Merge branch 'amdrexu-bugfix'
f15fbc04 Merge branch 'bugfix' of https://github.com/amdrexu/glslang into amdrexu-bugfix
56364b08 Merge branch 'sheredom-fixup_sm_60_wording'
e62d1baf Merge branch 'fixup_sm_60_wording' of https://github.com/sheredom/glslang into sheredom-fixup_sm_60_wording
ac370792 Revert the commits that change OpArrayLength type and bumped the version number.
fd920b3b WaveReadLaneFirst is the correct wording (was using WaveReadFirstLane previously...).
097047a9 Merge pull request #1277 from KhronosGroup/Vulkan_1_1
e68a7698 Add more error checks for swizzleInvocations{Masked}AMD()
cb61eec9 HLSL: Map min types to GLSL 16-bit types
1e5c9463 Fixed ifdef.
66011cb2 SPV: Implement Vulkan 1.1 features and extensions.
b2ae1d05 Revert "Merge pull request #1274 from greg-lunarg/legal2"
663b90d9 Build: Fix build issues with previous commit.
2c65069e Merge pull request #1274 from greg-lunarg/legal2
fa9b465b Versioning: Bump to minor version 1, for new SPIRV-Tools update.
fd50f6a4 Legalization: Omit legalization warning when spirv-opt is linked.
caa54449 Merge pull request #1263 from greg-lunarg/kg12
02538357 Merge pull request #1272 from amdrexu/bugfix
4f5b99e3 Add more error checks for interpolateAtVertexAMD()
c6c80a6e Versioning: Address #1255: Move to semantic versioning.
1de8e54d Fixed GCC+Clang errors and warnings on Linux and OSX.
41e24fdb Merge branch 'amdrexu-bugfix'
aa2295f1 Merge branch 'bugfix' of https://github.com/amdrexu/glslang into amdrexu-bugfix
0216f24f SPV: Bump up the generator number.
e518772d SPV: The result type of OpArrayLength should be UINT
b5b5f918 Non-functional: Make the vulkan version number meaning be only 0 or not 0.
e58d58b7 Non-functional: Move to latest headers.
29c49e10 Merge pull request #1266 from amdrexu/feature
2c40e856 Merge pull request #1268 from amdrexu/bugfix2
81f4c03a Fix issues of SPIRV headers
1e5d7b0b Implement the extension GL_AMD_gpu_shader_half_float_fetch
5630d0ec Fix typo.
60a57840 Merge pull request #1264 from dneto0/typo-client-version
52e9435e Merge pull request #1265 from davidhubbard/master
f5ddcfc5 TBuiltIns::identifyBuiltIns: EShLangFragment fallthrough
506d2c24 Fix typo in help for -V<bad-number>
c5215791 IO mapper: Fix #1261: Supply location mapper with size computer.
5778ee4a Update spirv-tools known_good
d55fe865 HLSL: Fix #1257: layout float1, int1, etc., as scalars.
46413d57 SPV: Fix #1258: cache constant structs by id, not opcode.
57f6a016 SPV: Complete OpModuleProcessed implementation, enabled by have 1.2 headers.
e1cc1e2e Merge pull request #1256 from KhronosGroup/require-binding
9c9c4e90 GLSL/SPV: Fix #1196: Require resources to have layout(binding=X).
2d9973de Tests: specExamples.vert is used twice, it needs two different output names.
90ac5fcf Merge pull request #1253 from KhronosGroup/hlsl-ternary-select
4bee531f HLSL: Fix #1249: Always execute both sides of ternary "?:".
a5cae082 Merge pull request #1250 from LoopDawg/image-fetch-conversion
4425f245 HLSL: Add conversions for image ops during SPV construction
b587fb62 GLSL: Fix #1247. Remove extraneous *= matrix test.
98e3fb19 Merge pull request #1246 from amdrexu/bugfix
35a3de74 Fix an issue of interpolateAtVertexAMD().
23ea3db3 Warning for #pragma once. GLSL and HLSL. Addresses #824.
b5bf536b Merge pull request #1244 from dneto0/update-spirv-tools
3394353b Merge pull request #1243 from greg-lunarg/kg11
497d5ffe Update SPIRV-Tools known-good
484cbd04 Upgrade update_glslang_sources.py to work with gitlab branch
4ee5193b Non-functional: GLSL: Fix #1242; don't pass reference to nullptr.
2f658e1f Merge pull request #1241 from greg-lunarg/kg9
8a4848f5 Add DeadInsertElim to legalization and RedundancyElim to -Os.
b5ab3459 Merge pull request #1239 from KhronosGroup/deeper-access-chains
9ffc72d1 Merge pull request #1238 from zeux/pp-string-buffer
71b5da60 SPV: Bump up generator number, because previous commit changes code gen slightly.
5c3eed54 SPV: Create more access chains addressing a few swizzling issues.
75cffdf9 Preprocessor: Use std::string instead of std::stringstream
2651ccae Merge pull request #1234 from dneto0/update-spirv
d1232992 Update SPIRV-Tools known-good
b3f9e0a3 GLSL: Fix #1229: merge array sizes in parameter declarations.
98e733cb Merge pull request #1232 from KhronosGroup/control-flow-attributes
da0b18c3 Error message: Improve error message (will help another party id a bug).
30476568 AST: dump attributes along with control flow.
a2858d9b GLSL: Implement GL_EXT_control_flow_attributes.
e18fd20d HLSL: Refactor attribute implementation.
e349af7e Non-functional: Fix #1231: remove duplicated code.
2b5ea9f8 SPV Version: Emit the requested SPIR-V version, not the header version.
43f5b273 Non-Functional: Use OpModuleProcessed from the unified header.
22f02d09 EShTargetSpv: Fix #1235, spelling, in a backward compatible way.
6c1c2766 SPV: Bump SPIR-V header to the unified1 version (version 1.2).
82ead04c Non-functional. Fix #1223: expand comments.
ade21c71 Merge pull request #1224 from fjhenigman/unused
ab46a2e5 Merge pull request #1221 from dneto0/update-spirv
541f7bbd Fix unused function warning.
0e58bbd5 Update known-good spirv-tools.
e22e3473 HLSL: Fix #1208: accept both int and uint in asuint() and asint().
63400477 HLSL: Protect against 'continue' outside of loops.
9b5668c8 HLSL: Fix #1214: check for nesting in loop/switch of break statements.
7420a761 HLSL: Fix #1215: propagate error on seeing a type name instead of a variable.
eb2c0c72 GLSL: XFB: more support for built-in block redeclarations with XFB.
9c6f8cc2 Scanner: Many int16 and float16 fixes, including performance.
c043aadd Scanner: Many int64 fixes, including performance.
adc33b23 Non-functional: Fix HLSL error message, and code formatting.
99892d5a Merge pull request #1211 from greg-lunarg/kg7
ead4bb19 Update known good spirv-tools. Fixes issue #1205.
798d005c Build: Tickle bots to try again... seems like a process hang; all tests passed.
132cf537 HLSL: Fix #1203: Declare anonymous members for cbuffer with no ';'
fd1e8a78 HLSL: Fix 1201: Accept 'layout' as an identifier.
046bae0b HLSL: Attributes: Add [[vk::constant_id()]] and [[vk::push_constant]]
e08ed0cc Merge pull request #1190 from jfmarquis/hlsl-store-type-propagation
848a0ccb Merge branch 'greg-lunarg-flatten1'
8a3f7a12 Merge branch 'flatten1' of https://github.com/greg-lunarg/glslang into greg-lunarg-flatten1
b3cff2f2 HLSL Tests: Remove optimization from tests that don't need it.
e0639287 HLSL Legalization: Add scalar replacement
3f0aff8e HLSL: Fix possibly incorrect type conversion in StoreN and LoadN
3b2dc1a7 Merge pull request #1195 from LoopDawg/gcc-bug-workaround
c074f2bc g++ 5.4.0 suspected defect workaround
3f0d4bcd SPV: Document history of the generator version number.
e1ff2312 GLSL: Fix #1193: no 'location' on uniform/buffer block.
a0d60f2b gcc: potentially a compiler-bug work around
2505057a SPV: Memory model: Reduce set of memory-semantic bits requested for "all".
838d7afc SPV: HLSL: Move to correct HLSL barrier semantics, per Khronos recommendation.
c72e5937 SPV: Bump the generator number to account for barrier changes.
8297936d SPV: Change barrier emission to conform to Khronos decisions.
070aaeaf HLSL: Fix #1192: when bool operands are converted to ints, convert result type.
35682b59 Merge pull request #1191 from greg-lunarg/kg6
72deeb25 Update spirv-tools known-good.
788fbeb3 HLSL: Make attributes for built-in override semantics.
a67d0706 Merge pull request #1189 from KhronosGroup/spv-xfb
edaf5567 SPV: Plumb through XFB buffer and stride information.
be3842f6 GLSL: Implement XFB for redeclared built-in blocks.
04f4566f Merge pull request #1184 from KhronosGroup/SPV_EXT_fragment_fully_covered
1c5443c6 Add implementation of SPV_EXT_fragment_fully_covered
e9e0cb60 Update to latest public headers.
396de16c Merge pull request #1183 from LoopDawg/builtin-output-array-indirect
69feabc9 Merge pull request #1186 from zeux/master
c92860e2 HLSL: Implement support for RT/Viewport output from VS
0cff5100 HLSL: for split output structs, propagate indirection to builtin.
e078059d Merge pull request #1174 from LoopDawg/y-flip
8116cfc9 HLSL: Give error on unsupported buffer initializer.
87982be1 HLSL: Remove unintended/untested functionality PrimitiveID.
67fca7c4 Merge pull request #1178 from LoopDawg/primitiveid-hs-input
1cfc0f9e Merge pull request #1175 from KhronosGroup/no-flatten-local-opaque
280c75ca HLSL: Allow primitive id on hull shader inputs
dc005fb0 HLSL: Stop flattening non-IO structs containing opaques.
b22c069f HLSL: add optional position.Y inversion
471bfed0 HLSL: Fix #606: make layout() override register.
cc951f81 HLSL: Fix #1154: Support PointSize, as an attribute.
b0159f85 Merge pull request #1151 from cgmb/update-readme
384b2070 Improve build instructions
6a14f780 HLSL: Fix #1163: treat buffers as references when calling functions.
1f899924 Merge pull request #1171 from greg-lunarg/kg5
531898a4 Merge pull request #1170 from LoopDawg/matsize-warnings
3e72d265 Update spirv-tools known-good
8c49f9b4 HLSL: minor: add warning for mat() matrix size truncation
7199a6d1 Add initialization in case it is causing the Apple Clang release failure.
ffc31cdc Tests: Trigger more texture tests, and hopefully see build failure go away.
1ce94b2d Merge pull request #1166 from tafuri/#1165-invalid_Store
b2abe2f0 Merge pull request #1169 from LoopDawg/cbuffer-identifier
c4372e43 Merge pull request #1167 from LoopDawg/matmul-truncate-mxm
72cddd01 Merge pull request #1168 from greg-lunarg/kg4
7ee29ba7 HLSL: allow keyword-identifiers as cbuffer/struct names.
30d92db0 Update spirv-tools known-good
cee29b04 HLSL: add implicit mat*mat truncations
66b319d3 Added new test to gtests and updated test data
59677dae Respect the array type in Store operation
792a9480 Merge pull request #1161 from LoopDawg/matmul-truncate
2e629106 HLSL: matrix and vector truncations for m*v, v*m, m*m
698bf754 Memory: Mak full explicit destructor functionality, techincally correctly.
1cf2b355 Memory: Fix #705: don't use pool object after invoking destructor.
fd1d07da Memory: Put pragma tables in the pool.
cbdf871d SPV: SampleMask does not depend on SampleRateShading.
e2c15b4f Memory: Reference count number of clients, to support multiple independent clients in same process.
b63f4a38 Usage: clarify meaning of -s; fixes #1135.
cb421ef9 Test: Add more legalization tests; those effected by flattening.
ca4ef9f4 Merge pull request #1156 from LoopDawg/snorm-uav
6e49c76e Merge pull request #1157 from LoopDawg/gs-hs-mix
7573a2ab HLSL: ignore geometry attributes on non-GS stages.
4036ef15 Merge pull request #1147 from KhronosGroup/memory1
ab9c6a8a Merge pull request #1155 from antiagainst/skip-tags
5da8ead7 Memory: Remove redundant pool popAll(), which is potentially confusing.
fa39cffd HLSL: Accept unorm and snorm on types
9a65c6a9 Appveyor: avoid double testing on master commits
fc3e8647 Implement OS_DumpMemoryCounters for Linux
74bde987 Memory: Restore unused interfaces, in case other tools called them.
c9e67405 Merge pull request #1150 from antiagainst/readme-release
30c60bdf Update README about the automatic master-tot relase
a9c8cce8 Merge pull request #1143 from LoopDawg/texturebuffer
94f28eb6 Memory: Add loop around main, to test tear-down and reuse, and monitor memory changes.
cb42541e Memory: Remove the need for per-thread tear down.
ff8e59f5 Memory: Do process and 1st thread tear down.
4ceaab16 Memory: Move to a normal model of ownership of memory pools, for new/delete.
be209055 Memory: Non-Functional: Rationalize and improve encapsulation of TLS usage.
a36997cb Merge pull request #1142 from greg-lunarg/kg3
4abd6b58 Merge pull request #1145 from antiagainst/travis-auto-deploy
fba299a2 Travis: auto deploy build artifacts to GitHub Releases
a0680e61 Merge pull request #1114 from LoopDawg/validator-script
a50a9de3 Merge pull request #1116 from LoopDawg/reverse-shift-args
7c2f6d85 Merge pull request #1144 from antiagainst/appveyor-auto-deploy
e570955c Reverse order of setShiftBindingForSet parameters
4ec680e1 Add script to crank test shaders through spirv-val
a7eab9b3 Appveyor: auto deploy build artifacts to GitHub Releases
e5530b92 HLSL: implement TextureBuffer<type>
c77da685 Update spirv-tools known good.
2edde666 SPV: Don't support noise*() when generating SPV.
af52799c Errors: Have a whole set of tool-level error messages report to stderr.
a372a3ed Versioning: Update some version strings. Still need better overall version.
9f0b6fa4 Merge pull request #1139 from greg-lunarg/remap2
e86b4c84 Remapper: Fix strip algo when strip ranges overlap
88e22a60 Fix #1079: don't give error when macro() name used without open (.
e8d21388 Fix nondeterminism discussed in 258b700f5957fc13b0512b3734a1b0e81a1c271d
ac516024 Fix #1065: don't validate Vulkan binding numbers.
715c353a Non-functional: copyright update, to help with non-determinism test.
5866e67b Tests: Non-determinancy: Add back in the IntMin tests.
a6362228 Merge pull request #1133 from greg-lunarg/kg2
3f9c03bd Add python3 compatibility to update_glslang_sources.py
258b700f Non-determinant tests: Remove recent tests, to see if things stabelize.
e9173b19 Non-functional: Add {} expected by convention; retrigger failed bot tests.
0501e7c8 Merge pull request #1129 from xorgy/const-fold-int-min-modulo-negative-one
f83e2f06 GLSL: Fold constant SHRT_MIN/INT_MIN/LLONG_MIN % -1 to 0.
b5b08462 Merge pull request #1124 from xorgy/check-inner-implicit-atomic-uint
60209951 Merge pull request #1127 from xorgy/preprocessor-int-min-mod-negative-one
9d4a1b24 Preprocessor: Evaluate INT_MIN % -1 to 0.
047b65f9 Merge pull request #1125 from greg-lunarg/kg1
cc80d80d Update spirv-tools known-good
437911af GLSL: Check for implicit inner dimension in array of atomic_uint.
9cfc1551 Merge pull request #1118 from xorgy/only-swizzle-numbers-and-bools
016e47f7 Merge branch 'only-parse-inf-constant-in-hlsl' of https://github.com/xorgy/glslang into xorgy-only-parse-inf-constant-in-hlsl
6e33b787 Tests: Add test for GLSL +-#INF.
79a40740 Merge pull request #1120 from xorgy/overlong-hex-literal
60312662 GLSL: Only parse [-]1.#INF in HLSL mode.
9028ed20 Check for hexadecimal literals exceeding MaxTokenLength.
07c0bcea Only try swizzles on vectors, numbers, and booleans.
b1eaf82c Merge pull request #1115 from LoopDawg/stdarray-binding-set
2915da30 Nonfunctional: minor: use std::array for per-set shifts, fix warning.
573cc9e9 Merge pull request #1111 from LoopDawg/per-set-binding-offsets
7a9db71f SPV: Don't emit StorageImageMultisample capability for subpass images.
6cfeced8 Non-functional: missing comments from missed git add.
1b46f137 HLSL: Fix #1106. Support shader setting of binding/set for $Global.
08a14422 Add per-descriptor-set IO mapping shift values.
fe4e572c GLSL->SPIR-V: Put precision decorations on imageLoad().
f0e35bf0 GLSL: Make sampling operations have agnostic precision qualifiers for desktop.
3112b568 Merge pull request #1113 from xorgy/preprocessor-int-min-over-negative-one
0b55e0f2 Merge pull request #1102 from KhronosGroup/partially-flatten
dc756a61 Preprocessor: Evaluate INT_MIN / -1 to 0.
a50b107e Build: Fix build warning.
8b555f74 Merge pull request #1109 from xorgy/never-try-to-swizzle-void
5313613d Don't try to swizzle void.
856502cb Update spirv-tools known-good
7d67c6cb PP: Fix #1104: Missing check for #if overflow.
1a4bbc4a HLSL: More clip fix: It is more involved than previous commit. Complete.
4ce5b562 Fix #1103: clip() works on int/uint.
5889fa03 Tests: Add clip(int) tests.
cf571f73 Infrastructure: Add a TShader method to publicly expose the intermediate.
41aa1995 HLSL: Partially flatten hierarchies, instead of all or nothing.
60e91611 Merge pull request #1098 from LoopDawg/attribute-gets
0d1f63ec Merge pull request #1097 from SWIFTingAround/master
ad2bc097 Merge pull request #1094 from LoopDawg/split-shadow-tx
ddb45f8d Merge pull request #1080 from hedejing/master
52c087ff HLSL: add helper access methods to TAttributeMap
aab00012 Set cmake-policy CMP0048 to NEW
fdbd0eba Add getAsLoopNode() method for Loop node
028c5a8d HLSL: nonfunctional: rename setId -> switchId, add comment
bb79abcc HLSL: Validate implicit initializer assignment to opaque members.
07ed11f9 SPV: GeneratorVersion: bump version number because of atomic decrement change.
b27de028 Merge pull request #1090 from tafuri/#1084-fix-segfault
48d6e798 SPV: Correct semantics of atomic-counter decrement.
592e8f04 HLSL: Tests: Add subset of flattened opaque test to legalize results.
4f6865f4 Added test for local structured buffer variable
5133b108 Fixed formatting
908813c2 Merge pull request #1089 from LoopDawg/split-shadow-tx
0a826111 Only track variables in the global scope
73c57bbe HLSL: split textures used for both shadow and non-shadow modes
263986eb Readme: Update with additional Windows build information for SPIRV-tools build.
2c9c2af6 Merge pull request #1085 from KhronosGroup/flatten-assign-subset
700bdeb7 HLSL: Fix #954: Track/access subsets of flattened multi-level aggregates.
86a82bb9 Merge pull request #1081 from xxxbxxx/for-upstream-1
a6085875 HLSL: Fix crash when flattening both side of assignement simultaneously.
24919659 Merge pull request #1075 from LoopDawg/subpass-input
7f93d56e HLSL: add subpass input types and methods
092b7d2e Build: Fix a couple build issues.
77ea30bd HLSL: Additional attribute support: [[]], namespace, parameters:
3693e631 Fix #1060: Could crash if using --source-entry-point with -e; fixed.
5a57ca68 Merge pull request #1078 from greg-lunarg/addopt14
354a54c6 Legalization: Fix tests after workarounds removed
d41993d9 SPV: rationalize parameter handling for "original" and "writable" parameters.
bed4e4f7 HLSL: Pass opaques by local copy, instead of by interface original.
15fa7ef5 HLSL: Remove workarounds for assigning to opaques.
dabd1bf2 Merge pull request #1076 from LoopDawg/shadow-tx-types
195f584e HLSL: force textures to shadow modes from combined samplers
fc7aeaee Merge pull request #1077 from greg-lunarg/addopt12
52fe3d59 Legalization: Fix warnings and disable tests when spirv-tools not present
3ddcd3f1 Merge pull request #1070 from greg-lunarg/addopt8
e2b36163 Advance spirv-opt known-good to hopefully fix travis multithread failure
b56366ab Legalization: Skip spirv-tools tests
741d1f20 Pick up latest spirv-tools in attempt to fix travis failures
87fd7429 Try Python interpreter on update_glslang_sources.py in appveyor
f451756d Fix travis and appveyor calls to update_glslang_sources.py
cd1f169c Enable HLSL legalization
44dd6a00 Merge pull request #1072 from amdrexu/feature
e8fe8b0d Implement extension GL_NV_shader_atomic_int64
f21c173a Merge pull request #1071 from antiagainst/ninja-make
afa128a8 Travis: use make instead of ninja and limit concurrent jobs
9cf5dfbd Merge pull request #1063 from LoopDawg/remapper-error-cleanup
ea5204d1 Build: Merge pull request #1068 from greg-lunarg/addopt4
fd34f0e6 CMake changes for HLSL legalization
8004d365 Remapper: make remapper robust against non-exiting error handlers
5f77d864 HLSL: Fix #1064: Don't include empty structures on OpEntryPoint
31365afa Merge pull request #1044 from dsrbecky/image_external_essl3
ae8af5d3 HLSL: fix array[1] of vec4 constant declaration.
c64a9dd6 Test: Make another test legal HLSL, and rationalize GLSL vs HLSL addConstructor().
bdbbc68e HLSL: Add bounds checking, shared with GLSL. Partially address #1032.
346dd7c7 Merge pull request #1051 from LoopDawg/bug-1049
4a145dbf HLSL: handle split InputPatch templat type in patch constant functions
a5d86164 HLSL: allow mixed user & builtin members in hull shader output structure
ba6a3c29 GLSL: Make gl_Layer and gl_ViewportIndex always be outside blocks.
aab3bcff Merge pull request #1056 from KhronosGroup/glsl-entrypoint-rename
9855bdad GLSL: Promote HLSL entry-point renaming code to be used by GLSL as well.
4f4683d2 Merge pull request #1050 from amdrexu/feature
30ac0525 Merge pull request #1055 from KhronosGroup/strdup
d9bd97d0 Build: Fix strdup -> _strdup warnings.
b3ca4045 Build: Fix build warnings.
5002c26b Fix #1043: set all scan string-locations to have bias, not just the first one.
a25530cc Non-functional: Make usage for entry points more consistent.
e22c11fd Merge pull request #1053 from mchock-nv/mchock-nv-fix-lambda
ea1ea974 Address #1052: Have language-level exits of case statements.
933c10cd Delete unused 'this' capture
05506bb8 Implement the extension GL_AMD_shader_fragment_mask
d004e5ca Merge pull request #1047 from svenstaro/add-stdin-option
0dd1285c Add --stdin
8688e3fb Merge pull request #1048 from LoopDawg/opaque-type-fix
76117921 Fix lvalue check in SPIR-V generation
2c5b3d64 Add support for GL_OES_EGL_image_external_essl3
3a21c880 Merge pull request #1042 from LoopDawg/warning-fix-2
43f682f6 Merge pull request #1039 from amdrexu/bugfix
2baa7742 Linux build warning fix
2a305f65 Fix issues of GL_ARB_viewport_layer_array
75e057f9 Merge pull request #1037 from LoopDawg/clip-cull-geom
5e5b12e9 HLSL: add geometry stage support for clip/cull distance
a459fc81 Merge pull request #1031 from xxxbxxx/for-upstream-2
4e2f05da Build: Fix #1036: size_t warning.
eb71cdd5 HLSL: fix preprocessor concatenation behaviour.
ea0c1643 Merge pull request #1035 from LoopDawg/clip-cull-type-fix
d6f4d9b4 HLSL: fix type on clip/cull index result
82e95a3a SPV: Add auto location mapping of non-opaque non-block uniform variables.
8268a355 Build: Attempt better support for VS 2012.
74c5f711 Merge pull request #1014 from KhronosGroup/SPV_EXT_shader_viewport_index_layer
35343cb8 Merge pull request #1034 from KhronosGroup/module-processes
b41bff69 SPV: 1st pass implementation of SPV_EXT_shader_viewport_index_layer.
2a27116c SPV reflection: Add OpModuleProcessed for compile options.
1f312f90 Merge pull request #1028 from LoopDawg/clip-cull-input
e2cda3c2 HLSL: handle clip and cull distance input builtin type conversion
fc343694 Merge pull request #1029 from amdrexu/feature2
00b3e384 Merge pull request #1025 from amdrexu/feature
129799a7 Implement extension GL_AMD_shader_image_load_store_lod
e8fdd79f SPV: Implement extension SPV_EXT_shader_stencil_export
3d1b7096 HLSL: Fix #1027.
778806a6 HLSL: Fix #1018: Give an error for mismatched return type.
b207daa5 Merge pull request #1017 from LoopDawg/texture-struct-return.1
786e8795 Build: Fix build when NV_EXTENSIONS is not enabled.
d6be6da0 SPV: Fix #1016: Don't allow non-GLSL-extension protected Layer and ViewportIndex members.
5ee05891 HLSL: add methods to track user structure in texture return type.
03e63fa8 HLSL: Add fall-back for opaque initializers to just generate long-term expected code.
25495fdf Merge pull request #1013 from KhronosGroup/flatten-nonarrayed
260f5061 SPV: Correct selection of storage-image capabilities. Fixes #986.
e29ff3cd HLSL: Flatten structs for all non-arrayed I/O interfaces.
01109546 HLSL: Make fresh array sizes for TessLevelOuter and TessLevelInner arrays.
4baebea8 HLSL Test: Expand test, adding a user-patch-constant signature.
e516d433 HLSL: Move debug naming to a simpler, more consistent, scheme.
3322dd8f HLSL: Include built-in processing for vertex input and fragment output flattening.
ecd08bc3 Non-functional HLSL: Factor out built-ins from splitting and related simplifications.
eaed0682 Merge pull request #1011 from LoopDawg/pragma-pack-matrix
6a264bed HLSL: implement #pragma pack_matrix(layout)
d5aedc19 HLSL: Correct which things flattening tracks for linkage, based on caller, not type.
7497e7c9 Merge pull request #1010 from LoopDawg/mat-rowcol-fix-1
898f5fbe HLSL: fix qualifier propagation from user struct types to block definitions.
2b4f77f2 HLSL: Correct use of isPerVertexBuiltIn() to be isClipOrCullDistance().
d319fb4e HLSL: Test change: Geometry shaders can't return values from main.
b6be80f4 HLSL: Flatten more I/O: non-arrayed user-only structures.
cca42a8e HLSL: Stop including empty structures in the I/O interface. Fix #785.
6042eb47 Non-functional: HLSL: Simplify I/O logic for splitting.
4cf52660 Merge pull request #1006 from KhronosGroup/4.60
934d11b6 GLSL 4.6: Implement shader group vote.
941f3bbd GLSL 4.6: Implement draw parameters.
0d0c6d38 GLSL 4.6: Implement atomic counter ops and SPV_KHR_shader_atomic_counter_ops.
de16e52b GLSL: Initiate version GLSL 460, including accept extraneous semicolons.
fda6edcb HLSL Tests: Fix two tests to be valid under FXC.
318a379b Non-functional: HLSL further simplications to base I/O flattening on.
8bcdf2ea Non-functional: HLSL: clean up dead code for splitting.
48dc5872 Merge pull request #1005 from LoopDawg/remove-unused
7a3cef10 HLSL: Non-functional: warning fix, remove unused member.
a58cc9ff GLSL reflection: Fix #985: reflect runtime sized arrays having no constant index.
a353bf1f Nonfunctional: Add reflect test case, and fix long lines in reflection code.
2ceec681 Nonfunctional: Shorten some lines to the coding standard, to retrigger failed test run.
38151b2f Merge pull request #1002 from amdrexu/bugfix
286ca432 SPV: Memory qualifiers should decorate top-level block members
f1f5058a Merge pull request #997 from LoopDawg/clipcull-semantic
307b6507 HLSL: handle multiple clip/cull semantic IDs
d2d3a142 SPV: Update to latest 1.0 headers, removing redundancies in GLSL.ext.AMD.h.
cd52fd5a Merge pull request #1000 from LoopDawg/samplecmpzero-cubearray-fix
ef94b1a5 Fix dref explicit LOD form of sample with cube texture arrays
53863a3a GLSL: Implement version 320 for ES.
9353f1af GLSL: Add version-number checking.
67eb4970 SPV/OpenGL: Require locations on non-opaque uniform variables.
ab008675 Merge pull request #991 from LoopDawg/resource-set-binding-fix
a2b71902 Reflection: Fix #977: Expose getBinding(), use in new getUniformBinding().
52017192 Fix crash with --resource-set-binding [n] (common set form, not per-register form)
0e392aa9 Merge pull request #996 from KhronosGroup/decorate-parameters
961cd35b SPV: Fix #995: Include memory decorations on parameters.
fad62972 SPV: Non-functional: support lists of decorations per parameter.
198652a6 Merge pull request #994 from KhronosGroup/opaque-init
0e6e2ffd Fix #980: flatten opaque initializers to use aliases.
37c202aa Merge pull request #992 from polarina/null-deref-fix
b5d9c11e Fix NULL pointer dereference in TParseContext::builtInOpCheck
91e69c03 SPV: Address #989: Don't add Location to built-ins when automapping.
56d2b990 Merge pull request #987 from KhronosGroup/global-std140
735d7e56 Address part A of #982: $Global will use std140 instead of HLSL offsets.
1e4a721c Merge pull request #978 from LoopDawg/global-const-init-fix
d854ac8b Merge pull request #983 from LoopDawg/warning-fix
b97b25e4 Fix StandAlone.cpp compilation warnings
0fca0baf WIP: HLSL: support global const initializers from non-constant rvalues
652db16f Build: Fix #975: shut up a compiler warning (code was fine).
4b1a890b Nonfunctional, infrastructure: Clean up Test directory droppings.
645fdaa7 Merge pull request #971 from amdrexu/bugfix
57e65929 HLSL: Translate directive [flatten] and [branch] to SPV control mask.
423fae48 Tests: Add a test for concurrent use of std430 and push_constant.
9645f782 Merge pull request #965 from chaoc/spv-khr-post-depth-coverage
c1204527 Implement SPV_KHR_post_depth_coverage
33bf7b2f Merge pull request #974 from LoopDawg/anyall-types
54b9ff9c HLSL: handle type conversion for any/all intrinsics
17b5f917 Merge pull request #969 from d3x0r/patch-1
3f70d405 Merge pull request #970 from rohith10/master
6206091e Fix CMake scripts: The set_property script can be used to set only a single property, so now setting the POSITION_INDEPENDENT_CODE property correctly.
45933124 Update CMakeLists.txt
4e53d905 Update CMakeLists.txt
89de217f Update CMakeLists.txt
9c6ea324 Update CMakeLists.txt
57a2b22d Update CMakeLists.txt
cde46127 Update CMakeLists.txt
02ed9eb2 Update CMakeLists.txt
42b69261 Update CMakeLists.txt
f8f494ff Add option to skip installation
eb5f12d1 Merge pull request #967 from dsrbecky/multiview
d1be7545 HLSL: Non-functional: Move partial flattened access into symbol node.
02a14e7c HLSL: Non-functional: some coding convention tweaks (120 columns, nullptr).
0af795e8 Merge pull request #966 from TiemoJung/io_remapper_update
aad93a80 Merge pull request #959 from TiemoJung/texture_upgrade
5513d9d0 Multiview extension: Accept layout(num_views) qualifier
0422eb23 io resolver improvements
99466020 Merge pull request #964 from dsrbecky/multiview
0fbe02c6 Implement extensions GL_OVR_multiview and GL_OVR_multiview2
fde4975d Fix for not transforming all image symbols into sampled images symbols
2ae23ca1 Merge pull request #957 from amdrexu/feature
37d7cfb1 Merge pull request #961 from benvanik/fix_order
82da44d4 Fixing initialization order to fix -Wreorder warning in clang.
89400ea7 GLSL: validation of early_fragment_tests, others, on an object.
37cdceed Implement extension GL_ARB_shader_stencil_export
89f8d1e6 HLSL: Fix #942: Map SV_TargetN to SPV Location N.
4f54c0c4 HLSL: Fix hull-shader test.
da9eb815 HLSL: Don't pin down which tessellation stage must error check input primitive.
fe6689c6 HLSL: support point mode.
102328b7 Merge pull request #950 from dsrbecky/shadow_samplers
a8a83204 Merge pull request #948 from KhronosGroup/env-control
6353d55e Command-line: Add support for setting language's environment.
c178f0a4 Infrastructure: Non-functional: rationalize some command-line processing.
4be4aebd Infrastructure: Non-functional: Move to rich description of environment.
c6ac40a1 Add support for GL_EXT_shadow_samplers
4fbb8cb4 Merge pull request #947 from LoopDawg/clip-cull-distance
c44b95fd WIP: HLSL: handle clip/cull distance array semantic matching
4329d555 HLSL: Broaden solution for #940, editing integer input for 'flat'.
f0bc598d HLSL: Force flat interpolation for structure members. Fixes #940.
be1085cb Build: add switch default to make compilers happy
fba125a9 Merge pull request #943 from xxxbxxx/for-upstream-1
54596ff9 HLSL: Force flat (nointerp) onto integer fragment inputs.
b1d97537 hlsl: "in out" is also an inout qualifier.
f02c8e6b Non-functional: Attempt to reset Travis error, while adding more nullptr use.
2fcdd64e HLSL: Remove support for named tbuffer/cbuffer.  Fixes #939.
054378d9 HLSL: Non-functional: Make test valid HLSL, and related comments/cleanup.
e2ff404f Merge pull request #917 from KhronosGroup/remove-redundant-locations
f790b161 Tests: Fix missing test result.
a931366f Standalone: Implement -D and -U for preprocessor macros.
04acb1b7 Standalone: Rationalize ShaderCompUnit and file data.
6263fb19 Infrastructure: Rationalize command-line options.
2d46e73b Merge pull request #931 from LoopDawg/scalar-mat-assign
e2713125 HLSL: fix several issues in mat construction from scalars
f7cd88a2 Merge pull request #937 from amdrexu/bugfix
301a2bc8 SPV: Fix an typo of SPV_AMD_texture_gather_bias_lod
82ae8c31 HLSL: Fix #924: Convert between two different arrays with cast.
0320d090 HLSL: Recognize types declared as identifiers as identifiers.
91c46c65 Merge pull request #932 from LoopDawg/warning-fix-1
1892886a HLSL: compilation warning fix: no functional change
5ea6a192 Merge branch 'amdrexu-feature'
cabbb788 Implement extension GL_AMD_gpu_shader_int16
4d5bcd31 HLSL: Allow macro expansions to create the 'defined' operator.
3fcb42cf GLSL: Fix #853: Only outer dimension of array can be specialization constant.
d314ecfb GLSL: Correct missing "not" from error message about non writeonly images.
dd56173d GLSL: Disallow 'shared' in nested scopes.
c5f2ab96 GLSL: Disallow unsized arrays of atomic_uint.
885443c7 Build: reset for multi-threaded test error, that reported a single missing character.
14d65beb GLSL: Fix Khronos private Bugzilla 15973: local sizes can't be 0.
2eb13550 GLSL: Fix #396: Error when 'defined' comes from macro expansion.
65755667 Merge pull request #922 from KhronosGroup/dash-I
971a0a8d Infrastructure: add include search paths (-I, etc.).
96f65521 HLSL: Implement half matrices, and map all half* -> float*.
f6deacd5 HLSL: Track control-flow nesting and warn on aliasing under it.
9b2531ba Infrastructure: Move nesting counters, etc., to base class.
b4d46627 Build: Fix build warnings.
a83959fa Merge pull request #920 from jeremy-lunarg/jeremy-build
549764b5 Build: Fix linux
0e07119a HLSL: Fix #919: for-init-statement is arbitrary declaration or expression.
e00e8f45 GLSL: replace general missing functionality with specific messages.
21369c82 Merge pull request #912 from amdrexu/feature
225e0fca Implement the extension GL_AMD_texture_gather_bias_lod
7cdf3fc3 Replace #422: Remove the redundant location setting in AST->SPIR-V.
94c18a84 GLSL: Fix bug setting component=0 for an auto-location assignment.
8de7e7bf GLSL: Error when using location on an arrayed block.
99f289d4 Merge pull request #899 from antiagainst/rm-empty-cpps
0b94a31e Merge pull request #915 from LoopDawg/subvec4-intrinsic
70942e5f Merge pull request #905 from KhronosGroup/flatten-opaque-structs
f3150742 HLSL: Convert run-time sampler assignments to compile-time aliases.
750c2d07 SPV: When passing structs of opaque types, flatten and pass the members instead.
d66c5b12 HLSL: iomapper: Fix #914. Tolerate user aliasing of bindings.
a696fd1a HLSL: add test coverage for sub-vec4 texture intrinsics
ae99875e Merge pull request #907 from KhronosGroup/include
5052152e Merge pull request #913 from amdrexu/bugfix
3494b4da HLSL: Add an Includer to handle #include.
0848cc07 Parser: Add missing codes for float16
44d2728e Merge pull request #911 from KhronosGroup/debug-info
e485c7af SPV: Debug output: Include OpLine information for execution path.
121853f4 SPV: Add OpSource shader source code and file name.
136b1e2d Merge pull request #856 from TiemoJung/texture_upgrade
baf570ef Pure Texture to Sampled Texture Transform
d6af18f6 Merge pull request #901 from LoopDawg/imat-construct
7c9129bc SPV: Fix #904: Correctly check for built-in block redeclations for location check.
84cc15f0 HLSL: Fix #903: Don't short-circuit && or ||.
6e2295d3 HLSL: Fix #902: Incorrect protection against zero arguments.
174ccb8f HLSL: Add imat, umat, and bmat constructors
2c6f48b1 Fix #373: Implicitly make gl_FragColor a location=0 output.
1d585ac8 SPV: Correctly enforce 'location' presence on in/out blocks.
557caf24 Merge pull request #900 from LoopDawg/tx-overloads
7b8c386c More non-determinism fixed.
b6cabc4f Fix C++ portability, non-deterministic order of argument evaluation.
80f92a19 Fix #857: Convert uniform int to local bool for struct alias assignment.
0d2b4713 HLSL: Don't do logical short-circuits when the operands are bool-vectors.
132a28aa HLSL: allow name mangling based on texture template type
ddda9cb8 Remove empty cpp files
ab0847ef Merge pull request #896 from KhronosGroup/spv-location
ff164d87 Merge pull request #897 from LoopDawg/remap-specconstop-fix.2
65c2eed6 Remapper: handle embedded opcode in OpSpecConstantOp
71facdf4 SPV: Give error on not assigning locations to I/O.
24e895b4 Merge pull request #860 from steve-lunarg/sb-counter-args.2
09a29d9b Merge pull request #893 from KhronosGroup/member-call
2bb1f39f WIP: HLSL: add ability to pass struct buffers with counters to fns
0a2a0cd3 HLSL: Implement member functions calling member functions.
b29cc30c Merge pull request #852 from steve-lunarg/declared-builtin
a4bfed12 WIP: track declared builtin type [proposal]
1a010b83 Merge pull request #890 from LoopDawg/mip-operator
726bf96a HLSL: add .mips[][] operator for texture types
c70bbc83 Merge pull request #889 from antiagainst/travis-android
b21213e8 Check Android build on Travis CI.
ef7efb21 Merge pull request #888 from LoopDawg/geometry-stage-mix
c6510a33 HLSL: allow GS-specific methods in other stages
c49b4efa HLSL: Fix #884: Use promoted children, not pre-promoted, in completing binary nodes.
c48c8e76 Merge pull request #886 from antiagainst/unordered-set
2840f63f Use unordered_set in ReadableOrderTraverser.
d9b08d5c Merge pull request #880 from aras-p/master
02c4728a Merge pull request #874 from xlpiao/DescriptorSet-and-Binding
23d3c712 [lumped builds] Add include guards (#pragma once) to header files that did not have any.
8e204b2d [lumped builds] Only define _CRT_SECURE_NO_WARNINGS if it’s not defined yet. When glslang is built with some other build system and lumped/unity builds are used, without the checks this would get “macro is being redefined” warnings/errors.
36dc8290 HLSL: Manually configure descriptor set and binding number for resources
12d69368 Build fix: Make string assignment simpler to avoid some compiler issues.
1ee1c8e1 Build: Fix portability in previous commit.
c10191d1 SPV: Support texelFetch() on a textureBuffer (no sampler).
a5c5fb61 SPV: Emit extension for using StorageClassStorageBuffer.
43c72b0e Merge pull request #878 from steve-lunarg/unroll-hint
f1709e71 HLSL: implement [unroll] and [loop] attributes
de1cc06c Merge pull request #877 from steve-lunarg/warn-fix1
0c20067c Fix iomapper build warnings
7aaf4191 Merge pull request #873 from steve-lunarg/gathercmp
6817f81e HLSL: Implement missing GatherCmp
22be5788 Merge pull request #870 from SoapGentoo/cmake-fixes
22afc38b Modernise CMake #2
eb9a532b Merge pull request #869 from KhronosGroup/revert-828-fixes
cfc69d95 Revert "Modernise CMake"
a01600b8 Merge pull request #828 from SoapGentoo/fixes
8f824265 Make test suite optional by using CTest
5a5699bd Modernise CMake
acce8dce Merge pull request #868 from TiemoJung/two_pass_io_remap
bbae7de0 Merge pull request #867 from steve-lunarg/emptyinit
f1bfeec7 Notification phase for io remapper
c0043cda HLSL: Allow empty struct initializers
7cca1409 HLSL: Turn on hlsl-offsets by default for HLSL-source shaders.
dd5dee0b Merge pull request #859 from steve-lunarg/sampleposition
d4d0b297 HLSL: add standard sample position return form of GetSamplePosition method
88aabcca Merge pull request #855 from steve-lunarg/constantbuffer
a766b838 HLSL: Add ConstantBuffer<T> syntax
a1cdd13b Merge pull request #851 from dgkoch/dgkoch_build_fixes3
15bb4370 Fix Android build errors
8a5718a9 Merge pull request #849 from steve-lunarg/samplercmp-errmsg
3cbc32f4 HLSL: add error for expected comparison sampler in SampleCmp* ops
32a385e9 HLSL: Fix #846: support mixed ternary types.
0603a383 Merge pull request #847 from steve-lunarg/sb-param-fix
1c04f1e5 Merge pull request #842 from steve-lunarg/sb-cast
1487db54 Merge pull request #840 from steve-lunarg/iomap-hlsl
e404e088 HLSL: fix for byte address buffers in fn parmeters
7b1dcd66 HLSL: add readonly qualifier to tbuffer, so they end up as SRV
be283550 WIP: HLSL: hlsl register class iomapping
ba5cc2fa GLSL: Fix #822: Improve information given for syntax errors.
0c6f9360 HLSL: Fix #96: Support do-while loop substatements with no curly braces.
f8203a0a HLSL: cast non-int types to uint on Load/Store indexes
67027189 SPV: Support test #pragma for generating the StorageBuffer storage class.
a8d3db6b Merge pull request #835 from steve-lunarg/sb-counters
d5d9ffbd HLSL: vector shape conversions for all ops: Fix #839. Fix #653. Fix #631.
2aa12b1c HLSL: Address #839: avoid crash by distinguishing between bad argument and no argument.
350b9485 WIP: HLSL: add refection queries for structuredbuffer counter blocks
12bc9aa9 WIP: HLSL: add Append/ConsumeBuffer support
8e26feb8 WIP: HLSL: structuredbuffer counter functionality
d1141843 SPV Non-functional: fix ordering causing problems with another branch.
97366a0d HLSL: Fix #770: implicitly convert bool operands to numeric operators.
a4c64c98 HLSL: Fix #834: Report #version is an illegal command.
a0c578a6 HLSL: Fix #758: Support character literals (except for numeric escape sequences).
2051815b HLSL: Fix #803: Add shape conversions to the constant-initializer path.
a8b217fd Merge pull request #833 from KhronosGroup/hlsl-inf-syntax
776c515e HLSL: Support 1.#INF and -1.#INF syntax.
b5e739c2 HLSL: Fix boolean conversion bug and add more tests for ?:.
636b62db HLSL: Support vector 'cond ? :' -> EOpMix -> OpSelect.
34718204 HLSL: Non-functional: add vector ? : tests.
13075c61 HLSL: Fix #832: don't require terminating semicolon for cbuffer/tbuffer.
e9f18fd9 Merge pull request #831 from steve-lunarg/isfinite
9e5a19fd HLSL: fix return type for isfinite
ae79697d Merge pull request #827 from amdrexu/feature4
a09eefd8 Non-functional: Fix typos in comments.
6fa17641 HLSL: Emit the OpSource HLSL instruction for HLSL, using new headers.
7962bda3 Merge pull request #825 from steve-lunarg/index-cast
f89ad980 Implement the extension SPV_KHR_16bit_storage
2efd6c6d HLSL: cast bracket dereference index to int type if not.
38a42535 SPV: Move to latest public headers.
07b30c42 Merge pull request #823 from steve-lunarg/tess-coord-size
4f1403ed SPV: Fix #807: use --hlsl-offsets to allow hlsl-style offsets in a buffer.
ccb076ac HLSL: allow non-vec3 tessellation coordinate declarations
6f1e595d Merge branch 'jantlo-cpp11-feat'
d92b5679 Merge branch 'cpp11-feat' of https://github.com/jantlo/glslang into jantlo-cpp11-feat
a558b265 This refactor the StandAlone and WorkList files in order to use more C++11 features remove the dependencies from OS specific code. Changes:
97cb85c7 PP: Fix #783: Catch end-of-argument expansion in token pasting.
82460b5e HLSL: Fix #805: Support cast of scalars to structures.
5ce1e4af Merge pull request #817 from steve-lunarg/isfinite
c633f644 HLSL: Non-functional: rationalize making constructors.
8df9a486 Merge pull request #812 from steve-lunarg/PatchIO
13975525 Decompose OpIsFinite to avoid capability restrictions
067eb9b4 WIP: HLSL: Support InputPatch variables in patch constant functions
b68b9a8b Merge pull request #808 from steve-lunarg/gs-ep-wrap-fix
08e0c086 HLSL: fix GS implementation for EP wrapping
2184c2f2 Fix #287: pin down the io-array size before checking for out of range index.
6f03bfc7 Merge pull request #815 from steve-lunarg/tess-ds-pcf-order
f38cca3c HLSL: handle PCF input to DS in arbitrary argument position
fa84001a Merge pull request #814 from steve-lunarg/contains
27309f68 Refactor TType::contains* methods (nonfunctional)
c7fd73b7 Merge pull request #811 from steve-lunarg/combine-test
bf1537f4 WIP: HLSL: force uncombined flag off for Buffer<>
f36542f4 Revert "Merge pull request #779 from steve-lunarg/buffer-unsampled-fix"
84a30c8b Merge pull request #774 from steve-lunarg/tess-ctrlpt-pcf
e70fcf2d Merge pull request #810 from steve-lunarg/clip-crash-fix
db2e3b41 HLSL: fix crash on empty sequence node passed to intrinsic expansions
e741249b HLSL: pass tessellation execution modes through to SPIR-V
9ce76553 Merge pull request #797 from steve-lunarg/scalar-length
18958f6c HLSL: Fix #802: Preserve promoted child under ! operator.
7e997e26 HLSL: Implicit bool conversions for conditional expressions and related.
8f9fdc98 HLSL: Add namespace grammar and some basic semantics.
e752f463 HLSL: HS return is arrayed to match SPIR-V semantics
7afe1344 HLSL: strip off array dimension when assign locations of arrayed IO.
194f0f39 HLSL: require tessellation factors to be fixed size arrays
9cee73e0 HLSL: support per control point patch const fn invocation
e434ad92 Fix #809: smear scalar condition in OpSelect for selecting vector operands.
4dc835c3 Non-functional: Round of adding 'const', related to more efficient getFullNamespaceName().
714e58b2 Merge pull request #801 from amdrexu/bugfix
3feac2eb Merge pull request #806 from amdrexu/bugfix2
bcf291a7 Don't emit NV-specific interface members if NV extensions are disabled.
470026f9 HLSL: Fix an issue of frexp().
86e49d17 HLSL: Move frexp() to a separate test file.
aa3c64c2 Fix #800 (mostly): set of Linux warnings.
9fb31ce8 Tests: strengthen the value of test for NV members.
0e737844 Fix #790: Don't emit NV-specific interface members unless enabled by extension.
1ca04c2b HLSL: allow length() on scalars
93750bc0 Merge pull request #796 from steve-lunarg/emptystruct-return-fix
d8e34c51 HLSL: fix crash on empty struct return from entry point
19ea5689 Tests: Update test results.
000c818e HLSL: Allow use of $Global members in between function calls.
7a41f96d HLSL: Implement 'this' keyword.
3778979c HLSL: non-static member functions: track and find active anonymous 'this' scopes and members.
f4ba25e0 HLSL: Non-functional: the symbol field of a token was in practice unused; remove it.
5a839069 Merge pull request #782 from steve-lunarg/builtin-methods-prefix
1dd65ca3 Merge pull request #779 from steve-lunarg/buffer-unsampled-fix
e7d0752a HLSL: use prefix for builtin functions names to avoid namespace collisions
4960baaf HLSL: Basic turn on of non-static member functions.
dfbdd9eb HLSL: Add implicit-this tracking to TFunction.
f3d88bd4 HLSL non-functional: Generalize namespace nesting.
d3947d23 WIP: HLSL: propagate readonly qualifier for buffer types
cf2e7275 WIP: HLSL: Buffer types should be unsampled.
e751bca7 Fix #777: don't parse .suffix if <stage> is provided.
26013595 Merge pull request #776 from amdrexu/bugfix
5e317ffe SPV: Fix unexpected declarations of capability and extension
36b218de HLSL: Fix #771: add inline keyword.
95e736c8 Merge pull request #767 from DragoonX6/master
2dd643ff Merge branch 'TiemoJung-semantic_handling'
2dc50ff3 Merge branch 'semantic_handling' of https://github.com/TiemoJung/glslang into TiemoJung-semantic_handling
71c100d7 GLSL output: Removed fixed-size buffer; fixes #769.
c08fb8ab Full stack: properly implement GL_EXT_device_group and GL_EXT_multiview.
78cfba97 Fix location of #defines for core and compatibility profile.
601b7fa4 Revert previous check-in, until knowing what the spec. is and whether the test failure is related.
7a44a31d SPV: Address #759: make ViewIndex and DeviceIndex by 'in', not 'uniform'.
946e0a6d Merge pull request #768 from amdrexu/bugfix
d41a696c HLSL: Additional channel value for textureGatherXXX().
8155934b Fix building on MinGW-w64
b16f7e68 HLSL: Member-functions: capture body token stream for deferred syntax/semantics.
088d52ba HLSL: Non-functional: consolidate function declarator information.
c04c6a40 Merge pull request #762 from LukasBanana/master
54ee28f4 HLSL: Add scoping operator, accept static member functions, and support calling them.
5f12d2f7 HLSL: non-functional: simplify handleBuiltInMethod() to isBuiltInMethod().
1fbc6e6c Added 'GL_core_profile' and 'GL_compatibility_profile' macro definition to preamble.
523e20dc PP: Recognize the '::' token, and translate appropriately to GLSL/HLSL token.
6212e86f Merge pull request #764 from steve-lunarg/imagequery-sign
0b5c2ae7 Preserve signedness in SPV image query ops
757bc874 Merge pull request #763 from steve-lunarg/nullstruct-preservation
4198b8bf WIP: HLSL: preserve empty structures after splitting
6e1d50a7 HLSL: Accept SV_Cull/ClipDistanceN, by refactoring the way semantics are mapped.
229a6f7f Merge pull request #761 from baldurk/vs2010-compile-fixes
79f8bf0d Merge pull request #760 from steve-lunarg/gathercmpred
5d5db80d Compile fixes for VS2010
d00b0261 Enable GatherCmpRed.  Green/Blue/Alpha cannot be supported.
88e88e59 HLSL: Non-functional: Remove dead .length() code.
516d92d3 HLSL: Non-functional: Drive existing method recognition by syntax, not by name.
78388726 HLSL: Non-functional: Don't process function name/parameters before expected a function declaration.
b7201f8e Merge pull request #756 from steve-lunarg/getdimensions-fix
ca71d946 HLSL: Grammar: Generalize accepting a declaration to accept an aggregate of subtrees.
3ce4536a HLSL: use LOD form of ImageQuerySize when needed.
057df293 HLSL: Fix #754: recognize type casts in if-statements separately from declarations.
621c0e3d Merge pull request #755 from steve-lunarg/sb-orderfix
40efe5ce WIP: HLSL: Fix ordering defect if global SB decl after fn param
33f85b6e SPV: Allow push constant buffers to not have an instance name.
789086a8 HLSL: Test for issue #699.
322cb192 Merge pull request #750 from dgkoch/rename_KHX_to_EXT
27ffb299 HLSL: Add 'class' keyword as (so far) synonym for 'struct'.
efc97279 Rename KHX to EXT to match the released specs
c18cae21 Merge pull request #748 from dgkoch/dgkoch_build_fixes2
d9b7a850 More build fixes
854fe247 HLSL: Fix #747: accept 'struct' in front of previously user-defined type name.
0479437a SPV: Fix #739: OpSelect can only operate on scalars and vectors.
173c0c01 Merge pull request #744 from realitix/sanitize_sh_link
9c3f7b60 Merge pull request #746 from dgkoch/dgkoch_build_fixes
efeefd98 Build: Another fix for issue #718: implement the hidden methods of tFinalize.
197082ca Fix build warnings on some platforms
bc3fdcc8 Sanitize ShaderLang.h
3494d71c PP: Fix issue #738: don't assert on characters within a string.
fb22b69f PP: Partially address issue #738: handle premature end of argument when token pasting.
45c1b5b9 Merge pull request #742 from steve-lunarg/f16tof32-typefix
fdbfb65e HLSL: small fix for index type in f16tof32 opcode
5a042c06 GLSL: Fix #741: rationalize per-block vs. per-member offset checking.
69a2c696 Merge pull request #736 from steve-lunarg/structbuffer-params
b67b4a70 PP: Address #737: accept 'h'/'H' floating-point suffix more broadly.
f67f9d7e Merge pull request #740 from steve-lunarg/f16tof32
86b510ef WIP: HLSL: add f16tof32 and f32tof16 decompositions.
42e33c9b SPV: Update SPV header to official Rev. 10 of 1.0, and fix the consequences of doing so.
6c8aaacd SPV: Implement new extensions GL_KHX_device_group and GL_KHX_multiview.
dd8287a1 WIP: HLSL: add structuredbuffer pass by reference in fn params
4a57dced SPV: Handle nested opaque types as function parameters.
74912347 Merge pull request #734 from steve-lunarg/ssbo-reflection
cb34945e Merge pull request #733 from amdrexu/bugfix
932bb5cc Add reflection queries for thread local size and ssbo auto-binding
3e783f9b SPV: Unexpected declarations of capabilities from NV extensions.
2fbe08c7 Merge pull request #725 from steve-lunarg/structurebuffer
5da1f038 HLSL: implement 4 (of 6) structuredbuffer types
c8aed915 Merge pull request #732 from dneto0/fix-overrides
4c64a40d Add override where needed by clang++
8f674e82 Fix issue #676: emit error message on failure to open spv file.
0302bdf0 SPV: Fix #723: construct vectors from matrices.
36852b83 Merge pull request #727 from jekstrand/image-load-formatted
f2b27603 Merge pull request #729 from gwihlidal/master
f44d89a3 Implement GL_EXT_shader_image_load_formatted
6f332f3a Warning fixes
005120cc HLSL - Support for SV_GroupIndex
b0cfcb5c Merge pull request #1 from KhronosGroup/master
b0561d93 Merge pull request #720 from flaviobortot/master
54f3ab7d Merge pull request #728 from MaciejJesionowskiAMD/fix-mismatched-subgroup-vote-string
5227b6de Fix mismatched doc string for SPV_KHR_subgroup_vote
d9502833 Merge pull request #724 from chaoc/master
15017db9 Removed tabs and replaced with spaces. Changed layout for "else if"
df3956c5 Implement NVX_multiview_per_view_attributes
8bb3ee53 added semantic handling and support for remapping variables with semantics
7225a1cb Support align/offset for all versions GLSL/ESSL targeting SPIR-V.
e4e8f7b7 Merge pull request #722 from steve-lunarg/tessellation
9a2733a9 PP, nonfunctional: Properly encapsulate a TokenStream.
858c928a Add basic HS/DS implementation.
b49bb2ca PP, nonfunctional: Remove crufty bit-twiddling of tokens.
8e711b84 Fix issue #708: token pasting within macro argument expansion.
07939886 Merge pull request #707 from KhronosGroup/emit-opSelect
f8d0d8c2 Address issue #718. Should change which warning is generated, hopefully to a better one.
8e6c6cef SPV: Implement specialization constants for ?:.
433e9ff8 SPV: Emit OpSelect when a selection node is simple enough.
509177d1 Merge pull request #685 from KhronosGroup/wrap-entry-point
dd40260b HLSL: don't do a deepCopy() for typedef, as we still want to share the type graph.
65ee230f HLSL: Add tests and refine what decorations are passed through per stage/in/out.
bf47286f HLSL: Move to fine-grained control for defining input/output/uniform IO types.
727b374f HLSL: Build IO types bottom up, as parsed, and cache the original (IO).
88c4464d HLSL: Have loose uniforms also go through the makeTypeNonIo() path.
2c5ab9c8 HLSL: remove pervertex output blocks
fbb58a4e Build: Fix Linux for older compiler: Use TMap instead of TUndorderedMap.
ec712ebe HLSL: fix copies between arrays of structs of builtins, and arrayed builtins.
abd8dca8 HLSL: Make the entry-point shadow function have non-IO params and return.
5d3023af HLSL: Type sanitization: create non-IO types for var decl and fn param/ret
0fe106af AST: Have type deepCopy() preserve type graphs as graphs.
02467d8d HLSL: Wrap the entry-point; need to write 'in' args, and support 'inout' args.
aea3c890 Added --vn option to generate a C header file containing a variable assigned to the hex representation of the shader. This is a standard feature on Microsoft's HLSL compiler and it allows developers to include pre-compiled shaders directly into the code. This option enables "Hex output", so it is NOT required to specify -x as well. The output file name is preserved, so no ".h" extension is added. If you want the output file to have ".h" extension then you have to specify it on the output file name. The generated header file uses the "#pragma once" pragma to avoid multiple inclusions.
18adbdbb Resolve issue #700: allow initializers on struct members.
32fd5d26 Memory/constructor/warning clean-up. Addresses issue #705.
f1aeac89 Merge pull request #711 from eoma/fix-friendly-specialization-name
ad58d454 SPV: Emit names of specialization constants
7e134cdf Merge pull request #706 from Ralith/install-headers
5a074532 Install headers
62c3e400 Fix bug from PR #678: NV_EXTENSIONS deleted implicit array sizing.
82e0e589 Fix issue #693. Ternary operator on void type.
c0904c15 Merge pull request #690 from ligfx/proper_dependencies
2918a2ef README: point to HLSL status issues
24ed24dd Merge pull request #702 from resetnow/master
689490fd SpvBuilder: add const specifier to vector reference arguments
72754864 Merge pull request #694 from mtavenrath/fix_origin_link
7b89e752 Use correct OriginUpperLeft when linking more than one shader.
047a6a49 Merge pull request #696 from amdrexu/bugfix2
ab9e5e9f Merge pull request #695 from amdrexu/bugfix
00d54b44 Semantics: Texture clamp functions are available for fragment shader only.
c708f980 Fix a CMakeLists issue
2043da90 Merge pull request #692 from hrydgard/no-nvextensions-build-fix
bec5fc89 Fix build if NV_EXTENSIONS is not set
64b010f3 Merge pull request #678 from chaoc/stereo_view_rendering
6077a19b CMake: add target_link_libraries internally
771d89fc support SPV_NV_viewport_array2 and SPV_NV_stereo_view_rendering
52fceb08 Merge pull request #689 from mikew-lunarg/master
4e9e400e Fix for not-handled-in-switch warnings
c37f8d6b Merge pull request #683 from rdb/master
a2f0e0e7 Fix compilation with MSVC 2010
22f25d80 Merge pull request #682 from steve-lunarg/split-copy-fix
d3aea5ed Merge pull request #679 from ashwinkolhe/akolhe_spv_khr_subgroup_vote
7dccb151 SPV: Merge pull request #675 from amdrexu/feature
e48b8d74 Infrastructure: remove potential memory leaks.
65cdff9a HLSL: fix dereferencing when copying split structures with arrays
430ef40a Implement new revision of extension GL_AMD_shader_ballot
94dfb7a5 Non-functional: Factor out entry-point logic from handleFunctionDefinition().
c720f3e6 Implement SPV_KHR_subgroup_vote
33dadd12 Fix build break for non-VS.
44251539 Non-functional: Fix round of compiler warnings.
c142c889 Front-ends: Non-functional: Rationalize vector and matrix swizzles.
0a76a187 Merge pull request #656 from TiemoJung/overload_fix
fdf6347f HLSL: Add EOpMatrixSwizzle, selectively decomposed to other ops, for issue #670.
001dfa1c HLSL: matrix swizzle (_12, _m23) syntax, partial semantics.
913e3b68 PP: Clean up and rationalize floating-point-number scanner.
e86fc094 Merge pull request #664 from steve-lunarg/stage-io-fix
dc1a8196 Infrastructure: Support standard build with ENABLE_HLSL set to off.
65d538c8 Infrastructure: Protect against missing built-in symbol table generators.
ce80197c Merge pull request #663 from KhronosGroup/full-include-semantics
eaecfe71 Merge pull request #668 from slime73/DisableHLSL
ff21a25b Change disabled-by-default DISABLE_HLSL option to enabled-by-default ENABLE_HLSL.
46d54284 WIP: add other builtins to interstage IO
84eabf7e Add a CMake option to disable compilation of HLSL input support.
5d89d4d4 Merge pull request #667 from slime73/Compiler-Warnings
5f316d9b Reorder initializer fields to match variable declaration order (or vice versa) for several class constructors.
844dd45d Add a virtual destructor to a class which has virtual methods.
7d39ad58 Mark an overriden method in a subclass with ‘override’.
facde2c8 PP #include: address PR feedback.
63204c25 External interface change: PP: Full <> and "" semantics for the Includer.
25086025 PP #include non-functional: consistent notation for "header" and "header name".
927608b3 Non-functional: White space after "//", mostly for copyrights.
ecba76fe Non-Functional: Whitespace, comments, replace accidentally deleted comment.
3dd32293 Merge pull request #661 from KhronosGroup/fix-include-error-paths
1b1defd6 PP: #include: simplify the different paths out of #include.
28d31335 PP: #include: add names to error messages, so that lexical analysis can be tested.
64285c9e Non-functional: Very minor clean up.
acb9076a Merge pull request #650 from steve-lunarg/lvalue-swizzle-fix
085b8334 HLSL: Fix issue #658: Don't adopt initializer constness from declaration.
bf9a2f30 Merge pull request #648 from steve-lunarg/type-identifiers
ddfbbe26 Merge pull request #632 from steve-lunarg/structure-splitting
5abd308e Merge pull request #659 from steve-lunarg/d3dcolortoubyte4
c4ed9500 Merge pull request #647 from steve-lunarg/default-fn-params
7ea7ff4c Add EOpD3DCOLORtoUBYTE4 decomposition
affc2667 PP: Recognize <> style #include header names. I.e., #include <header-name>.
cd6829ba HLSL: allow destination swizzles when writing RWTexture/RWBuffer objects.
faa720f1 PP: Fix issue #426, recover from bad-source macro expansion.
bc5196c0 SPV: Fix issue #369, don't support gl_NumSamples -> SPIR-V.
f37f4d23 HLSL: Fix issue #646: map SV_DispatchThreadID -> GlobalInvocationID.
84e59203 updates overload handling to be more careful when allowing overloads over texture types
aa6d5629 HLSL: Handle const with no initializer. Fixes issue #651.
53864846 HLSL: Support empty {} initializers for arrays and scalars.
26d31453 HLSL default function parameters
5ca85ad9 HLSL: allow scalar type keywords as identifiers, and add half type support.
132d3318 HLSL: struct splitting: assignments of hierarchical split types
a2e75310 HLSL: inter-stage structure splitting.
807a0d9e Merge pull request #640 from chaoc/modify-shader-ballot
f48faec3 PP: Non-functional: Make a proper class out of the atom <-> string mapping.
f200da86 Modify shader ballot extension by adding OpSubgroupReadInvocationKHR
224b1f73 PP: Support operator creation with token pasting.
0c4b7c93 PP: Rationalize names of tokens.
2dcdda92 Merge pull request #641 from chaoc/passthrough
906b0a3e Merge pull request #644 from hrydgard/override-warning-fixes
9a931b39 Fix a large number of warnings about inconsistent usage of 'override' produced by clang
907aabb6 PP: Non-functional: Only use string <-> atom mapping when needed.
54af2de7 PP: Non-functional: rationalize TPpToken.
1fbb9c14 PP: Non-functional: clean up, simplify, completely identical operation.
6e5acae1 Add support for SPV_NV_geometry_shader_passthrough
3c264ce8 Merge pull request #639 from hrydgard/master
7a21a115 Merge pull request #638 from chaoc/master
b8387c87 PP: Non-functional: Remove custom allocator and related improvements.
868746ad Add option to make it possible not to build the executables
bfff871d PP: Add missing i64val code.
0ad6a4e6 Add support for SPV_NV_sample_mask_override_coverage
7583ed73 Merge remote-tracking branch 'refs/remotes/KhronosGroup/master'
432576fd Build: Fix #633, add missing overrides.
0955b1cb Merge pull request #637 from KhronosGroup/token-paste
e6cbc5b1 Merge pull request #624 from steve-lunarg/remapper-strip-removed
4ba444b6 Merge pull request #635 from steve-lunarg/sample-fix-2
059d46ee Merge pull request #625 from jbeich/gcc6
d485e0b7 PP: Implement token pasting for PP identifiers.
a64ed3eb HLSL: allow "sample" in expressions.
abf50579 Fix comment typo.
1e275c84 HLSL: More robust handling of bad shader input, catching a few more things.
dca93d6b Merge pull request #629 from null77/fix-unicode
cebd97eb Change unicode dash to ASCII.
95abd284 Merge pull request #628 from null77/fix-cast-warn
3ec327c5 Fix size_t to int cast warnings.
20f01e7f Fix last commit; EOptionKeepUncalled incorrect enum bug.
297754cf Remapper: remove debug info for IDs stripped in other passes
906cc218 Linker: Eliminate uncalled functions, because they can be ill-defined.
bf6d7f43 Linker: Track the mangled entry-point name along with the non-mangled one.
4b6ce415 GLSL Linker: Track entry point across compilation units.
1bcb254a Add missing header and drop duplicate one
6a60c2f9 Linker: Walk the call graph to report an error on missing bodies.
e795cc91 Merge pull request #621 from steve-lunarg/recursive-flattening
302e619e Merge pull request #619 from steve-lunarg/opcode-specific-promote
56b45476 Merge pull request #620 from fjhenigman/foo
a2b01a0d HLSL: Recursive composite flattening
05f75142 HLSL: opcode specific promotion rules for interlocked ops
8dcf2029 GLSL: Always define TShader::~Includer().
b56f4ac7 Merge pull request #615 from dneto0/consistent-location-for-test-files
9df6aa53 GLSL: Allow desktop shaders to call functions from outside main().
ec2e27ad Merge pull request #613 from Corillian/hlslpreprocess
5cc92c56 runtests should refer to test files in current directory
205dc4e4 Fixed processing #include's when preprocessing HLSL
fb06e955 Don't print the "Linked stage" message unless the AST is being dumped.
09512cbd Merge branch 'steve-lunarg-intrinsic-promotion'
21b11f4c Merge branch 'intrinsic-promotion' of https://github.com/steve-lunarg/glslang into steve-lunarg-intrinsic-promotion
41be1cbe Merge pull request #604 from steve-lunarg/entry-rename-2
f1e0c871 allow renaming of shader entry point when creating SPIR-V
ef33ec09 HLSL: add intrinsic function implicit promotions

Change-Id: I295258005685b14d53ddbc2d516cb7d69e9b20cd
Testing: checkbuild.py on Linux, unit tests on Windows
diff --git a/.appveyor.yml b/.appveyor.yml
index 4463fa6..55ce618 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -40,7 +40,7 @@
 
 build_script:
   - mkdir build && cd build
-  - cmake .. -DCMAKE_INSTALL_PREFIX=install
+  - cmake -G "Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=install ..
   - cmake --build . --config %CONFIGURATION% --target install
 
 test_script:
diff --git a/.gitattributes b/.gitattributes
old mode 100755
new mode 100644
diff --git a/.travis.yml b/.travis.yml
old mode 100755
new mode 100644
diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 0000000..91bb4bb
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,165 @@
+# Copyright (C) 2018 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import("//build_overrides/glslang.gni")
+
+spirv_tools_dir = glslang_spirv_tools_dir
+
+config("glslang_public") {
+  include_dirs = [ "." ]
+}
+
+source_set("glslang_sources") {
+  sources = [
+    "OGLCompilersDLL/InitializeDll.cpp",
+    "OGLCompilersDLL/InitializeDll.h",
+    "SPIRV/GLSL.ext.EXT.h",
+    "SPIRV/GLSL.ext.KHR.h",
+    "SPIRV/GLSL.std.450.h",
+    "SPIRV/GlslangToSpv.cpp",
+    "SPIRV/GlslangToSpv.h",
+    "SPIRV/InReadableOrder.cpp",
+    "SPIRV/Logger.cpp",
+    "SPIRV/Logger.h",
+    "SPIRV/SPVRemapper.cpp",
+    "SPIRV/SPVRemapper.h",
+    "SPIRV/SpvBuilder.cpp",
+    "SPIRV/SpvBuilder.h",
+    "SPIRV/SpvPostProcess.cpp",
+    "SPIRV/SpvPostProcess.h",
+    "SPIRV/bitutils.h",
+    "SPIRV/disassemble.cpp",
+    "SPIRV/disassemble.h",
+    "SPIRV/doc.cpp",
+    "SPIRV/doc.h",
+    "SPIRV/hex_float.h",
+    "SPIRV/spirv.hpp",
+    "SPIRV/spvIR.h",
+    "glslang/GenericCodeGen/CodeGen.cpp",
+    "glslang/GenericCodeGen/Link.cpp",
+    "glslang/Include/BaseTypes.h",
+    "glslang/Include/Common.h",
+    "glslang/Include/ConstantUnion.h",
+    "glslang/Include/InfoSink.h",
+    "glslang/Include/InitializeGlobals.h",
+    "glslang/Include/PoolAlloc.h",
+    "glslang/Include/ResourceLimits.h",
+    "glslang/Include/ShHandle.h",
+    "glslang/Include/Types.h",
+    "glslang/Include/arrays.h",
+    "glslang/Include/intermediate.h",
+    "glslang/Include/revision.h",
+    "glslang/MachineIndependent/Constant.cpp",
+    "glslang/MachineIndependent/InfoSink.cpp",
+    "glslang/MachineIndependent/Initialize.cpp",
+    "glslang/MachineIndependent/Initialize.h",
+    "glslang/MachineIndependent/IntermTraverse.cpp",
+    "glslang/MachineIndependent/Intermediate.cpp",
+    "glslang/MachineIndependent/LiveTraverser.h",
+    "glslang/MachineIndependent/ParseContextBase.cpp",
+    "glslang/MachineIndependent/ParseHelper.cpp",
+    "glslang/MachineIndependent/ParseHelper.h",
+    "glslang/MachineIndependent/PoolAlloc.cpp",
+    "glslang/MachineIndependent/RemoveTree.cpp",
+    "glslang/MachineIndependent/RemoveTree.h",
+    "glslang/MachineIndependent/Scan.cpp",
+    "glslang/MachineIndependent/Scan.h",
+    "glslang/MachineIndependent/ScanContext.h",
+    "glslang/MachineIndependent/ShaderLang.cpp",
+    "glslang/MachineIndependent/SymbolTable.cpp",
+    "glslang/MachineIndependent/SymbolTable.h",
+    "glslang/MachineIndependent/Versions.cpp",
+    "glslang/MachineIndependent/Versions.h",
+    "glslang/MachineIndependent/attribute.cpp",
+    "glslang/MachineIndependent/attribute.h",
+    "glslang/MachineIndependent/gl_types.h",
+    "glslang/MachineIndependent/glslang.y",
+    "glslang/MachineIndependent/glslang_tab.cpp",
+    "glslang/MachineIndependent/glslang_tab.cpp.h",
+    "glslang/MachineIndependent/intermOut.cpp",
+    "glslang/MachineIndependent/iomapper.cpp",
+    "glslang/MachineIndependent/iomapper.h",
+    "glslang/MachineIndependent/limits.cpp",
+    "glslang/MachineIndependent/linkValidate.cpp",
+    "glslang/MachineIndependent/localintermediate.h",
+    "glslang/MachineIndependent/parseConst.cpp",
+    "glslang/MachineIndependent/parseVersions.h",
+    "glslang/MachineIndependent/preprocessor/Pp.cpp",
+    "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
+    "glslang/MachineIndependent/preprocessor/PpContext.cpp",
+    "glslang/MachineIndependent/preprocessor/PpContext.h",
+    "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
+    "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
+    "glslang/MachineIndependent/preprocessor/PpTokens.h",
+    "glslang/MachineIndependent/propagateNoContraction.cpp",
+    "glslang/MachineIndependent/propagateNoContraction.h",
+    "glslang/MachineIndependent/reflection.cpp",
+    "glslang/MachineIndependent/reflection.h",
+    "glslang/OSDependent/osinclude.h",
+    "glslang/Public/ShaderLang.h",
+  ]
+
+  defines = []
+  if (is_win) {
+    sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
+    defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
+  } else {
+    sources += [ "glslang/OSDependent/Unix/ossource.cpp" ]
+    defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
+  }
+
+  if (is_clang) {
+    cflags_cc = [
+      "-Wno-implicit-fallthrough",
+      "-Wno-ignored-qualifiers",
+      "-Wno-unused-variable",
+    ]
+  }
+
+  deps = [
+    "${spirv_tools_dir}:spvtools_opt",
+  ]
+}
+
+static_library("glslang_static") {
+  public_configs = [ ":glslang_public" ]
+
+  deps = [
+    ":glslang_sources",
+  ]
+  complete_static_lib = true
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
+}
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a869c2..a4d7bcd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,7 @@
 if(NOT ${SKIP_GLSLANG_INSTALL})
   set(ENABLE_GLSLANG_INSTALL ON)
 endif()
+option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON)
 
 option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON)
 option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
@@ -35,6 +36,14 @@
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
 endif()
 
+option(USE_CCACHE "Use ccache" OFF)
+if(USE_CCACHE)
+    find_program(CCACHE_FOUND ccache)
+    if(CCACHE_FOUND)
+        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+    endif(CCACHE_FOUND)
+endif()
+
 project(glslang)
 # make testing optional
 include(CTest)
@@ -52,7 +61,7 @@
 endif(ENABLE_HLSL)
 
 if(WIN32)
-    set(CMAKE_DEBUG_POSTFIX "d")
+    set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Adds a postfix for debug-built libraries.")
     if(MSVC)
         include(ChooseMSVCCRT.cmake)
     endif(MSVC)
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index 402b4d6..544081d
--- a/README.md
+++ b/README.md
@@ -105,8 +105,8 @@
 For building on Linux:
 
 ```bash
-cmake -DCMAKE_BUILD_TYPE={Debug|Release|RelWithDebInfo} \
-      -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE_DIR
+cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE_DIR
+# "Release" (for CMAKE_BUILD_TYPE) could also be "Debug" or "RelWithDebInfo"
 ```
 
 For building on Windows:
@@ -125,8 +125,8 @@
 make -j4 install
 
 # for Windows:
-cmake --build . --config {Release|Debug|MinSizeRel|RelWithDebInfo} \
-      --target install
+cmake --build . --config Release --target install
+# "Release" (for --config) could also be "Debug", "MinSizeRel", or "RelWithDebInfo"
 ```
 
 If using MSVC, after running CMake to configure, use the
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
old mode 100755
new mode 100644
index bf2be16..1997e74
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -3,7 +3,9 @@
     InReadableOrder.cpp
     Logger.cpp
     SpvBuilder.cpp
+    SpvPostProcess.cpp
     doc.cpp
+    SpvTools.cpp
     disassemble.cpp)
 
 set(SPVREMAP_SOURCES
@@ -22,6 +24,7 @@
     SpvBuilder.h
     spvIR.h
     doc.h
+    SpvTools.h
     disassemble.h)
 
 set(SPVREMAP_HEADERS
@@ -45,13 +48,17 @@
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_include_directories(SPIRV PUBLIC ..)
 
-add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
-set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
-set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
+if (ENABLE_SPVREMAPPER)
+    add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
+    set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
+    set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
+endif()
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(SPIRV PROPERTIES PREFIX "")
-    set_target_properties(SPVRemapper PROPERTIES PREFIX "")
+    if (ENABLE_SPVREMAPPER)
+        set_target_properties(SPVRemapper PROPERTIES PREFIX "")
+    endif()
 endif()
 
 if(ENABLE_OPT)
@@ -72,11 +79,20 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS SPIRV SPVRemapper
+        if (ENABLE_SPVREMAPPER)
+            install(TARGETS SPVRemapper
+                    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+                    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        endif()
+        install(TARGETS SPIRV
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
     else()
-        install(TARGETS SPIRV SPVRemapper
+        if (ENABLE_SPVREMAPPER)
+            install(TARGETS SPVRemapper
+                    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        endif()
+        install(TARGETS SPIRV
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
 
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
old mode 100755
new mode 100644
index ec0c06d..16b0d9c
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -39,5 +39,6 @@
 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";
+static const char* const E_SPV_KHR_vulkan_memory_model          = "SPV_KHR_vulkan_memory_model";
 
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h
index 148d4b4..6abc469 100644
--- a/SPIRV/GLSL.ext.NV.h
+++ b/SPIRV/GLSL.ext.NV.h
@@ -33,7 +33,7 @@
 enum Capability;
 
 static const int GLSLextNVVersion = 100;
-static const int GLSLextNVRevision = 5;
+static const int GLSLextNVRevision = 11;
 
 //SPV_NV_sample_mask_override_coverage
 const char* const E_SPV_NV_sample_mask_override_coverage = "SPV_NV_sample_mask_override_coverage";
@@ -54,4 +54,22 @@
 //SPV_NV_shader_subgroup_partitioned
 const char* const E_SPV_NV_shader_subgroup_partitioned = "SPV_NV_shader_subgroup_partitioned";
 
-#endif  // #ifndef GLSLextNV_H
\ No newline at end of file
+//SPV_NV_fragment_shader_barycentric
+const char* const E_SPV_NV_fragment_shader_barycentric = "SPV_NV_fragment_shader_barycentric";
+
+//SPV_NV_compute_shader_derivatives
+const char* const E_SPV_NV_compute_shader_derivatives = "SPV_NV_compute_shader_derivatives";
+
+//SPV_NV_shader_image_footprint
+const char* const E_SPV_NV_shader_image_footprint = "SPV_NV_shader_image_footprint";
+
+//SPV_NV_mesh_shader
+const char* const E_SPV_NV_mesh_shader = "SPV_NV_mesh_shader";
+
+//SPV_NVX_raytracing
+const char* const E_SPV_NVX_raytracing = "SPV_NVX_raytracing";
+
+//SPV_NV_shading_rate
+const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate";
+
+#endif  // #ifndef GLSLextNV_H
diff --git a/SPIRV/GLSL.std.450.h b/SPIRV/GLSL.std.450.h
old mode 100755
new mode 100644
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index d5fb1ac..f0040b8 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -54,15 +54,6 @@
 #endif
 }
 
-#if ENABLE_OPT
-    #include "spirv-tools/optimizer.hpp"
-    #include "message.h"
-#endif
-
-#if ENABLE_OPT
-using namespace spvtools;
-#endif
-
 // Glslang includes
 #include "../glslang/MachineIndependent/localintermediate.h"
 #include "../glslang/MachineIndependent/SymbolTable.h"
@@ -138,6 +129,10 @@
     spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier);
+    spv::Builder::AccessChain::CoherentFlags TranslateCoherent(const glslang::TType& type);
+    spv::MemoryAccessMask TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
+    spv::ImageOperandsMask TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
+    spv::Scope TranslateMemoryScope(const spv::Builder::AccessChain::CoherentFlags &coherentFlags);
     spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
     spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const;
@@ -199,6 +194,9 @@
     spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
+#ifdef NV_EXTENSIONS
+    void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier);
+#endif
     spv::Id createSpvConstant(const glslang::TIntermTyped&);
     spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
@@ -277,6 +275,16 @@
     case EShLangGeometry:         return spv::ExecutionModelGeometry;
     case EShLangFragment:         return spv::ExecutionModelFragment;
     case EShLangCompute:          return spv::ExecutionModelGLCompute;
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:         return spv::ExecutionModelRayGenerationNVX;
+    case EShLangIntersectNV:      return spv::ExecutionModelIntersectionNVX;
+    case EShLangAnyHitNV:         return spv::ExecutionModelAnyHitNVX;
+    case EShLangClosestHitNV:     return spv::ExecutionModelClosestHitNVX;
+    case EShLangMissNV:           return spv::ExecutionModelMissNVX;
+    case EShLangCallableNV:       return spv::ExecutionModelCallableNVX;
+    case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
+    case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
+#endif
     default:
         assert(0);
         return spv::ExecutionModelFragment;
@@ -326,6 +334,11 @@
         case glslang::EvqBuffer:       return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
         case glslang::EvqVaryingIn:    return spv::DecorationBlock;
         case glslang::EvqVaryingOut:   return spv::DecorationBlock;
+#ifdef NV_EXTENSIONS
+        case glslang::EvqPayloadNV:    return spv::DecorationBlock;
+        case glslang::EvqPayloadInNV:  return spv::DecorationBlock;
+        case glslang::EvqHitAttrNV:    return spv::DecorationBlock;
+#endif
         default:
             assert(0);
             break;
@@ -336,13 +349,15 @@
 }
 
 // Translate glslang type to SPIR-V memory decorations.
-void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory)
+void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory, bool useVulkanMemoryModel)
 {
-    if (qualifier.coherent)
-        memory.push_back(spv::DecorationCoherent);
-    if (qualifier.volatil) {
-        memory.push_back(spv::DecorationVolatile);
-        memory.push_back(spv::DecorationCoherent);
+    if (!useVulkanMemoryModel) {
+        if (qualifier.coherent)
+            memory.push_back(spv::DecorationCoherent);
+        if (qualifier.volatil) {
+            memory.push_back(spv::DecorationVolatile);
+            memory.push_back(spv::DecorationCoherent);
+        }
     }
     if (qualifier.restrict)
         memory.push_back(spv::DecorationRestrict);
@@ -382,8 +397,22 @@
                 }
             case glslang::EvqVaryingIn:
             case glslang::EvqVaryingOut:
-                assert(type.getQualifier().layoutPacking == glslang::ElpNone);
+                if (type.getQualifier().isTaskMemory()) {
+                    switch (type.getQualifier().layoutPacking) {
+                    case glslang::ElpShared:  return spv::DecorationGLSLShared;
+                    case glslang::ElpPacked:  return spv::DecorationGLSLPacked;
+                    default: break;
+                    }
+                } else {
+                    assert(type.getQualifier().layoutPacking == glslang::ElpNone);
+                }
                 return spv::DecorationMax;
+#ifdef NV_EXTENSIONS
+            case glslang::EvqPayloadNV:
+            case glslang::EvqPayloadInNV:
+            case glslang::EvqHitAttrNV:
+                return spv::DecorationMax;
+#endif
             default:
                 assert(0);
                 return spv::DecorationMax;
@@ -459,6 +488,105 @@
         return spv::DecorationMax;
 }
 
+spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+{
+    if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage) {
+        return spv::MemoryAccessMaskNone;
+    }
+    spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone;
+    if (coherentFlags.volatil ||
+        coherentFlags.coherent ||
+        coherentFlags.devicecoherent ||
+        coherentFlags.queuefamilycoherent ||
+        coherentFlags.workgroupcoherent ||
+        coherentFlags.subgroupcoherent) {
+        mask = mask | spv::MemoryAccessMakePointerAvailableKHRMask |
+                      spv::MemoryAccessMakePointerVisibleKHRMask;
+    }
+    if (coherentFlags.nonprivate) {
+        mask = mask | spv::MemoryAccessNonPrivatePointerKHRMask;
+    }
+    if (coherentFlags.volatil) {
+        mask = mask | spv::MemoryAccessVolatileMask;
+    }
+    if (mask != spv::MemoryAccessMaskNone) {
+        builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+    }
+    return mask;
+}
+
+spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+{
+    if (!glslangIntermediate->usingVulkanMemoryModel()) {
+        return spv::ImageOperandsMaskNone;
+    }
+    spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
+    if (coherentFlags.volatil ||
+        coherentFlags.coherent ||
+        coherentFlags.devicecoherent ||
+        coherentFlags.queuefamilycoherent ||
+        coherentFlags.workgroupcoherent ||
+        coherentFlags.subgroupcoherent) {
+        mask = mask | spv::ImageOperandsMakeTexelAvailableKHRMask |
+                      spv::ImageOperandsMakeTexelVisibleKHRMask;
+    }
+    if (coherentFlags.nonprivate) {
+        mask = mask | spv::ImageOperandsNonPrivateTexelKHRMask;
+    }
+    if (coherentFlags.volatil) {
+        mask = mask | spv::ImageOperandsVolatileTexelKHRMask;
+    }
+    if (mask != spv::ImageOperandsMaskNone) {
+        builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+    }
+    return mask;
+}
+
+spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCoherent(const glslang::TType& type)
+{
+    spv::Builder::AccessChain::CoherentFlags flags;
+    flags.coherent = type.getQualifier().coherent;
+    flags.devicecoherent = type.getQualifier().devicecoherent;
+    flags.queuefamilycoherent = type.getQualifier().queuefamilycoherent;
+    // shared variables are implicitly workgroupcoherent in GLSL.
+    flags.workgroupcoherent = type.getQualifier().workgroupcoherent ||
+                              type.getQualifier().storage == glslang::EvqShared;
+    flags.subgroupcoherent = type.getQualifier().subgroupcoherent;
+    // *coherent variables are implicitly nonprivate in GLSL
+    flags.nonprivate = type.getQualifier().nonprivate ||
+                       type.getQualifier().subgroupcoherent ||
+                       type.getQualifier().workgroupcoherent ||
+                       type.getQualifier().queuefamilycoherent ||
+                       type.getQualifier().devicecoherent ||
+                       type.getQualifier().coherent;
+    flags.volatil = type.getQualifier().volatil;
+    flags.isImage = type.getBasicType() == glslang::EbtSampler;
+    return flags;
+}
+
+spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(const spv::Builder::AccessChain::CoherentFlags &coherentFlags)
+{
+    spv::Scope scope;
+    if (coherentFlags.coherent) {
+        // coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model
+        scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
+    } else if (coherentFlags.devicecoherent) {
+        scope = spv::ScopeDevice;
+    } else if (coherentFlags.queuefamilycoherent) {
+        scope = spv::ScopeQueueFamilyKHR;
+    } else if (coherentFlags.workgroupcoherent) {
+        scope = spv::ScopeWorkgroup;
+    } else if (coherentFlags.subgroupcoherent) {
+        scope = spv::ScopeSubgroup;
+    } else {
+        scope = spv::ScopeMax;
+    }
+    if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) {
+        builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+    }
+    return scope;
+}
+
 // Translate a glslang built-in variable to a SPIR-V built in decoration.  Also generate
 // associated capabilities when required.  For some built-in variables, a capability
 // is generated only when using the variable in an executable instruction, but not when
@@ -523,6 +651,11 @@
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
+#ifdef NV_EXTENSIONS
+        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+            return spv::BuiltInLayer;
+        }
+#endif
         builder.addCapability(spv::CapabilityGeometry);
         if (glslangIntermediate->getStage() == EShLangVertex ||
             glslangIntermediate->getStage() == EShLangTessControl ||
@@ -731,6 +864,66 @@
         builder.addExtension(spv::E_SPV_EXT_fragment_fully_covered);
         builder.addCapability(spv::CapabilityFragmentFullyCoveredEXT);
         return spv::BuiltInFullyCoveredEXT;
+    case glslang::EbvFragmentSizeNV:
+        builder.addExtension(spv::E_SPV_NV_shading_rate);
+        builder.addCapability(spv::CapabilityShadingRateNV);
+        return spv::BuiltInFragmentSizeNV;
+    case glslang::EbvInvocationsPerPixelNV:
+        builder.addExtension(spv::E_SPV_NV_shading_rate);
+        builder.addCapability(spv::CapabilityShadingRateNV);
+        return spv::BuiltInInvocationsPerPixelNV;
+
+    // raytracing
+    case glslang::EbvLaunchIdNV:
+        return spv::BuiltInLaunchIdNVX;
+    case glslang::EbvLaunchSizeNV:
+        return spv::BuiltInLaunchSizeNVX;
+    case glslang::EbvWorldRayOriginNV:
+        return spv::BuiltInWorldRayOriginNVX;
+    case glslang::EbvWorldRayDirectionNV:
+        return spv::BuiltInWorldRayDirectionNVX;
+    case glslang::EbvObjectRayOriginNV:
+        return spv::BuiltInObjectRayOriginNVX;
+    case glslang::EbvObjectRayDirectionNV:
+        return spv::BuiltInObjectRayDirectionNVX;
+    case glslang::EbvRayTminNV:
+        return spv::BuiltInRayTminNVX;
+    case glslang::EbvRayTmaxNV:
+        return spv::BuiltInRayTmaxNVX;
+    case glslang::EbvInstanceCustomIndexNV:
+        return spv::BuiltInInstanceCustomIndexNVX;
+    case glslang::EbvHitTNV:
+        return spv::BuiltInHitTNVX;
+    case glslang::EbvHitKindNV:
+        return spv::BuiltInHitKindNVX;
+    case glslang::EbvObjectToWorldNV:
+        return spv::BuiltInObjectToWorldNVX;
+    case glslang::EbvWorldToObjectNV:
+        return spv::BuiltInWorldToObjectNVX;
+    case glslang::EbvBaryCoordNV:
+        builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
+        builder.addCapability(spv::CapabilityFragmentBarycentricNV);
+        return spv::BuiltInBaryCoordNV;
+    case glslang::EbvBaryCoordNoPerspNV:
+        builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
+        builder.addCapability(spv::CapabilityFragmentBarycentricNV);
+        return spv::BuiltInBaryCoordNoPerspNV;
+     case glslang::EbvTaskCountNV:
+        return spv::BuiltInTaskCountNV;
+     case glslang::EbvPrimitiveCountNV:
+        return spv::BuiltInPrimitiveCountNV;
+     case glslang::EbvPrimitiveIndicesNV:
+        return spv::BuiltInPrimitiveIndicesNV;
+     case glslang::EbvClipDistancePerViewNV:
+        return spv::BuiltInClipDistancePerViewNV;
+     case glslang::EbvCullDistancePerViewNV:
+        return spv::BuiltInCullDistancePerViewNV;
+     case glslang::EbvLayerPerViewNV:
+        return spv::BuiltInLayerPerViewNV;
+     case glslang::EbvMeshViewCountNV:
+        return spv::BuiltInMeshViewCountNV;
+     case glslang::EbvMeshViewIndicesNV:
+        return spv::BuiltInMeshViewIndicesNV;
 #endif 
     default:
         return spv::BuiltInMax;
@@ -887,6 +1080,10 @@
     if (type.getQualifier().isUniformOrBuffer()) {
         if (type.getQualifier().layoutPushConstant)
             return spv::StorageClassPushConstant;
+#ifdef NV_EXTENSIONS
+        if (type.getQualifier().layoutShaderRecordNV)
+            return spv::StorageClassShaderRecordBufferNVX;
+#endif
         if (type.getBasicType() == glslang::EbtBlock)
             return spv::StorageClassUniform;
         return spv::StorageClassUniformConstant;
@@ -897,6 +1094,11 @@
     case glslang::EvqGlobal:        return spv::StorageClassPrivate;
     case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
     case glslang::EvqTemporary:     return spv::StorageClassFunction;
+#ifdef NV_EXTENSIONS
+    case glslang::EvqPayloadNV:     return spv::StorageClassRayPayloadNVX;
+    case glslang::EvqPayloadInNV:   return spv::StorageClassIncomingRayPayloadNVX;
+    case glslang::EvqHitAttrNV:     return spv::StorageClassHitAttributeNVX;
+#endif
     default:
         assert(0);
         break;
@@ -911,6 +1113,7 @@
 {
     if (indexType.getQualifier().isNonUniform()) {
         // deal with an asserted non-uniform index
+        // SPV_EXT_descriptor_indexing already added in TranslateNonUniformDecoration
         if (baseType.getBasicType() == glslang::EbtSampler) {
             if (baseType.getQualifier().hasAttachment())
                 builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT);
@@ -931,12 +1134,16 @@
     } else {
         // assume a dynamically uniform index
         if (baseType.getBasicType() == glslang::EbtSampler) {
-            if (baseType.getQualifier().hasAttachment())
+            if (baseType.getQualifier().hasAttachment()) {
+                builder.addExtension("SPV_EXT_descriptor_indexing");
                 builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT);
-            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+            } else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer) {
+                builder.addExtension("SPV_EXT_descriptor_indexing");
                 builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
-            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+            } else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer) {
+                builder.addExtension("SPV_EXT_descriptor_indexing");
                 builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
+            }
         }
     }
 }
@@ -947,7 +1154,11 @@
 {
     // uniform and buffer blocks are included, unless it is a push_constant
     if (type.getBasicType() == glslang::EbtBlock)
-        return type.getQualifier().isUniformOrBuffer() && ! type.getQualifier().layoutPushConstant;
+        return type.getQualifier().isUniformOrBuffer() &&
+#ifdef NV_EXTENSIONS
+        ! type.getQualifier().layoutShaderRecordNV &&
+#endif
+        ! type.getQualifier().layoutPushConstant;
 
     // non block...
     // basically samplerXXX/subpass/sampler/texture are all included
@@ -983,6 +1194,16 @@
         child.sample = true;
     if (parent.coherent)
         child.coherent = true;
+    if (parent.devicecoherent)
+        child.devicecoherent = true;
+    if (parent.queuefamilycoherent)
+        child.queuefamilycoherent = true;
+    if (parent.workgroupcoherent)
+        child.workgroupcoherent = true;
+    if (parent.subgroupcoherent)
+        child.subgroupcoherent = true;
+    if (parent.nonprivate)
+        child.nonprivate = true;
     if (parent.volatil)
         child.volatil = true;
     if (parent.restrict)
@@ -991,6 +1212,14 @@
         child.readonly = true;
     if (parent.writeonly)
         child.writeonly = true;
+#ifdef NV_EXTENSIONS
+    if (parent.perPrimitiveNV)
+        child.perPrimitiveNV = true;
+    if (parent.perViewNV)
+        child.perViewNV = true;
+    if (parent.perTaskNV)
+        child.perTaskNV = true;
+#endif
 }
 
 bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier)
@@ -1049,7 +1278,12 @@
         builder.setSourceText(text);
     }
     stdBuiltins = builder.import("GLSL.std.450");
-    builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450);
+    if (glslangIntermediate->usingVulkanMemoryModel()) {
+        builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelVulkanKHR);
+        builder.addExtension(spv::E_SPV_KHR_vulkan_memory_model);
+    } else {
+        builder.setMemoryModel(spv::AddressingModelLogical, spv::MemoryModelGLSL450);
+    }
     shaderEntry = builder.makeEntryPoint(glslangIntermediate->getEntryPointName().c_str());
     entryPoint = builder.addEntryPoint(executionModel, shaderEntry, glslangIntermediate->getEntryPointName().c_str());
 
@@ -1176,8 +1410,52 @@
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
                                                                            glslangIntermediate->getLocalSize(1),
                                                                            glslangIntermediate->getLocalSize(2));
+#ifdef NV_EXTENSIONS
+        if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
+            builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
+            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+        } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) {
+            builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV);
+            builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
+        }
+#endif
         break;
 
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+    case EShLangCallableNV:
+        builder.addCapability(spv::CapabilityRaytracingNVX);
+        builder.addExtension("SPV_NVX_raytracing");
+        break;
+    case EShLangTaskNV:
+    case EShLangMeshNV:
+        builder.addCapability(spv::CapabilityMeshShadingNV);
+        builder.addExtension(spv::E_SPV_NV_mesh_shader);
+        builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+                                                                           glslangIntermediate->getLocalSize(1),
+                                                                           glslangIntermediate->getLocalSize(2));
+        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV, glslangIntermediate->getPrimitives());
+
+            switch (glslangIntermediate->getOutputPrimitive()) {
+            case glslang::ElgPoints:        mode = spv::ExecutionModeOutputPoints;      break;
+            case glslang::ElgLines:         mode = spv::ExecutionModeOutputLinesNV;     break;
+            case glslang::ElgTriangles:     mode = spv::ExecutionModeOutputTrianglesNV; break;
+            default:                        mode = spv::ExecutionModeMax;               break;
+            }
+            if (mode != spv::ExecutionModeMax)
+                builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
+        }
+        break;
+#endif
+
     default:
         break;
     }
@@ -1186,6 +1464,7 @@
 // Finish creating SPV, after the traversal is complete.
 void TGlslangToSpvTraverser::finishSpv()
 {
+    // Finish the entry point function
     if (! entryPointTerminated) {
         builder.setBuildPoint(shaderEntry->getLastBlock());
         builder.leaveFunction();
@@ -1195,7 +1474,9 @@
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
-    builder.eliminateDeadDecorations();
+    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // based on the resulting SPIR-V.
+    builder.postProcess();
 }
 
 // Write the SPV into 'out'.
@@ -1352,7 +1633,7 @@
 
             // store the result
             builder.setAccessChain(lValue);
-            multiTypeStore(node->getType(), rValue);
+            multiTypeStore(node->getLeft()->getType(), rValue);
 
             // assignments are expressions having an rValue after they are evaluated...
             builder.clearAccessChain();
@@ -1389,7 +1670,7 @@
                 }
 
                 // normal case for indexing array or structure or block
-                builder.accessChainPush(builder.makeIntConstant(spvIndex));
+                builder.accessChainPush(builder.makeIntConstant(spvIndex), TranslateCoherent(node->getLeft()->getType()));
 
                 // Add capabilities here for accessing PointSize and clip/cull distance.
                 // We have deferred generation of associated capabilities until now.
@@ -1425,7 +1706,7 @@
             if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector())
                 builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()));
             else
-                builder.accessChainPush(index);
+                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()));
         }
         return false;
     case glslang::EOpVectorSwizzle:
@@ -1659,11 +1940,11 @@
         builder.setAccessChainRValue(result);
 
         return false;
+    } else if (node->getOp() == glslang::EOpImageStore ||
 #ifdef AMD_EXTENSIONS
-    } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
-#else
-    } else if (node->getOp() == glslang::EOpImageStore) {
+        node->getOp() == glslang::EOpImageStoreLod ||
 #endif
+        node->getOp() == glslang::EOpImageAtomicStore) {
         // "imageStore" is a special case, which has no result
         return false;
     }
@@ -1953,6 +2234,10 @@
         // These all have 0 operands and will naturally finish up in the code below for 0 operands
         break;
 
+    case glslang::EOpAtomicStore:
+        noReturnValue = true;
+        // fallthrough
+    case glslang::EOpAtomicLoad:
     case glslang::EOpAtomicAdd:
     case glslang::EOpAtomicMin:
     case glslang::EOpAtomicMax:
@@ -1978,6 +2263,15 @@
         atomic = true;
         break;
 
+#ifdef NV_EXTENSIONS
+    case glslang::EOpIgnoreIntersectionNV:
+    case glslang::EOpTerminateRayNV:
+    case glslang::EOpTraceNV:
+    case glslang::EOpWritePackedPrimitiveIndices4x8NV:
+        noReturnValue = true;
+        break;
+#endif
+
     default:
         break;
     }
@@ -2051,6 +2345,8 @@
         case glslang::EOpAtomicXor:
         case glslang::EOpAtomicExchange:
         case glslang::EOpAtomicCompSwap:
+        case glslang::EOpAtomicLoad:
+        case glslang::EOpAtomicStore:
         case glslang::EOpAtomicCounterAdd:
         case glslang::EOpAtomicCounterSubtract:
         case glslang::EOpAtomicCounterMin:
@@ -2604,11 +2900,6 @@
         spvType = builder.makeFloatType(64);
         break;
     case glslang::EbtFloat16:
-        builder.addCapability(spv::CapabilityFloat16);
-#if AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
         spvType = builder.makeFloatType(16);
         break;
     case glslang::EbtBool:
@@ -2619,28 +2910,16 @@
         else
             spvType = builder.makeBoolType();
         break;
-   case glslang::EbtInt8:
-        builder.addCapability(spv::CapabilityInt8);
+    case glslang::EbtInt8:
         spvType = builder.makeIntType(8);
         break;
     case glslang::EbtUint8:
-        builder.addCapability(spv::CapabilityInt8);
         spvType = builder.makeUintType(8);
         break;
-   case glslang::EbtInt16:
-        builder.addCapability(spv::CapabilityInt16);
-#ifdef AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
+    case glslang::EbtInt16:
         spvType = builder.makeIntType(16);
         break;
     case glslang::EbtUint16:
-        builder.addCapability(spv::CapabilityInt16);
-#ifdef AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
         spvType = builder.makeUintType(16);
         break;
     case glslang::EbtInt:
@@ -2659,6 +2938,11 @@
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
         break;
+#ifdef NV_EXTENSIONS
+    case glslang::EbtAccStructNV:
+        spvType = builder.makeAccelerationStructureNVType();
+        break;
+#endif
     case glslang::EbtSampler:
         {
             const glslang::TSampler& sampler = type.getSampler();
@@ -2765,23 +3049,28 @@
 //
 bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
 {
+#ifdef NV_EXTENSIONS
     auto& extensions = glslangIntermediate->getRequestedExtensions();
 
-    if (member.getFieldName() == "gl_ViewportMask" &&
-        extensions.find("GL_NV_viewport_array2") == extensions.end())
-        return true;
     if (member.getFieldName() == "gl_SecondaryViewportMaskNV" &&
         extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
         return true;
     if (member.getFieldName() == "gl_SecondaryPositionNV" &&
         extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
         return true;
-    if (member.getFieldName() == "gl_PositionPerViewNV" &&
-        extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
-        return true;
-    if (member.getFieldName() == "gl_ViewportMaskPerViewNV" &&
-        extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
-        return true;
+
+    if (glslangIntermediate->getStage() != EShLangMeshNV) {
+        if (member.getFieldName() == "gl_ViewportMask" &&
+            extensions.find("GL_NV_viewport_array2") == extensions.end())
+            return true;
+        if (member.getFieldName() == "gl_PositionPerViewNV" &&
+            extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
+            return true;
+        if (member.getFieldName() == "gl_ViewportMaskPerViewNV" &&
+            extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
+            return true;
+    }
+#endif
 
     return false;
 };
@@ -2874,6 +3163,9 @@
                 glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
                 builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
                 builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
+#ifdef NV_EXTENSIONS
+                addMeshNVDecoration(spvType, member, memberQualifier);
+#endif
             }
         }
         builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
@@ -2882,7 +3174,7 @@
             qualifier.storage == glslang::EvqBuffer) {
             // Add memory decorations only to top-level members of shader storage block
             std::vector<spv::Decoration> memory;
-            TranslateMemoryDecoration(memberQualifier, memory);
+            TranslateMemoryDecoration(memberQualifier, memory, glslangIntermediate->usingVulkanMemoryModel());
             for (unsigned int i = 0; i < memory.size(); ++i)
                 builder.addMemberDecoration(spvType, member, memory[i]);
         }
@@ -2993,8 +3285,15 @@
 spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
 {
     spv::Id nominalTypeId = builder.accessChainGetInferredType();
+
+    spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
+    coherentFlags |= TranslateCoherent(type);
+
     spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
-                                               TranslateNonUniformDecoration(type.getQualifier()), nominalTypeId);
+                                               TranslateNonUniformDecoration(type.getQualifier()),
+                                               nominalTypeId,
+                                               spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
+                                               TranslateMemoryScope(coherentFlags));
 
     // Need to convert to abstract types when necessary
     if (type.getBasicType() == glslang::EbtBool) {
@@ -3050,7 +3349,12 @@
         }
     }
 
-    builder.accessChainStore(rvalue);
+    spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
+    coherentFlags |= TranslateCoherent(type);
+
+    builder.accessChainStore(rvalue,
+                             spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask),
+                             TranslateMemoryScope(coherentFlags));
 }
 
 // For storing when types match at the glslang level, but not might match at the
@@ -3096,7 +3400,7 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(index));
+            builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type));
 
             // store the member
             multiTypeStore(glslangElementType, elementRValue);
@@ -3116,7 +3420,7 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(m));
+            builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type));
 
             // store the member
             multiTypeStore(glslangMemberType, memberRValue);
@@ -3133,9 +3437,10 @@
     if (type.getBasicType() != glslang::EbtBlock)
         return glslang::ElpNone;
 
-    // has to be a uniform or buffer block
+    // has to be a uniform or buffer block or task in/out blocks
     if (type.getQualifier().storage != glslang::EvqUniform &&
-        type.getQualifier().storage != glslang::EvqBuffer)
+        type.getQualifier().storage != glslang::EvqBuffer &&
+        !type.getQualifier().isTaskMemory())
         return glslang::ElpNone;
 
     // return the layout to use
@@ -3217,7 +3522,7 @@
     //       adjusting this late means inconsistencies with earlier code, which for reflection is an issue
     // Until reflection is brought in sync with these adjustments, don't apply to $Global,
     // which is the most likely to rely on reflection, and least likely to rely implicit layouts
-    if (glslangIntermediate->usingHlslOFfsets() &&
+    if (glslangIntermediate->usingHlslOffsets() &&
         ! memberType.isArray() && memberType.isVector() && structType.getTypeName().compare("$Global") != 0) {
         int dummySize;
         int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, dummySize);
@@ -3249,6 +3554,14 @@
     case glslang::EbvSecondaryViewportMaskNV:
     case glslang::EbvPositionPerViewNV:
     case glslang::EbvViewportMaskPerViewNV:
+    case glslang::EbvTaskCountNV:
+    case glslang::EbvPrimitiveCountNV:
+    case glslang::EbvPrimitiveIndicesNV:
+    case glslang::EbvClipDistancePerViewNV:
+    case glslang::EbvCullDistancePerViewNV:
+    case glslang::EbvLayerPerViewNV:
+    case glslang::EbvMeshViewCountNV:
+    case glslang::EbvMeshViewIndicesNV:
 #endif
         // Generate the associated capability.  Delegate to TranslateBuiltInDecoration.
         // Alternately, we could just call this for any glslang built-in, since the
@@ -3293,11 +3606,11 @@
 // Make all the functions, skeletally, without actually visiting their bodies.
 void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
 {
-    const auto getParamDecorations = [](std::vector<spv::Decoration>& decorations, const glslang::TType& type) {
+    const auto getParamDecorations = [](std::vector<spv::Decoration>& decorations, const glslang::TType& type, bool useVulkanMemoryModel) {
         spv::Decoration paramPrecision = TranslatePrecisionDecoration(type);
         if (paramPrecision != spv::NoPrecision)
             decorations.push_back(paramPrecision);
-        TranslateMemoryDecoration(type.getQualifier(), decorations);
+        TranslateMemoryDecoration(type.getQualifier(), decorations, useVulkanMemoryModel);
     };
 
     for (int f = 0; f < (int)glslFunctions.size(); ++f) {
@@ -3336,7 +3649,7 @@
                 typeId = builder.makePointer(spv::StorageClassFunction, typeId);
             else
                 rValueParameters.insert(parameters[p]->getAsSymbolNode()->getId());
-            getParamDecorations(paramDecorations[p], paramType);
+            getParamDecorations(paramDecorations[p], paramType, glslangIntermediate->usingVulkanMemoryModel());
             paramTypes.push_back(typeId);
         }
 
@@ -3426,6 +3739,8 @@
         case glslang::EOpImageAtomicXor:
         case glslang::EOpImageAtomicExchange:
         case glslang::EOpImageAtomicCompSwap:
+        case glslang::EOpImageAtomicLoad:
+        case glslang::EOpImageAtomicStore:
             if (i == 0)
                 lvalue = true;
             break;
@@ -3527,6 +3842,25 @@
                 lvalue = true;
             break;
 #endif
+#ifdef NV_EXTENSIONS
+        case glslang::EOpImageSampleFootprintNV:
+            if (i == 4)
+                lvalue = true;
+            break;
+        case glslang::EOpImageSampleFootprintClampNV:
+        case glslang::EOpImageSampleFootprintLodNV:
+            if (i == 5)
+                lvalue = true;
+            break;
+        case glslang::EOpImageSampleFootprintGradNV:
+            if (i == 6)
+                lvalue = true;
+            break;
+        case glslang::EOpImageSampleFootprintGradClampNV:
+            if (i == 7)
+                lvalue = true;
+            break;
+#endif
         default:
             break;
         }
@@ -3553,8 +3887,10 @@
     builder.setLine(node->getLoc().line);
 
     // Process a GLSL texturing op (will be SPV image)
-    const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler()
-                                                             : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType().getSampler();
+
+    const glslang::TType &imageType = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
+                                                             : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
+    const glslang::TSampler sampler = imageType.getSampler();
 #ifdef AMD_EXTENSIONS
     bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
                                 ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
@@ -3622,9 +3958,10 @@
 
     // Check for image functions other than queries
     if (node->isImage()) {
-        std::vector<spv::Id> operands;
+        std::vector<spv::IdImmediate> operands;
         auto opIt = arguments.begin();
-        operands.push_back(*(opIt++));
+        spv::IdImmediate image = { true, *(opIt++) };
+        operands.push_back(image);
 
         // Handle subpass operations
         // TODO: GLSL should change to have the "MS" only on the type rather than the
@@ -3635,38 +3972,63 @@
             std::vector<spv::Id> comps;
             comps.push_back(zero);
             comps.push_back(zero);
-            operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps));
+            spv::IdImmediate coord = { true,
+                builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps) };
+            operands.push_back(coord);
             if (sampler.ms) {
-                operands.push_back(spv::ImageOperandsSampleMask);
-                operands.push_back(*(opIt++));
+                spv::IdImmediate imageOperands = { false, spv::ImageOperandsSampleMask };
+                operands.push_back(imageOperands);
+                spv::IdImmediate imageOperand = { true, *(opIt++) };
+                operands.push_back(imageOperand);
             }
             spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
             builder.setPrecision(result, precision);
             return result;
         }
 
-        operands.push_back(*(opIt++));
+        spv::IdImmediate coord = { true, *(opIt++) };
+        operands.push_back(coord);
 #ifdef AMD_EXTENSIONS
         if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
 #else
         if (node->getOp() == glslang::EOpImageLoad) {
 #endif
+            spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
             if (sampler.ms) {
-                operands.push_back(spv::ImageOperandsSampleMask);
-                operands.push_back(*opIt);
+                mask = mask | spv::ImageOperandsSampleMask;
+            }
 #ifdef AMD_EXTENSIONS
-            } else if (cracked.lod) {
+            if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
-
-                operands.push_back(spv::ImageOperandsLodMask);
-                operands.push_back(*opIt);
-#endif
+                mask = mask | spv::ImageOperandsLodMask;
             }
-            if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
+#endif
+            mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
+            mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
+            if (mask) {
+                spv::IdImmediate imageOperands = { false, (unsigned int)mask };
+                operands.push_back(imageOperands);
+            }
+            if (mask & spv::ImageOperandsSampleMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#ifdef AMD_EXTENSIONS
+            if (mask & spv::ImageOperandsLodMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#endif
+            if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
+                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                operands.push_back(imageOperand);
+            }
+
+            if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
 
-            std::vector<spv::Id> result( 1, builder.createOp(spv::OpImageRead, resultType(), operands) );
+            std::vector<spv::Id> result(1, builder.createOp(spv::OpImageRead, resultType(), operands));
             builder.setPrecision(result[0], precision);
 
             // If needed, add a conversion constructor to the proper size.
@@ -3679,23 +4041,54 @@
 #else
         } else if (node->getOp() == glslang::EOpImageStore) {
 #endif
-            if (sampler.ms) {
-                operands.push_back(*(opIt + 1));
-                operands.push_back(spv::ImageOperandsSampleMask);
-                operands.push_back(*opIt);
+
+            // Push the texel value before the operands
 #ifdef AMD_EXTENSIONS
-            } else if (cracked.lod) {
+            if (sampler.ms || cracked.lod) {
+#else
+            if (sampler.ms) {
+#endif
+                spv::IdImmediate texel = { true, *(opIt + 1) };
+                operands.push_back(texel);
+            } else {
+                spv::IdImmediate texel = { true, *opIt };
+                operands.push_back(texel);
+            }
+
+            spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
+            if (sampler.ms) {
+                mask = mask | spv::ImageOperandsSampleMask;
+            }
+#ifdef AMD_EXTENSIONS
+            if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
-
-                operands.push_back(*(opIt + 1));
-                operands.push_back(spv::ImageOperandsLodMask);
-                operands.push_back(*opIt);
+                mask = mask | spv::ImageOperandsLodMask;
+            }
 #endif
-            } else
-                operands.push_back(*opIt);
+            mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
+            mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelVisibleKHRMask);
+            if (mask) {
+                spv::IdImmediate imageOperands = { false, (unsigned int)mask };
+                operands.push_back(imageOperands);
+            }
+            if (mask & spv::ImageOperandsSampleMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#ifdef AMD_EXTENSIONS
+            if (mask & spv::ImageOperandsLodMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#endif
+            if (mask & spv::ImageOperandsMakeTexelAvailableKHRMask) {
+                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                operands.push_back(imageOperand);
+            }
+
             builder.createNoResultOp(spv::OpImageWrite, operands);
-            if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
+            if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageWriteWithoutFormat);
             return spv::NoResult;
 #ifdef AMD_EXTENSIONS
@@ -3704,20 +4097,40 @@
         } else if (node->getOp() == glslang::EOpSparseImageLoad) {
 #endif
             builder.addCapability(spv::CapabilitySparseResidency);
-            if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
+            if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
 
+            spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
             if (sampler.ms) {
-                operands.push_back(spv::ImageOperandsSampleMask);
-                operands.push_back(*opIt++);
+                mask = mask | spv::ImageOperandsSampleMask;
+            }
 #ifdef AMD_EXTENSIONS
-            } else if (cracked.lod) {
+            if (cracked.lod) {
                 builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod);
                 builder.addCapability(spv::CapabilityImageReadWriteLodAMD);
 
-                operands.push_back(spv::ImageOperandsLodMask);
-                operands.push_back(*opIt++);
+                mask = mask | spv::ImageOperandsLodMask;
+            }
 #endif
+            mask = mask | TranslateImageOperands(TranslateCoherent(imageType));
+            mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask);
+            if (mask) {
+                spv::IdImmediate imageOperands = { false, (unsigned int)mask };
+                operands.push_back(imageOperands);
+            }
+            if (mask & spv::ImageOperandsSampleMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#ifdef AMD_EXTENSIONS
+            if (mask & spv::ImageOperandsLodMask) {
+                spv::IdImmediate imageOperand = { true, *opIt++ };
+                operands.push_back(imageOperand);
+            }
+#endif
+            if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
+                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                operands.push_back(imageOperand);
             }
 
             // Create the return type that was a special structure
@@ -3736,9 +4149,18 @@
 
             // GLSL "IMAGE_PARAMS" will involve in constructing an image texel pointer and this pointer,
             // as the first source operand, is required by SPIR-V atomic operations.
-            operands.push_back(sampler.ms ? *(opIt++) : builder.makeUintConstant(0)); // For non-MS, the value should be 0
+            // For non-MS, the sample value should be 0
+            spv::IdImmediate sample = { true, sampler.ms ? *(opIt++) : builder.makeUintConstant(0) };
+            operands.push_back(sample);
 
-            spv::Id resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
+            spv::Id resultTypeId;
+            // imageAtomicStore has a void return type so base the pointer type on
+            // the type of the value operand.
+            if (node->getOp() == glslang::EOpImageAtomicStore) {
+                resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(operands[2].word));                
+            } else {
+                resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
+            }
             spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands);
 
             std::vector<spv::Id> operands;
@@ -3791,6 +4213,10 @@
 
     // Check for texture functions other than queries
     bool sparse = node->isSparseTexture();
+#ifdef NV_EXTENSIONS
+    bool imageFootprint = node->isImageFootprint();
+#endif
+
     bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
 
     // check for bias argument
@@ -3820,7 +4246,12 @@
             ++nonBiasArgCount;
         if (sparse)
             ++nonBiasArgCount;
-
+#ifdef NV_EXTENSIONS
+        if (imageFootprint)
+            //Following three extra arguments
+            // int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
+            nonBiasArgCount += 3;
+#endif
         if ((int)arguments.size() > nonBiasArgCount)
             bias = true;
     }
@@ -3875,7 +4306,13 @@
     if (cracked.lod) {
         params.lod = arguments[2 + extraArgs];
         ++extraArgs;
-    } else if (glslangIntermediate->getStage() != EShLangFragment) {
+    } else if (glslangIntermediate->getStage() != EShLangFragment
+#ifdef NV_EXTENSIONS
+        // NV_compute_shader_derivatives layout qualifiers allow for implicit LODs
+           && !(glslangIntermediate->getStage() == EShLangCompute &&
+                (glslangIntermediate->getLayoutDerivativeModeNone() != glslang::LayoutDerivativeNone))
+#endif
+        ) {
         // we need to invent the default lod for an explicit lod instruction for a non-fragment stage
         noImplicitLod = true;
     }
@@ -3907,7 +4344,6 @@
         params.lodClamp = arguments[2 + extraArgs];
         ++extraArgs;
     }
-
     // sparse
     if (sparse) {
         params.texelOut = arguments[2 + extraArgs];
@@ -3923,13 +4359,81 @@
         } else
             params.component = builder.makeIntConstant(0);
     }
-
+#ifdef NV_EXTENSIONS
+    spv::Id  resultStruct = spv::NoResult;
+    if (imageFootprint) {
+        //Following three extra arguments
+        // int granularity, bool coarse, out gl_TextureFootprint2DNV footprint
+        params.granularity = arguments[2 + extraArgs];
+        params.coarse = arguments[3 + extraArgs];
+        resultStruct = arguments[4 + extraArgs];
+        extraArgs += 3;
+    }
+#endif
     // bias
     if (bias) {
         params.bias = arguments[2 + extraArgs];
         ++extraArgs;
     }
 
+#ifdef NV_EXTENSIONS
+    if (imageFootprint) {
+        builder.addExtension(spv::E_SPV_NV_shader_image_footprint);
+        builder.addCapability(spv::CapabilityImageFootprintNV);
+
+
+        //resultStructType(OpenGL type) contains 5 elements:
+        //struct gl_TextureFootprint2DNV {
+        //    uvec2 anchor;
+        //    uvec2 offset;
+        //    uvec2 mask;
+        //    uint  lod;
+        //    uint  granularity;
+        //};
+        //or
+        //struct gl_TextureFootprint3DNV {
+        //    uvec3 anchor;
+        //    uvec3 offset;
+        //    uvec2 mask;
+        //    uint  lod;
+        //    uint  granularity;
+        //};
+        spv::Id resultStructType = builder.getContainedTypeId(builder.getTypeId(resultStruct));
+        assert(builder.isStructType(resultStructType));
+
+        //resType (SPIR-V type) contains 6 elements:
+        //Member 0 must be a Boolean type scalar(LOD), 
+        //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),  
+        //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset), 
+        //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask), 
+        //Member 4 must be a scalar of integer type, whose Signedness operand is 0(lod),
+        //Member 5 must be a scalar of integer type, whose Signedness operand is 0(granularity).
+        std::vector<spv::Id> members;
+        members.push_back(resultType());
+        for (int i = 0; i < 5; i++) {
+            members.push_back(builder.getContainedTypeId(resultStructType, i));
+        }
+        spv::Id resType = builder.makeStructType(members, "ResType");
+
+        //call ImageFootprintNV
+        spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
+        
+        //copy resType (SPIR-V type) to resultStructType(OpenGL type)
+        for (int i = 0; i < 5; i++) {
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(resultStruct);
+
+            //Accessing to a struct we created, no coherent flag is set
+            spv::Builder::AccessChain::CoherentFlags flags;
+            flags.clear();
+
+            builder.accessChainPush(builder.makeIntConstant(i), flags);
+            builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), i+1));
+        }
+        return builder.createCompositeExtract(res, resultType(), 0);
+    }
+#endif
+
     // projective component (might not to move)
     // GLSL: "The texture coordinates consumed from P, not including the last component of P,
     //       are divided by the last component of P."
@@ -3954,6 +4458,16 @@
         }
     }
 
+    // nonprivate
+    if (imageType.getQualifier().nonprivate) {
+        params.nonprivate = true;
+    }
+
+    // volatile
+    if (imageType.getQualifier().volatil) {
+        params.volatil = true;
+    }
+
     std::vector<spv::Id> result( 1, 
         builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params)
     );
@@ -4622,27 +5136,21 @@
         unaryOp = spv::OpFwidth;
         break;
     case glslang::EOpDPdxFine:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpDPdxFine;
         break;
     case glslang::EOpDPdyFine:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpDPdyFine;
         break;
     case glslang::EOpFwidthFine:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpFwidthFine;
         break;
     case glslang::EOpDPdxCoarse:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpDPdxCoarse;
         break;
     case glslang::EOpDPdyCoarse:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpDPdyCoarse;
         break;
     case glslang::EOpFwidthCoarse:
-        builder.addCapability(spv::CapabilityDerivativeControl);
         unaryOp = spv::OpFwidthCoarse;
         break;
     case glslang::EOpInterpolateAtCentroid:
@@ -4650,7 +5158,6 @@
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
 #endif
-        builder.addCapability(spv::CapabilityInterpolationFunction);
         libCall = spv::GLSLstd450InterpolateAtCentroid;
         break;
     case glslang::EOpAny:
@@ -4786,8 +5293,6 @@
 #endif
 #ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartition:
-        builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
-        builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
         unaryOp = spv::OpGroupNonUniformPartitionNV;
         break;
 #endif
@@ -5331,8 +5836,14 @@
         opCode = spv::OpAtomicIDecrement;
         break;
     case glslang::EOpAtomicCounter:
+    case glslang::EOpImageAtomicLoad:
+    case glslang::EOpAtomicLoad:
         opCode = spv::OpAtomicLoad;
         break;
+    case glslang::EOpAtomicStore:
+    case glslang::EOpImageAtomicStore:
+        opCode = spv::OpAtomicStore;
+        break;
     default:
         assert(0);
         break;
@@ -5343,46 +5854,94 @@
 
     // Sort out the operands
     //  - mapping from glslang -> SPV
-    //  - there are extra SPV operands with no glslang source
+    //  - there are extra SPV operands that are optional in glslang
     //  - compare-exchange swaps the value and comparator
     //  - compare-exchange has an extra memory semantics
     //  - EOpAtomicCounterDecrement needs a post decrement
-    std::vector<spv::Id> spvAtomicOperands;  // hold the spv operands
-    auto opIt = operands.begin();            // walk the glslang operands
-    spvAtomicOperands.push_back(*(opIt++));
-    spvAtomicOperands.push_back(builder.makeUintConstant(spv::ScopeDevice));     // TBD: what is the correct scope?
-    spvAtomicOperands.push_back(builder.makeUintConstant(spv::MemorySemanticsMaskNone)); // TBD: what are the correct memory semantics?
-    if (opCode == spv::OpAtomicCompareExchange) {
-        // There are 2 memory semantics for compare-exchange. And the operand order of "comparator" and "new value" in GLSL
-        // differs from that in SPIR-V. Hence, special processing is required.
-        spvAtomicOperands.push_back(builder.makeUintConstant(spv::MemorySemanticsMaskNone));
-        spvAtomicOperands.push_back(*(opIt + 1));
-        spvAtomicOperands.push_back(*opIt);
-        opIt += 2;
+    spv::Id pointerId = 0, compareId = 0, valueId = 0;
+    // scope defaults to Device in the old model, QueueFamilyKHR in the new model
+    spv::Id scopeId;
+    if (glslangIntermediate->usingVulkanMemoryModel()) {
+        scopeId = builder.makeUintConstant(spv::ScopeQueueFamilyKHR);
+    } else {
+        scopeId = builder.makeUintConstant(spv::ScopeDevice);
+    }
+    // semantics default to relaxed 
+    spv::Id semanticsId = builder.makeUintConstant(spv::MemorySemanticsMaskNone);
+    spv::Id semanticsId2 = semanticsId;
+
+    pointerId = operands[0];
+    if (opCode == spv::OpAtomicIIncrement || opCode == spv::OpAtomicIDecrement) {
+        // no additional operands
+    } else if (opCode == spv::OpAtomicCompareExchange) {
+        compareId = operands[1];
+        valueId = operands[2];
+        if (operands.size() > 3) {
+            scopeId = operands[3];
+            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[4]) | builder.getConstantScalar(operands[5]));
+            semanticsId2 = builder.makeUintConstant(builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7]));
+        }
+    } else if (opCode == spv::OpAtomicLoad) {
+        if (operands.size() > 1) {
+            scopeId = operands[1];
+            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]));
+        }
+    } else {
+        // atomic store or RMW
+        valueId = operands[1];
+        if (operands.size() > 2) {
+            scopeId = operands[2];
+            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[3]) | builder.getConstantScalar(operands[4]));
+        }
     }
 
-    // Add the rest of the operands, skipping any that were dealt with above.
-    for (; opIt != operands.end(); ++opIt)
-        spvAtomicOperands.push_back(*opIt);
+    // Check for capabilities
+    unsigned semanticsImmediate = builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2);
+    if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+        builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+    }
 
-    spv::Id resultId = builder.createOp(opCode, typeId, spvAtomicOperands);
+    if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) {
+        builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+    }
 
-    // GLSL and HLSL atomic-counter decrement return post-decrement value,
-    // while SPIR-V returns pre-decrement value. Translate between these semantics.
-    if (op == glslang::EOpAtomicCounterDecrement)
-        resultId = builder.createBinOp(spv::OpISub, typeId, resultId, builder.makeIntConstant(1));
+    std::vector<spv::Id> spvAtomicOperands;  // hold the spv operands
+    spvAtomicOperands.push_back(pointerId);
+    spvAtomicOperands.push_back(scopeId);
+    spvAtomicOperands.push_back(semanticsId);
+    if (opCode == spv::OpAtomicCompareExchange) {
+        spvAtomicOperands.push_back(semanticsId2);
+        spvAtomicOperands.push_back(valueId);
+        spvAtomicOperands.push_back(compareId);
+    } else if (opCode != spv::OpAtomicLoad && opCode != spv::OpAtomicIIncrement && opCode != spv::OpAtomicIDecrement) {
+        spvAtomicOperands.push_back(valueId);
+    }
 
-    return resultId;
+    if (opCode == spv::OpAtomicStore) {
+        builder.createNoResultOp(opCode, spvAtomicOperands);
+        return 0;
+    } else {
+        spv::Id resultId = builder.createOp(opCode, typeId, spvAtomicOperands);
+
+        // GLSL and HLSL atomic-counter decrement return post-decrement value,
+        // while SPIR-V returns pre-decrement value. Translate between these semantics.
+        if (op == glslang::EOpAtomicCounterDecrement)
+            resultId = builder.createBinOp(spv::OpISub, typeId, resultId, builder.makeIntConstant(1));
+
+        return resultId;
+    }
 }
 
 // Create group invocation operations.
 spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
+#ifdef AMD_EXTENSIONS
     bool isUnsigned = isTypeUnsignedInt(typeProxy);
     bool isFloat = isTypeFloat(typeProxy);
+#endif
 
     spv::Op opCode = spv::OpNop;
-    std::vector<spv::Id> spvGroupOperands;
+    std::vector<spv::IdImmediate> spvGroupOperands;
     spv::GroupOperation groupOperation = spv::GroupOperationMax;
 
     if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation ||
@@ -5409,7 +5968,6 @@
             builder.addExtension(spv::E_SPV_AMD_shader_ballot);
 #endif
 
-        spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
 #ifdef AMD_EXTENSIONS
         switch (op) {
         case glslang::EOpMinInvocations:
@@ -5419,7 +5977,6 @@
         case glslang::EOpMaxInvocationsNonUniform:
         case glslang::EOpAddInvocationsNonUniform:
             groupOperation = spv::GroupOperationReduce;
-            spvGroupOperands.push_back(groupOperation);
             break;
         case glslang::EOpMinInvocationsInclusiveScan:
         case glslang::EOpMaxInvocationsInclusiveScan:
@@ -5428,7 +5985,6 @@
         case glslang::EOpMaxInvocationsInclusiveScanNonUniform:
         case glslang::EOpAddInvocationsInclusiveScanNonUniform:
             groupOperation = spv::GroupOperationInclusiveScan;
-            spvGroupOperands.push_back(groupOperation);
             break;
         case glslang::EOpMinInvocationsExclusiveScan:
         case glslang::EOpMaxInvocationsExclusiveScan:
@@ -5437,16 +5993,23 @@
         case glslang::EOpMaxInvocationsExclusiveScanNonUniform:
         case glslang::EOpAddInvocationsExclusiveScanNonUniform:
             groupOperation = spv::GroupOperationExclusiveScan;
-            spvGroupOperands.push_back(groupOperation);
             break;
         default:
             break;
         }
+        spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
+        spvGroupOperands.push_back(scope);
+        if (groupOperation != spv::GroupOperationMax) {
+            spv::IdImmediate groupOp = { false, (unsigned)groupOperation };
+            spvGroupOperands.push_back(groupOp);
+        }
 #endif
     }
 
-    for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt)
-        spvGroupOperands.push_back(*opIt);
+    for (auto opIt = operands.begin(); opIt != operands.end(); ++opIt) {
+        spv::IdImmediate op = { true, *opIt };
+        spvGroupOperands.push_back(op);
+    }
 
     switch (op) {
     case glslang::EOpAnyInvocation:
@@ -5585,7 +6148,8 @@
 }
 
 // Create group invocation operations on a vector
-spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands)
+spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation,
+    spv::Id typeId, std::vector<spv::Id>& operands)
 {
 #ifdef AMD_EXTENSIONS
     assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
@@ -5618,18 +6182,23 @@
     for (int comp = 0; comp < numComponents; ++comp) {
         std::vector<unsigned int> indexes;
         indexes.push_back(comp);
-        spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
-        std::vector<spv::Id> spvGroupOperands;
+        spv::IdImmediate scalar = { true, builder.createCompositeExtract(operands[0], scalarType, indexes) };
+        std::vector<spv::IdImmediate> spvGroupOperands;
         if (op == spv::OpSubgroupReadInvocationKHR) {
             spvGroupOperands.push_back(scalar);
-            spvGroupOperands.push_back(operands[1]);
+            spv::IdImmediate operand = { true, operands[1] };
+            spvGroupOperands.push_back(operand);
         } else if (op == spv::OpGroupBroadcast) {
-            spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+            spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
+            spvGroupOperands.push_back(scope);
             spvGroupOperands.push_back(scalar);
-            spvGroupOperands.push_back(operands[1]);
+            spv::IdImmediate operand = { true, operands[1] };
+            spvGroupOperands.push_back(operand);
         } else {
-            spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
-            spvGroupOperands.push_back(groupOperation);
+            spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
+            spvGroupOperands.push_back(scope);
+            spv::IdImmediate groupOp = { false, (unsigned)groupOperation };
+            spvGroupOperands.push_back(groupOp);
             spvGroupOperands.push_back(scalar);
         }
 
@@ -5641,7 +6210,8 @@
 }
 
 // Create subgroup invocation operations.
-spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, spv::Id typeId,
+    std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
     // Add the required capabilities.
     switch (op) {
@@ -5889,14 +6459,11 @@
     default: assert(0 && "Unhandled subgroup operation!");
     }
 
-    std::vector<spv::Id> spvGroupOperands;
-
-    // Every operation begins with the Execution Scope operand.
-    spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
-
-    // Next, for all operations that use a Group Operation, push that as an operand.
+    // get the right Group Operation
+    spv::GroupOperation groupOperation = spv::GroupOperationMax;
     switch (op) {
-    default: break;
+    default:
+        break;
     case glslang::EOpSubgroupBallotBitCount:
     case glslang::EOpSubgroupAdd:
     case glslang::EOpSubgroupMul:
@@ -5905,7 +6472,7 @@
     case glslang::EOpSubgroupAnd:
     case glslang::EOpSubgroupOr:
     case glslang::EOpSubgroupXor:
-        spvGroupOperands.push_back(spv::GroupOperationReduce);
+        groupOperation = spv::GroupOperationReduce;
         break;
     case glslang::EOpSubgroupBallotInclusiveBitCount:
     case glslang::EOpSubgroupInclusiveAdd:
@@ -5915,7 +6482,7 @@
     case glslang::EOpSubgroupInclusiveAnd:
     case glslang::EOpSubgroupInclusiveOr:
     case glslang::EOpSubgroupInclusiveXor:
-        spvGroupOperands.push_back(spv::GroupOperationInclusiveScan);
+        groupOperation = spv::GroupOperationInclusiveScan;
         break;
     case glslang::EOpSubgroupBallotExclusiveBitCount:
     case glslang::EOpSubgroupExclusiveAdd:
@@ -5925,7 +6492,7 @@
     case glslang::EOpSubgroupExclusiveAnd:
     case glslang::EOpSubgroupExclusiveOr:
     case glslang::EOpSubgroupExclusiveXor:
-        spvGroupOperands.push_back(spv::GroupOperationExclusiveScan);
+        groupOperation = spv::GroupOperationExclusiveScan;
         break;
     case glslang::EOpSubgroupClusteredAdd:
     case glslang::EOpSubgroupClusteredMul:
@@ -5934,7 +6501,7 @@
     case glslang::EOpSubgroupClusteredAnd:
     case glslang::EOpSubgroupClusteredOr:
     case glslang::EOpSubgroupClusteredXor:
-        spvGroupOperands.push_back(spv::GroupOperationClusteredReduce);
+        groupOperation = spv::GroupOperationClusteredReduce;
         break;
 #ifdef NV_EXTENSIONS
     case glslang::EOpSubgroupPartitionedAdd:
@@ -5944,7 +6511,7 @@
     case glslang::EOpSubgroupPartitionedAnd:
     case glslang::EOpSubgroupPartitionedOr:
     case glslang::EOpSubgroupPartitionedXor:
-        spvGroupOperands.push_back(spv::GroupOperationPartitionedReduceNV);
+        groupOperation = spv::GroupOperationPartitionedReduceNV;
         break;
     case glslang::EOpSubgroupPartitionedInclusiveAdd:
     case glslang::EOpSubgroupPartitionedInclusiveMul:
@@ -5953,7 +6520,7 @@
     case glslang::EOpSubgroupPartitionedInclusiveAnd:
     case glslang::EOpSubgroupPartitionedInclusiveOr:
     case glslang::EOpSubgroupPartitionedInclusiveXor:
-        spvGroupOperands.push_back(spv::GroupOperationPartitionedInclusiveScanNV);
+        groupOperation = spv::GroupOperationPartitionedInclusiveScanNV;
         break;
     case glslang::EOpSubgroupPartitionedExclusiveAdd:
     case glslang::EOpSubgroupPartitionedExclusiveMul:
@@ -5962,22 +6529,41 @@
     case glslang::EOpSubgroupPartitionedExclusiveAnd:
     case glslang::EOpSubgroupPartitionedExclusiveOr:
     case glslang::EOpSubgroupPartitionedExclusiveXor:
-        spvGroupOperands.push_back(spv::GroupOperationPartitionedExclusiveScanNV);
+        groupOperation = spv::GroupOperationPartitionedExclusiveScanNV;
         break;
 #endif
     }
 
+    // build the instruction
+    std::vector<spv::IdImmediate> spvGroupOperands;
+
+    // Every operation begins with the Execution Scope operand.
+    spv::IdImmediate executionScope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
+    spvGroupOperands.push_back(executionScope);
+
+    // Next, for all operations that use a Group Operation, push that as an operand.
+    if (groupOperation != spv::GroupOperationMax) {
+        spv::IdImmediate groupOperand = { false, (unsigned)groupOperation };
+        spvGroupOperands.push_back(groupOperand);
+    }
+
     // Push back the operands next.
-    for (auto opIt : operands) {
-        spvGroupOperands.push_back(opIt);
+    for (auto opIt = operands.cbegin(); opIt != operands.cend(); ++opIt) {
+        spv::IdImmediate operand = { true, *opIt };
+        spvGroupOperands.push_back(operand);
     }
 
     // Some opcodes have additional operands.
+    spv::Id directionId = spv::NoResult;
     switch (op) {
     default: break;
-    case glslang::EOpSubgroupQuadSwapHorizontal: spvGroupOperands.push_back(builder.makeUintConstant(0)); break;
-    case glslang::EOpSubgroupQuadSwapVertical:   spvGroupOperands.push_back(builder.makeUintConstant(1)); break;
-    case glslang::EOpSubgroupQuadSwapDiagonal:   spvGroupOperands.push_back(builder.makeUintConstant(2)); break;
+    case glslang::EOpSubgroupQuadSwapHorizontal: directionId = builder.makeUintConstant(0); break;
+    case glslang::EOpSubgroupQuadSwapVertical:   directionId = builder.makeUintConstant(1); break;
+    case glslang::EOpSubgroupQuadSwapDiagonal:   directionId = builder.makeUintConstant(2); break;
+    }
+    if (directionId != spv::NoResult) {
+        spv::IdImmediate direction = { true, directionId };
+        spvGroupOperands.push_back(direction);
     }
 
     return builder.createOp(opCode, typeId, spvGroupOperands);
@@ -6082,7 +6668,6 @@
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
 #endif
-        builder.addCapability(spv::CapabilityInterpolationFunction);
         libCall = spv::GLSLstd450InterpolateAtSample;
         break;
     case glslang::EOpInterpolateAtOffset:
@@ -6090,7 +6675,6 @@
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
 #endif
-        builder.addCapability(spv::CapabilityInterpolationFunction);
         libCall = spv::GLSLstd450InterpolateAtOffset;
         break;
     case glslang::EOpAddCarry:
@@ -6246,7 +6830,59 @@
         libCall = spv::InterpolateAtVertexAMD;
         break;
 #endif
+    case glslang::EOpBarrier:
+        {
+            // This is for the extended controlBarrier function, with four operands.
+            // The unextended barrier() goes through createNoArgOperation.
+            assert(operands.size() == 4);
+            unsigned int executionScope = builder.getConstantScalar(operands[0]);
+            unsigned int memoryScope = builder.getConstantScalar(operands[1]);
+            unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
+            builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || memoryScope == spv::ScopeDevice)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
+    case glslang::EOpMemoryBarrier:
+        {
+            // This is for the extended memoryBarrier function, with three operands.
+            // The unextended memoryBarrier() goes through createNoArgOperation.
+            assert(operands.size() == 3);
+            unsigned int memoryScope = builder.getConstantScalar(operands[0]);
+            unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
+            builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
 
+#ifdef NV_EXTENSIONS
+    case glslang::EOpReportIntersectionNV:
+    {
+        typeId = builder.makeBoolType();
+        opCode = spv::OpReportIntersectionNVX;
+    }
+    break;
+    case glslang::EOpTraceNV:
+    {
+        builder.createNoResultOp(spv::OpTraceNVX, operands);
+        return 0;
+    }
+    break;
+    case glslang::EOpWritePackedPrimitiveIndices4x8NV:
+        builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
+        return 0;
+#endif
     default:
         return 0;
     }
@@ -6315,7 +6951,8 @@
 // Intrinsics with no arguments (or no return value, and no precision).
 spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId)
 {
-    // TODO: get the barrier operands correct
+    // GLSL memory barriers use queuefamily scope in new model, device scope in old model
+    spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
 
     switch (op) {
     case glslang::EOpEmitVertex:
@@ -6326,11 +6963,14 @@
         return 0;
     case glslang::EOpBarrier:
         if (glslangIntermediate->getStage() == EShLangTessControl) {
-            builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, spv::MemorySemanticsMaskNone);
-            // TODO: prefer the following, when available:
-            // builder.createControlBarrier(spv::ScopePatch, spv::ScopePatch,
-            //                                 spv::MemorySemanticsPatchMask |
-            //                                 spv::MemorySemanticsAcquireReleaseMask);
+            if (glslangIntermediate->usingVulkanMemoryModel()) {
+                builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
+                                             spv::MemorySemanticsOutputMemoryKHRMask |
+                                             spv::MemorySemanticsAcquireReleaseMask);
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            } else {
+                builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, spv::MemorySemanticsMaskNone);
+            }
         } else {
             builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
                                             spv::MemorySemanticsWorkgroupMemoryMask |
@@ -6338,24 +6978,24 @@
         }
         return 0;
     case glslang::EOpMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory |
-                                                      spv::MemorySemanticsAcquireReleaseMask);
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAllMemory |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierAtomicCounter:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask |
-                                                      spv::MemorySemanticsAcquireReleaseMask);
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierBuffer:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
-                                                      spv::MemorySemanticsAcquireReleaseMask);
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsUniformMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierImage:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask |
-                                                      spv::MemorySemanticsAcquireReleaseMask);
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierShared:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask |
-                                                      spv::MemorySemanticsAcquireReleaseMask);
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpGroupMemoryBarrier:
         builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
@@ -6417,6 +7057,14 @@
         return builder.setPrecision(id, precision);
     }
 #endif
+#ifdef NV_EXTENSIONS
+    case glslang::EOpIgnoreIntersectionNV:
+        builder.createNoResultOp(spv::OpIgnoreIntersectionNVX);
+        return 0;
+    case glslang::EOpTerminateRayNV:
+        builder.createNoResultOp(spv::OpTerminateRayNVX);
+        return 0;
+#endif
     default:
         logger->missingFunctionality("unknown operation with no arguments");
         return 0;
@@ -6440,6 +7088,9 @@
         builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
         builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
         builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
+#ifdef NV_EXTENSIONS
+        addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier());
+#endif
         if (symbol->getType().getQualifier().hasSpecConstantId())
             builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
         if (symbol->getQualifier().hasIndex())
@@ -6484,7 +7135,7 @@
 
     if (symbol->getType().isImage()) {
         std::vector<spv::Decoration> memory;
-        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory);
+        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, glslangIntermediate->usingVulkanMemoryModel());
         for (unsigned int i = 0; i < memory.size(); ++i)
             builder.addDecoration(id, memory[i]);
     }
@@ -6530,6 +7181,11 @@
         builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
         builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
     }
+    if (symbol->getQualifier().pervertexNV) {
+        builder.addDecoration(id, spv::DecorationPerVertexNV);
+        builder.addCapability(spv::CapabilityFragmentBarycentricNV);
+        builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric);
+    }
 #endif
 
     if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
@@ -6541,6 +7197,28 @@
     return id;
 }
 
+#ifdef NV_EXTENSIONS
+// add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
+void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
+{
+    if (member >= 0) {
+        if (qualifier.perPrimitiveNV)
+            builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerPrimitiveNV);
+        if (qualifier.perViewNV)
+            builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerViewNV);
+        if (qualifier.perTaskNV)
+            builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerTaskNV);
+    } else {
+        if (qualifier.perPrimitiveNV)
+            builder.addDecoration(id, spv::DecorationPerPrimitiveNV);
+        if (qualifier.perViewNV)
+            builder.addDecoration(id, spv::DecorationPerViewNV);
+        if (qualifier.perTaskNV)
+            builder.addDecoration(id, spv::DecorationPerTaskNV);
+    }
+}
+#endif
+
 // Make a full tree of instructions to build a SPIR-V specialization constant,
 // or regular constant if possible.
 //
@@ -6926,7 +7604,7 @@
     if (out.fail())
         printf("ERROR: Failed to open file: %s\n", baseName);
     out << "\t// " << 
-        glslang::GetSpirvGeneratorVersion() << "." << GLSLANG_MINOR_VERSION << "." << GLSLANG_PATCH_LEVEL <<
+        GetSpirvGeneratorVersion() << "." << GLSLANG_MINOR_VERSION << "." << GLSLANG_PATCH_LEVEL <<
         std::endl;
     if (varName != nullptr) {
         out << "\t #pragma once" << std::endl;
@@ -6953,13 +7631,13 @@
 //
 // Set up the glslang traversal
 //
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, SpvOptions* options)
+void GlslangToSpv(const TIntermediate& intermediate, std::vector<unsigned int>& spirv, SpvOptions* options)
 {
     spv::SpvBuildLogger logger;
     GlslangToSpv(intermediate, spirv, &logger, options);
 }
 
-void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+void GlslangToSpv(const TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                   spv::SpvBuildLogger* logger, SpvOptions* options)
 {
     TIntermNode* root = intermediate.getTreeRoot();
@@ -6967,11 +7645,11 @@
     if (root == 0)
         return;
 
-    glslang::SpvOptions defaultOptions;
+    SpvOptions defaultOptions;
     if (options == nullptr)
         options = &defaultOptions;
 
-    glslang::GetThreadPoolAllocator().push();
+    GetThreadPoolAllocator().push();
 
     TGlslangToSpvTraverser it(intermediate.getSpv().spv, &intermediate, logger, *options);
     root->traverse(&it);
@@ -6981,54 +7659,18 @@
 #if ENABLE_OPT
     // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
     // eg. forward and remove memory writes of opaque types.
-    if ((intermediate.getSource() == EShSourceHlsl ||
-                options->optimizeSize) &&
-            !options->disableOptimizer) {
-        spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
+    if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer)
+        SpirvToolsLegalize(intermediate, spirv, logger, options);
 
-        spvtools::Optimizer optimizer(target_env);
-        optimizer.SetMessageConsumer([](spv_message_level_t level,
-                                         const char* source,
-                                         const spv_position_t& position,
-                                         const char* message) {
-            std::cerr << StringifyMessage(level, source, position, message)
-                      << std::endl;
-        });
+    if (options->validate)
+        SpirvToolsValidate(intermediate, spirv, logger);
 
-        optimizer.RegisterPass(CreateMergeReturnPass());
-        optimizer.RegisterPass(CreateInlineExhaustivePass());
-        optimizer.RegisterPass(CreateEliminateDeadFunctionsPass());
-        optimizer.RegisterPass(CreateScalarReplacementPass());
-        optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
-        optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
-        optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
-        optimizer.RegisterPass(CreateSimplificationPass());
-        optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateVectorDCEPass());
-        optimizer.RegisterPass(CreateDeadInsertElimPass());
-        optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateDeadBranchElimPass());
-        optimizer.RegisterPass(CreateBlockMergePass());
-        optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
-        optimizer.RegisterPass(CreateIfConversionPass());
-        optimizer.RegisterPass(CreateSimplificationPass());
-        optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateVectorDCEPass());
-        optimizer.RegisterPass(CreateDeadInsertElimPass());
-        if (options->optimizeSize) {
-            optimizer.RegisterPass(CreateRedundancyEliminationPass());
-            // TODO(greg-lunarg): Add this when AMD driver issues are resolved
-            // optimizer.RegisterPass(CreateCommonUniformElimPass());
-        }
-        optimizer.RegisterPass(CreateAggressiveDCEPass());
-        optimizer.RegisterPass(CreateCFGCleanupPass());
+    if (options->disassemble)
+        SpirvToolsDisassemble(std::cout, spirv);
 
-        if (!optimizer.Run(spirv.data(), spirv.size(), &spirv))
-            return;
-    }
 #endif
 
-    glslang::GetThreadPoolAllocator().pop();
+    GetThreadPoolAllocator().pop();
 }
 
 }; // end namespace glslang
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
old mode 100644
new mode 100755
index f7f7cff..4169c12
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -38,6 +38,7 @@
     #pragma warning(disable : 4464) // relative include path contains '..'
 #endif
 
+#include "SpvTools.h"
 #include "../glslang/Include/intermediate.h"
 
 #include <string>
@@ -47,14 +48,6 @@
 
 namespace glslang {
 
-struct SpvOptions {
-    SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
-        optimizeSize(false) { }
-    bool generateDebugInfo;
-    bool disableOptimizer;
-    bool optimizeSize;
-};
-
 void GetSpirvVersion(std::string&);
 int GetSpirvGeneratorVersion();
 void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
old mode 100755
new mode 100644
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
old mode 100755
new mode 100644
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
old mode 100755
new mode 100644
index 10d655b..7d77934
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -81,6 +81,7 @@
 {
     Instruction* import = new Instruction(getUniqueId(), NoType, OpExtInstImport);
     import->addStringOperand(name);
+    module.mapInstruction(import);
 
     imports.push_back(std::unique_ptr<Instruction>(import));
     return import->getResultId();
@@ -193,10 +194,8 @@
     // deal with capabilities
     switch (width) {
     case 8:
-        addCapability(CapabilityInt8);
-        break;
     case 16:
-        addCapability(CapabilityInt16);
+        // these are currently handled by storage-type declarations and post processing
         break;
     case 64:
         addCapability(CapabilityInt64);
@@ -228,7 +227,7 @@
     // deal with capabilities
     switch (width) {
     case 16:
-        addCapability(CapabilityFloat16);
+        // currently handled by storage-type declarations and post processing
         break;
     case 64:
         addCapability(CapabilityFloat64);
@@ -504,12 +503,27 @@
     return type->getResultId();
 }
 
+#ifdef NV_EXTENSIONS
+Id Builder::makeAccelerationStructureNVType()
+{
+    Instruction *type;
+    if (groupedTypes[OpTypeAccelerationStructureNVX].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNVX);
+        constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+        module.mapInstruction(type);
+    } else {
+        type = groupedTypes[OpTypeAccelerationStructureNVX].back();
+    }
+
+    return type->getResultId();
+}
+#endif
 Id Builder::getDerefTypeId(Id resultId) const
 {
     Id typeId = getTypeId(resultId);
     assert(isPointerType(typeId));
 
-    return module.getInstruction(typeId)->getImmediateOperand(1);
+    return module.getInstruction(typeId)->getIdOperand(1);
 }
 
 Op Builder::getMostBasicTypeClass(Id typeId) const
@@ -519,12 +533,6 @@
     Op typeClass = instr->getOpCode();
     switch (typeClass)
     {
-    case OpTypeVoid:
-    case OpTypeBool:
-    case OpTypeInt:
-    case OpTypeFloat:
-    case OpTypeStruct:
-        return typeClass;
     case OpTypeVector:
     case OpTypeMatrix:
     case OpTypeArray:
@@ -533,8 +541,7 @@
     case OpTypePointer:
         return getMostBasicTypeClass(instr->getIdOperand(1));
     default:
-        assert(0);
-        return OpTypeFloat;
+        return typeClass;
     }
 }
 
@@ -553,7 +560,7 @@
         return instr->getImmediateOperand(1);
     case OpTypeArray:
     {
-        Id lengthId = instr->getImmediateOperand(1);
+        Id lengthId = instr->getIdOperand(1);
         return module.getInstruction(lengthId)->getImmediateOperand(0);
     }
     case OpTypeStruct:
@@ -621,6 +628,36 @@
     return getContainedTypeId(typeId, 0);
 }
 
+// Returns true if 'typeId' is or contains a scalar type declared with 'typeOp'
+// of width 'width'. The 'width' is only consumed for int and float types.
+// Returns false otherwise.
+bool Builder::containsType(Id typeId, spv::Op typeOp, unsigned int width) const
+{
+    const Instruction& instr = *module.getInstruction(typeId);
+
+    Op typeClass = instr.getOpCode();
+    switch (typeClass)
+    {
+    case OpTypeInt:
+    case OpTypeFloat:
+        return typeClass == typeOp && instr.getImmediateOperand(0) == width;
+    case OpTypeStruct:
+        for (int m = 0; m < instr.getNumOperands(); ++m) {
+            if (containsType(instr.getIdOperand(m), typeOp, width))
+                return true;
+        }
+        return false;
+    case OpTypeVector:
+    case OpTypeMatrix:
+    case OpTypeArray:
+    case OpTypeRuntimeArray:
+    case OpTypePointer:
+        return containsType(getContainedTypeId(typeId), typeOp, width);
+    default:
+        return typeClass == typeOp;
+    }
+}
+
 // See if a scalar constant of this type has already been created, so it
 // can be reused rather than duplicated.  (Required by the specification).
 Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value)
@@ -1194,19 +1231,35 @@
 }
 
 // Comments in header
-void Builder::createStore(Id rValue, Id lValue)
+void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
 {
     Instruction* store = new Instruction(OpStore);
     store->addIdOperand(lValue);
     store->addIdOperand(rValue);
+
+    if (memoryAccess != MemoryAccessMaskNone) {
+        store->addImmediateOperand(memoryAccess);
+        if (memoryAccess & spv::MemoryAccessMakePointerAvailableKHRMask) {
+            store->addIdOperand(makeUintConstant(scope));
+        }
+    }
+
     buildPoint->addInstruction(std::unique_ptr<Instruction>(store));
 }
 
 // Comments in header
-Id Builder::createLoad(Id lValue)
+Id Builder::createLoad(Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
 {
     Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), OpLoad);
     load->addIdOperand(lValue);
+
+    if (memoryAccess != MemoryAccessMaskNone) {
+        load->addImmediateOperand(memoryAccess);
+        if (memoryAccess & spv::MemoryAccessMakePointerVisibleKHRMask) {
+            load->addIdOperand(makeUintConstant(scope));
+        }
+    }
+
     buildPoint->addInstruction(std::unique_ptr<Instruction>(load));
 
     return load->getResultId();
@@ -1331,7 +1384,7 @@
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
-// An opcode that has one operand, no result id, and no type
+// An opcode that has one id operand, no result id, and no type
 void Builder::createNoResultOp(Op opCode, Id operand)
 {
     Instruction* op = new Instruction(opCode);
@@ -1339,29 +1392,43 @@
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
-// An opcode that has one operand, no result id, and no type
+// An opcode that has one or more operands, no result id, and no type
 void Builder::createNoResultOp(Op opCode, const std::vector<Id>& operands)
 {
     Instruction* op = new Instruction(opCode);
-    for (auto it = operands.cbegin(); it != operands.cend(); ++it)
+    for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
         op->addIdOperand(*it);
+    }
+    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+}
+
+// An opcode that has multiple operands, no result id, and no type
+void Builder::createNoResultOp(Op opCode, const std::vector<IdImmediate>& operands)
+{
+    Instruction* op = new Instruction(opCode);
+    for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
+        if (it->isId)
+            op->addIdOperand(it->word);
+        else
+            op->addImmediateOperand(it->word);
+    }
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics)
 {
     Instruction* op = new Instruction(OpControlBarrier);
-    op->addImmediateOperand(makeUintConstant(execution));
-    op->addImmediateOperand(makeUintConstant(memory));
-    op->addImmediateOperand(makeUintConstant(semantics));
+    op->addIdOperand(makeUintConstant(execution));
+    op->addIdOperand(makeUintConstant(memory));
+    op->addIdOperand(makeUintConstant(semantics));
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 void Builder::createMemoryBarrier(unsigned executionScope, unsigned memorySemantics)
 {
     Instruction* op = new Instruction(OpMemoryBarrier);
-    op->addImmediateOperand(makeUintConstant(executionScope));
-    op->addImmediateOperand(makeUintConstant(memorySemantics));
+    op->addIdOperand(makeUintConstant(executionScope));
+    op->addIdOperand(makeUintConstant(memorySemantics));
     buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
 }
 
@@ -1428,6 +1495,20 @@
     return op->getResultId();
 }
 
+Id Builder::createOp(Op opCode, Id typeId, const std::vector<IdImmediate>& operands)
+{
+    Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
+    for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
+        if (it->isId)
+            op->addIdOperand(it->word);
+        else
+            op->addImmediateOperand(it->word);
+    }
+    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+
+    return op->getResultId();
+}
+
 Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& operands, const std::vector<unsigned>& literals)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp);
@@ -1588,6 +1669,13 @@
     if (parameters.component != NoResult)
         texArgs[numArgs++] = parameters.component;
 
+#ifdef NV_EXTENSIONS
+    if (parameters.granularity != NoResult)
+        texArgs[numArgs++] = parameters.granularity;
+    if (parameters.coarse != NoResult)
+        texArgs[numArgs++] = parameters.coarse;
+#endif 
+
     //
     // Set up the optional arguments
     //
@@ -1639,6 +1727,12 @@
         mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask);
         texArgs[numArgs++] = parameters.lodClamp;
     }
+    if (parameters.nonprivate) {
+        mask = mask | ImageOperandsNonPrivateTexelKHRMask;
+    }
+    if (parameters.volatil) {
+        mask = mask | ImageOperandsVolatileTexelKHRMask;
+    }
     if (mask == ImageOperandsMaskNone)
         --numArgs;  // undo speculative reservation for the mask argument
     else
@@ -1653,6 +1747,10 @@
             opCode = OpImageSparseFetch;
         else
             opCode = OpImageFetch;
+#ifdef NV_EXTENSIONS
+    } else if (parameters.granularity && parameters.coarse) {
+        opCode = OpImageSampleFootprintNV;
+#endif
     } else if (gather) {
         if (parameters.Dref)
             if (sparse)
@@ -1774,9 +1872,6 @@
 // Comments in header
 Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameters, bool isUnsignedResult)
 {
-    // All these need a capability
-    addCapability(CapabilityImageQuery);
-
     // Figure out the result type
     Id resultType = 0;
     switch (opCode) {
@@ -2029,9 +2124,39 @@
     int numRows = getTypeNumRows(resultTypeId);
 
     Instruction* instr = module.getInstruction(componentTypeId);
-    Id bitCount = instr->getIdOperand(0);
+    unsigned bitCount = instr->getImmediateOperand(0);
 
-    // Will use a two step process
+    // Optimize matrix constructed from a bigger matrix
+    if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) {
+        // To truncate the matrix to a smaller number of rows/columns, we need to:
+        // 1. For each column, extract the column and truncate it to the required size using shuffle
+        // 2. Assemble the resulting matrix from all columns
+        Id matrix = sources[0];
+        Id columnTypeId = getContainedTypeId(resultTypeId);
+        Id sourceColumnTypeId = getContainedTypeId(getTypeId(matrix));
+
+        std::vector<unsigned> channels;
+        for (int row = 0; row < numRows; ++row)
+            channels.push_back(row);
+
+        std::vector<Id> matrixColumns;
+        for (int col = 0; col < numCols; ++col) {
+            std::vector<unsigned> indexes;
+            indexes.push_back(col);
+            Id colv = createCompositeExtract(matrix, sourceColumnTypeId, indexes);
+            setPrecision(colv, precision);
+
+            if (numRows != getNumRows(matrix)) {
+                matrixColumns.push_back(createRvalueSwizzle(precision, columnTypeId, colv, channels));
+            } else {
+                matrixColumns.push_back(colv);
+            }
+        }
+
+        return setPrecision(createCompositeConstruct(resultTypeId, matrixColumns), precision);
+    }
+
+    // Otherwise, will use a two step process
     // 1. make a compile-time 2D array of values
     // 2. construct a matrix from that array
 
@@ -2285,6 +2410,7 @@
     accessChain.component = NoResult;
     accessChain.preSwizzleBaseType = NoType;
     accessChain.isRValue = false;
+    accessChain.coherentFlags.clear();
 }
 
 // Comments in header
@@ -2311,7 +2437,7 @@
 }
 
 // Comments in header
-void Builder::accessChainStore(Id rvalue)
+void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
 {
     assert(accessChain.isRValue == false);
 
@@ -2329,11 +2455,11 @@
         source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle);
     }
 
-    createStore(source, base);
+    createStore(source, base, memoryAccess, scope);
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, spv::Scope scope)
 {
     Id id;
 
@@ -2377,7 +2503,7 @@
     } else {
         transferAccessChainSwizzle(true);
         // load through the access chain
-        id = createLoad(collapseAccessChain());
+        id = createLoad(collapseAccessChain(), memoryAccess, scope);
         setPrecision(id, precision);
         addDecoration(id, nonUniform);
     }
@@ -2453,42 +2579,6 @@
     return type;
 }
 
-// comment in header
-void Builder::eliminateDeadDecorations() {
-    std::unordered_set<const Block*> reachable_blocks;
-    std::unordered_set<Id> unreachable_definitions;
-    // Collect IDs defined in unreachable blocks. For each function, label the
-    // reachable blocks first. Then for each unreachable block, collect the
-    // result IDs of the instructions in it.
-    for (std::vector<Function*>::const_iterator fi = module.getFunctions().cbegin();
-        fi != module.getFunctions().cend(); fi++) {
-        Function* f = *fi;
-        Block* entry = f->getEntryBlock();
-        inReadableOrder(entry, [&reachable_blocks](const Block* b) {
-            reachable_blocks.insert(b);
-        });
-        for (std::vector<Block*>::const_iterator bi = f->getBlocks().cbegin();
-            bi != f->getBlocks().cend(); bi++) {
-            Block* b = *bi;
-            if (!reachable_blocks.count(b)) {
-                for (std::vector<std::unique_ptr<Instruction> >::const_iterator
-                         ii = b->getInstructions().cbegin();
-                    ii != b->getInstructions().cend(); ii++) {
-                    Instruction* i = ii->get();
-                    unreachable_definitions.insert(i->getResultId());
-                }
-            }
-        }
-    }
-    decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
-        [&unreachable_definitions](std::unique_ptr<Instruction>& I) -> bool {
-            Instruction* inst = I.get();
-            Id decoration_id = inst->getIdOperand(0);
-            return unreachable_definitions.count(decoration_id) != 0;
-        }),
-        decorations.end());
-}
-
 void Builder::dump(std::vector<unsigned int>& out) const
 {
     // Header, before first instructions:
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
old mode 100755
new mode 100644
index 099b1d9..7c1d421
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -131,6 +131,9 @@
     Id makeSamplerType();
     Id makeSampledImageType(Id imageType);
 
+    // accelerationStructureNV type
+    Id makeAccelerationStructureNVType();
+
     // For querying about types.
     Id getTypeId(Id resultId) const { return module.getTypeId(resultId); }
     Id getDerefTypeId(Id resultId) const;
@@ -167,6 +170,7 @@
     bool isImageType(Id typeId)        const { return getTypeClass(typeId) == OpTypeImage; }
     bool isSamplerType(Id typeId)      const { return getTypeClass(typeId) == OpTypeSampler; }
     bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; }
+    bool containsType(Id typeId, Op typeOp, unsigned int width) const;
 
     bool isConstantOpCode(Op opcode) const;
     bool isSpecConstantOpCode(Op opcode) const;
@@ -273,10 +277,10 @@
     Id createUndefined(Id type);
 
     // Store into an Id and return the l-value
-    void createStore(Id rValue, Id lValue);
+    void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
 
     // Load from an Id and return it
-    Id createLoad(Id lValue);
+    Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
 
     // Create an OpAccessChain instruction
     Id createAccessChain(StorageClass, Id base, const std::vector<Id>& offsets);
@@ -296,12 +300,14 @@
     void createNoResultOp(Op);
     void createNoResultOp(Op, Id operand);
     void createNoResultOp(Op, const std::vector<Id>& operands);
+    void createNoResultOp(Op, const std::vector<IdImmediate>& operands);
     void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask);
     void createMemoryBarrier(unsigned executionScope, unsigned memorySemantics);
     Id createUnaryOp(Op, Id typeId, Id operand);
     Id createBinOp(Op, Id typeId, Id operand1, Id operand2);
     Id createTriOp(Op, Id typeId, Id operand1, Id operand2, Id operand3);
     Id createOp(Op, Id typeId, const std::vector<Id>& operands);
+    Id createOp(Op, Id typeId, const std::vector<IdImmediate>& operands);
     Id createFunctionCall(spv::Function*, const std::vector<spv::Id>&);
     Id createSpecConstantOp(Op, Id typeId, const std::vector<spv::Id>& operands, const std::vector<unsigned>& literals);
 
@@ -363,6 +369,10 @@
         Id component;
         Id texelOut;
         Id lodClamp;
+        Id granularity;
+        Id coarse;
+        bool nonprivate;
+        bool volatil;
     };
 
     // Select the correct texture operation based on all inputs, and emit the correct instruction
@@ -502,6 +512,43 @@
         Id component;                  // a dynamic component index, can coexist with a swizzle, done after the swizzle, NoResult if not present
         Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present
         bool isRValue;                 // true if 'base' is an r-value, otherwise, base is an l-value
+
+        // Accumulate whether anything in the chain of structures has coherent decorations.
+        struct CoherentFlags {
+            unsigned coherent : 1;
+            unsigned devicecoherent : 1;
+            unsigned queuefamilycoherent : 1;
+            unsigned workgroupcoherent : 1;
+            unsigned subgroupcoherent : 1;
+            unsigned nonprivate : 1;
+            unsigned volatil : 1;
+            unsigned isImage : 1;
+
+            void clear() {
+                coherent = 0;
+                devicecoherent = 0;
+                queuefamilycoherent = 0;
+                workgroupcoherent = 0;
+                subgroupcoherent = 0;
+                nonprivate = 0;
+                volatil = 0;
+                isImage = 0;
+            }
+
+            CoherentFlags() { clear(); }
+            CoherentFlags operator |=(const CoherentFlags &other) {
+                coherent |= other.coherent;
+                devicecoherent |= other.devicecoherent;
+                queuefamilycoherent |= other.queuefamilycoherent;
+                workgroupcoherent |= other.workgroupcoherent;
+                subgroupcoherent |= other.subgroupcoherent;
+                nonprivate |= other.nonprivate;
+                volatil |= other.volatil;
+                isImage |= other.isImage;
+                return *this;
+            }
+        };
+        CoherentFlags coherentFlags;
     };
 
     //
@@ -531,9 +578,10 @@
     }
 
     // push offset onto the end of the chain
-    void accessChainPush(Id offset)
+    void accessChainPush(Id offset, AccessChain::CoherentFlags coherentFlags)
     {
         accessChain.indexChain.push_back(offset);
+        accessChain.coherentFlags |= coherentFlags;
     }
 
     // push new swizzle onto the end of any existing swizzle, merging into a single swizzle
@@ -551,10 +599,10 @@
     }
 
     // use accessChain and swizzle to store value
-    void accessChainStore(Id rvalue);
+    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType);
+    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax);
 
     // get the direct pointer for an l-value
     Id accessChainGetLValue();
@@ -563,9 +611,17 @@
     // based on the type of the base and the chain of dereferences.
     Id accessChainGetInferredType();
 
-    // Remove OpDecorate instructions whose operands are defined in unreachable
-    // blocks.
-    void eliminateDeadDecorations();
+    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // based on the resulting SPIR-V.
+    void postProcess();
+
+    // Hook to visit each instruction in a block in a function
+    void postProcess(const Instruction&);
+    // Hook to visit each instruction in a reachable block in a function.
+    void postProcessReachable(const Instruction&);
+    // Hook to visit each non-32-bit sized float/int operation in a block.
+    void postProcessType(const Instruction&, spv::Id typeId);
+
     void dump(std::vector<unsigned int>&) const;
 
     void createBranch(Block* block);
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
new file mode 100755
index 0000000..27f145d
--- /dev/null
+++ b/SPIRV/SpvPostProcess.cpp
@@ -0,0 +1,265 @@
+//
+// Copyright (C) 2016-2018 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+//
+// Post-processing for SPIR-V IR, in internal form, not standard binary form.
+//
+
+#include <cassert>
+#include <cstdlib>
+
+#include <unordered_set>
+#include <algorithm>
+
+#include "SpvBuilder.h"
+
+#include "spirv.hpp"
+#include "GlslangToSpv.h"
+#include "SpvBuilder.h"
+namespace spv {
+    #include "GLSL.std.450.h"
+    #include "GLSL.ext.KHR.h"
+    #include "GLSL.ext.EXT.h"
+#ifdef AMD_EXTENSIONS
+    #include "GLSL.ext.AMD.h"
+#endif
+#ifdef NV_EXTENSIONS
+    #include "GLSL.ext.NV.h"
+#endif
+}
+
+namespace spv {
+
+// Hook to visit each operand type and result type of an instruction.
+// Will be called multiple times for one instruction, once for each typed
+// operand and the result.
+void Builder::postProcessType(const Instruction& inst, Id typeId)
+{
+    // Characterize the type being questioned
+    Id basicTypeOp = getMostBasicTypeClass(typeId);
+    int width = 0;
+    if (basicTypeOp == OpTypeFloat || basicTypeOp == OpTypeInt)
+        width = getScalarTypeWidth(typeId);
+
+    // Do opcode-specific checks
+    switch (inst.getOpCode()) {
+    case OpLoad:
+    case OpStore:
+        if (basicTypeOp == OpTypeStruct) {
+            if (containsType(typeId, OpTypeInt, 8))
+                addCapability(CapabilityInt8);
+            if (containsType(typeId, OpTypeInt, 16))
+                addCapability(CapabilityInt16);
+            if (containsType(typeId, OpTypeFloat, 16))
+                addCapability(CapabilityFloat16);
+        } else {
+            StorageClass storageClass = getStorageClass(inst.getIdOperand(0));
+            if (width == 8) {
+                switch (storageClass) {
+                case StorageClassUniform:
+                case StorageClassStorageBuffer:
+                case StorageClassPushConstant:
+                    break;
+                default:
+                    addCapability(CapabilityInt8);
+                    break;
+                }
+            } else if (width == 16) {
+                switch (storageClass) {
+                case StorageClassUniform:
+                case StorageClassStorageBuffer:
+                case StorageClassPushConstant:
+                case StorageClassInput:
+                case StorageClassOutput:
+                    break;
+                default:
+                    if (basicTypeOp == OpTypeInt)
+                        addCapability(CapabilityInt16);
+                    if (basicTypeOp == OpTypeFloat)
+                        addCapability(CapabilityFloat16);
+                    break;
+                }
+            }
+        }
+        break;
+    case OpAccessChain:
+    case OpPtrAccessChain:
+    case OpCopyObject:
+    case OpFConvert:
+    case OpSConvert:
+    case OpUConvert:
+        break;
+    case OpExtInst:
+        switch (inst.getImmediateOperand(1)) {
+#if AMD_EXTENSIONS
+        case GLSLstd450Frexp:
+        case GLSLstd450FrexpStruct:
+            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16))
+                addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+            break;
+        case GLSLstd450InterpolateAtCentroid:
+        case GLSLstd450InterpolateAtSample:
+        case GLSLstd450InterpolateAtOffset:
+            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16))
+                addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+            break;
+#endif
+        default:
+            break;
+        }
+        break;
+    default:
+        if (basicTypeOp == OpTypeFloat && width == 16)
+            addCapability(CapabilityFloat16);
+        if (basicTypeOp == OpTypeInt && width == 16)
+            addCapability(CapabilityInt16);
+        if (basicTypeOp == OpTypeInt && width == 8)
+            addCapability(CapabilityInt8);
+        break;
+    }
+}
+
+// Called for each instruction that resides in a block.
+void Builder::postProcess(const Instruction& inst)
+{
+    // Add capabilities based simply on the opcode.
+    switch (inst.getOpCode()) {
+    case OpExtInst:
+        switch (inst.getImmediateOperand(1)) {
+        case GLSLstd450InterpolateAtCentroid:
+        case GLSLstd450InterpolateAtSample:
+        case GLSLstd450InterpolateAtOffset:
+            addCapability(CapabilityInterpolationFunction);
+            break;
+        default:
+            break;
+        }
+        break;
+    case OpDPdxFine:
+    case OpDPdyFine:
+    case OpFwidthFine:
+    case OpDPdxCoarse:
+    case OpDPdyCoarse:
+    case OpFwidthCoarse:
+        addCapability(CapabilityDerivativeControl);
+        break;
+
+    case OpImageQueryLod:
+    case OpImageQuerySize:
+    case OpImageQuerySizeLod:
+    case OpImageQuerySamples:
+    case OpImageQueryLevels:
+        addCapability(CapabilityImageQuery);
+        break;
+
+#ifdef NV_EXTENSIONS
+    case OpGroupNonUniformPartitionNV:
+        addExtension(E_SPV_NV_shader_subgroup_partitioned);
+        addCapability(CapabilityGroupNonUniformPartitionedNV);
+        break;
+#endif
+
+    default:
+        break;
+    }
+
+    // Checks based on type
+    if (inst.getTypeId() != NoType)
+        postProcessType(inst, inst.getTypeId());
+    for (int op = 0; op < inst.getNumOperands(); ++op) {
+        if (inst.isIdOperand(op)) {
+            // In blocks, these are always result ids, but we are relying on
+            // getTypeId() to return NoType for things like OpLabel.
+            if (getTypeId(inst.getIdOperand(op)) != NoType)
+                postProcessType(inst, getTypeId(inst.getIdOperand(op)));
+        }
+    }
+}
+
+// Called for each instruction in a reachable block.
+void Builder::postProcessReachable(const Instruction& inst)
+{
+    // did have code here, but questionable to do so without deleting the instructions
+}
+
+// comment in header
+void Builder::postProcess()
+{
+    std::unordered_set<const Block*> reachableBlocks;
+    std::unordered_set<Id> unreachableDefinitions;
+    // Collect IDs defined in unreachable blocks. For each function, label the
+    // reachable blocks first. Then for each unreachable block, collect the
+    // result IDs of the instructions in it.
+    for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
+        Function* f = *fi;
+        Block* entry = f->getEntryBlock();
+        inReadableOrder(entry, [&reachableBlocks](const Block* b) { reachableBlocks.insert(b); });
+        for (auto bi = f->getBlocks().cbegin(); bi != f->getBlocks().cend(); bi++) {
+            Block* b = *bi;
+            if (reachableBlocks.count(b) == 0) {
+                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
+                    unreachableDefinitions.insert(ii->get()->getResultId());
+            }
+        }
+    }
+
+    // Remove unneeded decorations, for unreachable instructions
+    decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
+        [&unreachableDefinitions](std::unique_ptr<Instruction>& I) -> bool {
+            Id decoration_id = I.get()->getIdOperand(0);
+            return unreachableDefinitions.count(decoration_id) != 0;
+        }),
+        decorations.end());
+
+    // Add per-instruction capabilities, extensions, etc.,
+
+    // process all reachable instructions...
+    for (auto bi = reachableBlocks.cbegin(); bi != reachableBlocks.cend(); ++bi) {
+        const Block* block = *bi;
+        const auto function = [this](const std::unique_ptr<Instruction>& inst) { postProcessReachable(*inst.get()); };
+        std::for_each(block->getInstructions().begin(), block->getInstructions().end(), function);
+    }
+
+    // process all block-contained instructions
+    for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
+        Function* f = *fi;
+        for (auto bi = f->getBlocks().cbegin(); bi != f->getBlocks().cend(); bi++) {
+            Block* b = *bi;
+            for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
+                postProcess(*ii->get());
+        }
+    }
+}
+
+}; // end spv namespace
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
new file mode 100755
index 0000000..4807b42
--- /dev/null
+++ b/SPIRV/SpvTools.cpp
@@ -0,0 +1,188 @@
+//
+// Copyright (C) 2014-2016 LunarG, Inc.
+// Copyright (C) 2018 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+//
+// Call into SPIRV-Tools to disassemble, validate, and optimize.
+//
+
+#if ENABLE_OPT
+
+#include <cstdio>
+#include <iostream>
+
+#include "SpvTools.h"
+#include "spirv-tools/optimizer.hpp"
+#include "spirv-tools/libspirv.h"
+
+namespace glslang {
+
+// Translate glslang's view of target versioning to what SPIRV-Tools uses.
+spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger)
+{
+    switch (spvVersion.vulkan) {
+    case glslang::EShTargetVulkan_1_0: return spv_target_env::SPV_ENV_VULKAN_1_0;
+    case glslang::EShTargetVulkan_1_1: return spv_target_env::SPV_ENV_VULKAN_1_1;
+    default:
+        break;
+    }
+
+    if (spvVersion.openGl > 0)
+        return spv_target_env::SPV_ENV_OPENGL_4_5;
+
+    logger->missingFunctionality("Target version for SPIRV-Tools validator");
+    return spv_target_env::SPV_ENV_UNIVERSAL_1_0;
+}
+
+
+// Use the SPIRV-Tools disassembler to print SPIR-V.
+void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
+{
+    // disassemble
+    spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
+    spv_text text;
+    spv_diagnostic diagnostic = nullptr;
+    spvBinaryToText(context, spirv.data(), spirv.size(),
+        SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES | SPV_BINARY_TO_TEXT_OPTION_INDENT,
+        &text, &diagnostic);
+
+    // dump
+    if (diagnostic == nullptr)
+        out << text->str;
+    else
+        spvDiagnosticPrint(diagnostic);
+
+    // teardown
+    spvDiagnosticDestroy(diagnostic);
+    spvContextDestroy(context);
+}
+
+// Apply the SPIRV-Tools validator to generated SPIR-V.
+void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger* logger)
+{
+    // validate
+    spv_context context = spvContextCreate(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
+    spv_const_binary_t binary = { spirv.data(), spirv.size() };
+    spv_diagnostic diagnostic = nullptr;
+    spv_validator_options options = spvValidatorOptionsCreate();
+    spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets());
+    spvValidateWithOptions(context, options, &binary, &diagnostic);
+
+    // report
+    if (diagnostic != nullptr) {
+        logger->error("SPIRV-Tools Validation Errors");
+        logger->error(diagnostic->error);
+    }
+
+    // tear down
+    spvValidatorOptionsDestroy(options);
+    spvDiagnosticDestroy(diagnostic);
+    spvContextDestroy(context);
+}
+
+// Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
+// legalizing HLSL SPIR-V.
+void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger* logger, const SpvOptions* options)
+{
+    spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
+
+    spvtools::Optimizer optimizer(target_env);
+    optimizer.SetMessageConsumer(
+        [](spv_message_level_t level, const char *source, const spv_position_t &position, const char *message) {
+            auto &out = std::cerr;
+            switch (level)
+            {
+            case SPV_MSG_FATAL:
+            case SPV_MSG_INTERNAL_ERROR:
+            case SPV_MSG_ERROR:
+                out << "error: ";
+                break;
+            case SPV_MSG_WARNING:
+                out << "warning: ";
+                break;
+            case SPV_MSG_INFO:
+            case SPV_MSG_DEBUG:
+                out << "info: ";
+                break;
+            default:
+                break;
+            }
+            if (source)
+            {
+                out << source << ":";
+            }
+            out << position.line << ":" << position.column << ":" << position.index << ":";
+            if (message)
+            {
+                out << " " << message;
+            }
+            out << std::endl;
+        });
+
+    optimizer.RegisterPass(spvtools::CreateMergeReturnPass());
+    optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass());
+    optimizer.RegisterPass(spvtools::CreateEliminateDeadFunctionsPass());
+    optimizer.RegisterPass(spvtools::CreateScalarReplacementPass());
+    optimizer.RegisterPass(spvtools::CreateLocalAccessChainConvertPass());
+    optimizer.RegisterPass(spvtools::CreateLocalSingleBlockLoadStoreElimPass());
+    optimizer.RegisterPass(spvtools::CreateLocalSingleStoreElimPass());
+    optimizer.RegisterPass(spvtools::CreateSimplificationPass());
+    optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+    optimizer.RegisterPass(spvtools::CreateVectorDCEPass());
+    optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());
+    optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+    optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
+    optimizer.RegisterPass(spvtools::CreateBlockMergePass());
+    optimizer.RegisterPass(spvtools::CreateLocalMultiStoreElimPass());
+    optimizer.RegisterPass(spvtools::CreateIfConversionPass());
+    optimizer.RegisterPass(spvtools::CreateSimplificationPass());
+    optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+    optimizer.RegisterPass(spvtools::CreateVectorDCEPass());
+    optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());
+    if (options->optimizeSize) {
+        optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
+        // TODO(greg-lunarg): Add this when AMD driver issues are resolved
+        // optimizer.RegisterPass(CreateCommonUniformElimPass());
+    }
+    optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+    optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
+
+    optimizer.Run(spirv.data(), spirv.size(), &spirv, spvtools::ValidatorOptions(), true);
+}
+
+}; // end namespace glslang
+
+#endif
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
new file mode 100755
index 0000000..08bcf3a
--- /dev/null
+++ b/SPIRV/SpvTools.h
@@ -0,0 +1,80 @@
+//
+// Copyright (C) 2014-2016 LunarG, Inc.
+// Copyright (C) 2018 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+//
+// Call into SPIRV-Tools to disassemble, validate, and optimize.
+//
+
+#pragma once
+#ifndef GLSLANG_SPV_TOOLS_H
+#define GLSLANG_SPV_TOOLS_H
+
+#include <vector>
+#include <ostream>
+
+#include "../glslang/MachineIndependent/localintermediate.h"
+#include "Logger.h"
+
+namespace glslang {
+
+struct SpvOptions {
+    SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
+        optimizeSize(false), disassemble(false), validate(false) { }
+    bool generateDebugInfo;
+    bool disableOptimizer;
+    bool optimizeSize;
+    bool disassemble;
+    bool validate;
+};
+
+#if ENABLE_OPT
+
+// Use the SPIRV-Tools disassembler to print SPIR-V.
+void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
+
+// Apply the SPIRV-Tools validator to generated SPIR-V.
+void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger*);
+
+// Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
+// legalizing HLSL SPIR-V.
+void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger*, const SpvOptions*);
+
+#endif
+
+}; // end namespace glslang
+
+#endif // GLSLANG_SPV_TOOLS_H
\ No newline at end of file
diff --git a/SPIRV/bitutils.h b/SPIRV/bitutils.h
index 31288ab..22e44ce 100644
--- a/SPIRV/bitutils.h
+++ b/SPIRV/bitutils.h
@@ -26,7 +26,7 @@
   Dest dest;
   static_assert(sizeof(source) == sizeof(dest),
                 "BitwiseCast: Source and destination must have the same size");
-  std::memcpy(&dest, &source, sizeof(dest));
+  std::memcpy(static_cast<void*>(&dest), &source, sizeof(dest));
   return dest;
 }
 
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
old mode 100755
new mode 100644
index a8efd69..22c83ea
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -46,6 +46,7 @@
 
 #include "disassemble.h"
 #include "doc.h"
+#include "SpvTools.h"
 
 namespace spv {
     extern "C" {
@@ -509,7 +510,9 @@
                 }else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
                           strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 ||
                           strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 ||
-                          strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) {
+                          strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 || 
+                          strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
+                          strcmp(spv::E_SPV_NV_mesh_shader, name) == 0) {
                     extInstSet = GLSLextNVInst;
 #endif
                 }
@@ -534,6 +537,11 @@
         case OperandLiteralString:
             numOperands -= disassembleString();
             break;
+        case OperandMemoryAccess:
+            outputMask(OperandMemoryAccess, stream[word++]);
+            --numOperands;
+            disassembleIds(numOperands);
+            return;
         default:
             assert(operandClass >= OperandSource && operandClass < OperandOpcode);
 
@@ -685,21 +693,45 @@
         strcmp(name, spv::E_SPV_NV_geometry_shader_passthrough) == 0 ||
         strcmp(name, spv::E_ARB_shader_viewport_layer_array) == 0 ||
         strcmp(name, spv::E_SPV_NV_viewport_array2) == 0 ||
-        strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) {
+        strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 ||
+        strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
+        strcmp(name, spv::E_SPV_NV_mesh_shader) == 0) {
         switch (entrypoint) {
-        case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
-        case DecorationPassthroughNV:               return "PassthroughNV";
-        case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
-        case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
+        // NV builtins
         case BuiltInViewportMaskNV:                 return "ViewportMaskNV";
-        case CapabilityShaderViewportMaskNV:        return "ShaderViewportMaskNV";
-        case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
         case BuiltInSecondaryPositionNV:            return "SecondaryPositionNV";
         case BuiltInSecondaryViewportMaskNV:        return "SecondaryViewportMaskNV";
-        case CapabilityShaderStereoViewNV:          return "ShaderStereoViewNV";
         case BuiltInPositionPerViewNV:              return "PositionPerViewNV";
         case BuiltInViewportMaskPerViewNV:          return "ViewportMaskPerViewNV";
+        case BuiltInBaryCoordNV:                    return "BaryCoordNV";
+        case BuiltInBaryCoordNoPerspNV:             return "BaryCoordNoPerspNV";
+        case BuiltInTaskCountNV:                    return "TaskCountNV";
+        case BuiltInPrimitiveCountNV:               return "PrimitiveCountNV";
+        case BuiltInPrimitiveIndicesNV:             return "PrimitiveIndicesNV";
+        case BuiltInClipDistancePerViewNV:          return "ClipDistancePerViewNV";
+        case BuiltInCullDistancePerViewNV:          return "CullDistancePerViewNV";
+        case BuiltInLayerPerViewNV:                 return "LayerPerViewNV";
+        case BuiltInMeshViewCountNV:                return "MeshViewCountNV";
+        case BuiltInMeshViewIndicesNV:              return "MeshViewIndicesNV";
+
+        // NV Capabilities
+        case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
+        case CapabilityShaderViewportMaskNV:        return "ShaderViewportMaskNV";
+        case CapabilityShaderStereoViewNV:          return "ShaderStereoViewNV";
         case CapabilityPerViewAttributesNV:         return "PerViewAttributesNV";
+        case CapabilityFragmentBarycentricNV:       return "FragmentBarycentricNV";
+        case CapabilityMeshShadingNV:               return "MeshShadingNV";
+
+        // NV Decorations
+        case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
+        case DecorationPassthroughNV:               return "PassthroughNV";
+        case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
+        case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+        case DecorationPerVertexNV:                 return "PerVertexNV";
+        case DecorationPerPrimitiveNV:              return "PerPrimitiveNV";
+        case DecorationPerViewNV:                   return "PerViewNV";
+        case DecorationPerTaskNV:                   return "PerTaskNV";
+
         default:                                    return "Bad";
         }
     }
@@ -716,25 +748,4 @@
     SpirvStream.processInstructions();
 }
 
-#if ENABLE_OPT
-
-#include "spirv-tools/libspirv.h"
-
-// Use the SPIRV-Tools disassembler to print SPIR-V.
-void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
-{
-    spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
-    spv_text text;
-    spv_diagnostic diagnostic = nullptr;
-    spvBinaryToText(context, &spirv.front(), spirv.size(),
-        SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES | SPV_BINARY_TO_TEXT_OPTION_INDENT,
-        &text, &diagnostic);
-    if (diagnostic == nullptr)
-        out << text->str;
-    else
-        spvDiagnosticPrint(diagnostic);
-}
-
-#endif
-
 }; // end namespace spv
diff --git a/SPIRV/disassemble.h b/SPIRV/disassemble.h
old mode 100755
new mode 100644
index bdde5cb..2a9a89b
--- a/SPIRV/disassemble.h
+++ b/SPIRV/disassemble.h
@@ -48,9 +48,6 @@
     // disassemble with glslang custom disassembler
     void Disassemble(std::ostream& out, const std::vector<unsigned int>&);
 
-    // disassemble with SPIRV-Tools disassembler
-    void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& stream);
-
 };  // end namespace spv
 
 #endif // disassembler_H
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
old mode 100755
new mode 100644
index ae32efe..dbbe97d
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -98,8 +98,22 @@
     case 4:  return "Fragment";
     case 5:  return "GLCompute";
     case 6:  return "Kernel";
+#ifdef NV_EXTENSIONS
+    case ExecutionModelTaskNV: return "TaskNV";
+    case ExecutionModelMeshNV: return "MeshNV";
+#endif
 
     default: return "Bad";
+
+#ifdef NV_EXTENSIONS
+    case ExecutionModelRayGenerationNVX: return "RayGenerationNVX";
+    case ExecutionModelIntersectionNVX:  return "IntersectionNVX";
+    case ExecutionModelAnyHitNVX:        return "AnyHitNVX";
+    case ExecutionModelClosestHitNVX:    return "ClosestHitNVX";
+    case ExecutionModelMissNVX:          return "MissNVX";
+    case ExecutionModelCallableNVX:      return "CallableNVX";
+#endif
+
     }
 }
 
@@ -117,9 +131,10 @@
 const char* MemoryString(int mem)
 {
     switch (mem) {
-    case 0:  return "Simple";
-    case 1:  return "GLSL450";
-    case 2:  return "OpenCL";
+    case MemoryModelSimple:     return "Simple";
+    case MemoryModelGLSL450:    return "GLSL450";
+    case MemoryModelOpenCL:     return "OpenCL";
+    case MemoryModelVulkanKHR:  return "VulkanKHR";
 
     default: return "Bad";
     }
@@ -165,6 +180,15 @@
     case 32: return "Bad";
 
     case 4446:  return "PostDepthCoverage";
+
+#ifdef NV_EXTENSIONS
+    case ExecutionModeOutputLinesNV:            return "OutputLinesNV";
+    case ExecutionModeOutputPrimitivesNV:       return "OutputPrimitivesNV";
+    case ExecutionModeOutputTrianglesNV:        return "OutputTrianglesNV";
+    case ExecutionModeDerivativeGroupQuadsNV:   return "DerivativeGroupQuadsNV";
+    case ExecutionModeDerivativeGroupLinearNV:  return "DerivativeGroupLinearNV";
+#endif
+
     case ExecutionModeCeiling:
     default: return "Bad";
     }
@@ -187,6 +211,13 @@
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
+#ifdef NV_EXTENSIONS
+    case StorageClassRayPayloadNVX:         return "RayPayloadNVX";
+    case StorageClassHitAttributeNVX:       return "HitAttributeNVX";
+    case StorageClassIncomingRayPayloadNVX: return "IncomingRayPayloadNVX";
+    case StorageClassShaderRecordBufferNVX: return "ShaderRecordBufferNVX";
+#endif
+
     default: return "Bad";
     }
 }
@@ -253,6 +284,10 @@
     case DecorationPassthroughNV:               return "PassthroughNV";
     case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
     case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+    case DecorationPerPrimitiveNV:              return "PerPrimitiveNV";
+    case DecorationPerViewNV:                   return "PerViewNV";
+    case DecorationPerTaskNV:                   return "PerTaskNV";
+    case DecorationPerVertexNV:                 return "PerVertexNV";
 #endif
 
     case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
@@ -332,15 +367,44 @@
 #endif
 
 #ifdef NV_EXTENSIONS
-    case 5253: return "ViewportMaskNV";
-    case 5257: return "SecondaryPositionNV";
-    case 5258: return "SecondaryViewportMaskNV";
-    case 5261: return "PositionPerViewNV";
-    case 5262: return "ViewportMaskPerViewNV";
+    case BuiltInLaunchIdNVX:                return "LaunchIdNVX";
+    case BuiltInLaunchSizeNVX:              return "LaunchSizeNVX";
+    case BuiltInWorldRayOriginNVX:          return "WorldRayOriginNVX";
+    case BuiltInWorldRayDirectionNVX:       return "WorldRayDirectionNVX";
+    case BuiltInObjectRayOriginNVX:         return "ObjectRayOriginNVX";
+    case BuiltInObjectRayDirectionNVX:      return "ObjectRayDirectionNVX";
+    case BuiltInRayTminNVX:                 return "RayTminNVX";
+    case BuiltInRayTmaxNVX:                 return "RayTmaxNVX";
+    case BuiltInInstanceCustomIndexNVX:     return "InstanceCustomIndexNVX";
+    case BuiltInObjectToWorldNVX:           return "ObjectToWorldNVX";
+    case BuiltInWorldToObjectNVX:           return "WorldToObjectNVX";
+    case BuiltInHitTNVX:                    return "HitTNVX";
+    case BuiltInHitKindNVX:                 return "HitKindNVX";
+    case BuiltInViewportMaskNV:             return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV:        return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV:          return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
+    case BuiltInFragmentSizeNV:             return "FragmentSizeNV";
+    case BuiltInInvocationsPerPixelNV:      return "InvocationsPerPixelNV";
+    case BuiltInBaryCoordNV:                return "BaryCoordNV";
+    case BuiltInBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
 #endif
 
     case 5264: return "FullyCoveredEXT";
 
+
+#ifdef NV_EXTENSIONS
+    case BuiltInTaskCountNV:           return "TaskCountNV";
+    case BuiltInPrimitiveCountNV:      return "PrimitiveCountNV";
+    case BuiltInPrimitiveIndicesNV:    return "PrimitiveIndicesNV";
+    case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
+    case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
+    case BuiltInLayerPerViewNV:        return "LayerPerViewNV";
+    case BuiltInMeshViewCountNV:       return "MeshViewCountNV";
+    case BuiltInMeshViewIndicesNV:     return "MeshViewIndicesNV";
+#endif
+
     default: return "Bad";
     }
 }
@@ -499,19 +563,23 @@
     }
 }
 
-const int ImageOperandsCeiling = 8;
+const int ImageOperandsCeiling = 12;
 
 const char* ImageOperandsString(int format)
 {
     switch (format) {
-    case 0: return "Bias";
-    case 1: return "Lod";
-    case 2: return "Grad";
-    case 3: return "ConstOffset";
-    case 4: return "Offset";
-    case 5: return "ConstOffsets";
-    case 6: return "Sample";
-    case 7: return "MinLod";
+    case ImageOperandsBiasShift:                    return "Bias";
+    case ImageOperandsLodShift:                     return "Lod";
+    case ImageOperandsGradShift:                    return "Grad";
+    case ImageOperandsConstOffsetShift:             return "ConstOffset";
+    case ImageOperandsOffsetShift:                  return "Offset";
+    case ImageOperandsConstOffsetsShift:            return "ConstOffsets";
+    case ImageOperandsSampleShift:                  return "Sample";
+    case ImageOperandsMinLodShift:                  return "MinLod";
+    case ImageOperandsMakeTexelAvailableKHRShift:   return "MakeTexelAvailableKHR";
+    case ImageOperandsMakeTexelVisibleKHRShift:     return "MakeTexelVisibleKHR";
+    case ImageOperandsNonPrivateTexelKHRShift:      return "NonPrivateTexelKHR";
+    case ImageOperandsVolatileTexelKHRShift:        return "VolatileTexelKHR";
 
     case ImageOperandsCeiling:
     default:
@@ -645,12 +713,17 @@
     }
 }
 
+const int MemoryAccessCeiling = 6;
+
 const char* MemoryAccessString(int mem)
 {
     switch (mem) {
-    case 0:  return "Volatile";
-    case 1:  return "Aligned";
-    case 2:  return "Nontemporal";
+    case MemoryAccessVolatileShift:                 return "Volatile";
+    case MemoryAccessAlignedShift:                  return "Aligned";
+    case MemoryAccessNontemporalShift:              return "Nontemporal";
+    case MemoryAccessMakePointerAvailableKHRShift:  return "MakePointerAvailableKHR";
+    case MemoryAccessMakePointerVisibleKHRShift:    return "MakePointerVisibleKHR";
+    case MemoryAccessNonPrivatePointerKHRShift:     return "NonPrivatePointerKHR";
 
     default: return "Bad";
     }
@@ -810,12 +883,18 @@
 
     case CapabilitySampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
 #ifdef NV_EXTENSIONS
-    case CapabilityGeometryShaderPassthroughNV:  return "GeometryShaderPassthroughNV";
-    case CapabilityShaderViewportIndexLayerNV:   return "ShaderViewportIndexLayerNV";
-    case CapabilityShaderViewportMaskNV:         return "ShaderViewportMaskNV";
-    case CapabilityShaderStereoViewNV:           return "ShaderStereoViewNV";
-    case CapabilityPerViewAttributesNV:          return "PerViewAttributesNV";
-    case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
+    case CapabilityGeometryShaderPassthroughNV:     return "GeometryShaderPassthroughNV";
+    case CapabilityShaderViewportIndexLayerNV:      return "ShaderViewportIndexLayerNV";
+    case CapabilityShaderViewportMaskNV:            return "ShaderViewportMaskNV";
+    case CapabilityShaderStereoViewNV:              return "ShaderStereoViewNV";
+    case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
+    case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
+    case CapabilityRaytracingNVX:                   return "RaytracingNVX";
+    case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
+    case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
+    case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
+    case CapabilityMeshShadingNV:                   return "MeshShadingNV";
+    case CapabilityShadingRateNV:                   return "ShadingRateNV";
 #endif
 
     case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
@@ -833,6 +912,9 @@
     case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "CapabilityUniformTexelBufferArrayNonUniformIndexingEXT";
     case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "CapabilityStorageTexelBufferArrayNonUniformIndexingEXT";
 
+    case CapabilityVulkanMemoryModelKHR:                return "CapabilityVulkanMemoryModelKHR";
+    case CapabilityVulkanMemoryModelDeviceScopeKHR:     return "CapabilityVulkanMemoryModelDeviceScopeKHR";
+
     default: return "Bad";
     }
 }
@@ -1225,8 +1307,16 @@
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
 #ifdef NV_EXTENSIONS
-    case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+    case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
+    case OpReportIntersectionNVX:            return "OpReportIntersectionNVX";
+    case OpIgnoreIntersectionNVX:            return "OpIgnoreIntersectionNVX";
+    case OpTerminateRayNVX:                  return "OpTerminateRayNVX";
+    case OpTraceNVX:                         return "OpTraceNVX";
+    case OpTypeAccelerationStructureNVX:     return "OpTypeAccelerationStructureNVX";
+    case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
+    case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
 #endif
+
     default:
         return "Bad";
     }
@@ -1245,6 +1335,7 @@
 EnumParameters LoopControlParams[FunctionControlCeiling];
 EnumParameters SelectionControlParams[SelectControlCeiling];
 EnumParameters FunctionControlParams[FunctionControlCeiling];
+EnumParameters MemoryAccessParams[MemoryAccessCeiling];
 
 // Set up all the parameterizing descriptions of the opcodes, operands, etc.
 void Parameterize()
@@ -1400,7 +1491,7 @@
     OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
     OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
     OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
-    OperandClassParams[OperandMemoryAccess].set(0, MemoryAccessString, nullptr, true);
+    OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
     OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
     OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
     OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
@@ -1522,10 +1613,14 @@
 
     InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
+    InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
+    InstructionDesc[OpLoad].operands.push(OperandId, "", true);
 
     InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
     InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
+    InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
+    InstructionDesc[OpStore].operands.push(OperandId, "", true);
 
     InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
 
@@ -2566,6 +2661,38 @@
 
 #ifdef NV_EXTENSIONS
     InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+
+    InstructionDesc[OpTypeAccelerationStructureNVX].setResultAndType(true, false);
+
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'NV Acceleration Structure'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Flags'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Cull Mask'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'SBT Record Offset'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'SBT Record Stride'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Miss Index'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Origin'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'TMin'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Ray Direction'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'TMax'");
+    InstructionDesc[OpTraceNVX].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpTraceNVX].setResultAndType(false, false);
+
+    InstructionDesc[OpReportIntersectionNVX].operands.push(OperandId, "'Hit Parameter'");
+    InstructionDesc[OpReportIntersectionNVX].operands.push(OperandId, "'Hit Kind'");
+
+    InstructionDesc[OpIgnoreIntersectionNVX].setResultAndType(false, false);
+
+    InstructionDesc[OpTerminateRayNVX].setResultAndType(false, false);
+    
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
+    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
+    
+    InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
+    InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
 #endif
 }
 
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
old mode 100755
new mode 100644
index f16c296..14605b8
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -73,6 +73,14 @@
     ExecutionModelFragment = 4,
     ExecutionModelGLCompute = 5,
     ExecutionModelKernel = 6,
+    ExecutionModelTaskNV = 5267,
+    ExecutionModelMeshNV = 5268,
+    ExecutionModelRayGenerationNVX = 5313,
+    ExecutionModelIntersectionNVX = 5314,
+    ExecutionModelAnyHitNVX = 5315,
+    ExecutionModelClosestHitNVX = 5316,
+    ExecutionModelMissNVX = 5317,
+    ExecutionModelCallableNVX = 5318,
     ExecutionModelMax = 0x7fffffff,
 };
 
@@ -87,6 +95,7 @@
     MemoryModelSimple = 0,
     MemoryModelGLSL450 = 1,
     MemoryModelOpenCL = 2,
+    MemoryModelVulkanKHR = 3,
     MemoryModelMax = 0x7fffffff,
 };
 
@@ -131,6 +140,11 @@
     ExecutionModeLocalSizeHintId = 39,
     ExecutionModePostDepthCoverage = 4446,
     ExecutionModeStencilRefReplacingEXT = 5027,
+    ExecutionModeOutputLinesNV = 5269,
+    ExecutionModeOutputPrimitivesNV = 5270,
+    ExecutionModeDerivativeGroupQuadsNV = 5289,
+    ExecutionModeDerivativeGroupLinearNV = 5290,
+    ExecutionModeOutputTrianglesNV = 5298,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -148,6 +162,10 @@
     StorageClassAtomicCounter = 10,
     StorageClassImage = 11,
     StorageClassStorageBuffer = 12,
+    StorageClassRayPayloadNVX = 5338,
+    StorageClassHitAttributeNVX = 5339,
+    StorageClassIncomingRayPayloadNVX = 5342,
+    StorageClassShaderRecordBufferNVX = 5343,
     StorageClassMax = 0x7fffffff,
 };
 
@@ -275,6 +293,10 @@
     ImageOperandsConstOffsetsShift = 5,
     ImageOperandsSampleShift = 6,
     ImageOperandsMinLodShift = 7,
+    ImageOperandsMakeTexelAvailableKHRShift = 8,
+    ImageOperandsMakeTexelVisibleKHRShift = 9,
+    ImageOperandsNonPrivateTexelKHRShift = 10,
+    ImageOperandsVolatileTexelKHRShift = 11,
     ImageOperandsMax = 0x7fffffff,
 };
 
@@ -288,6 +310,10 @@
     ImageOperandsConstOffsetsMask = 0x00000020,
     ImageOperandsSampleMask = 0x00000040,
     ImageOperandsMinLodMask = 0x00000080,
+    ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
+    ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
+    ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
+    ImageOperandsVolatileTexelKHRMask = 0x00000800,
 };
 
 enum FPFastMathModeShift {
@@ -393,6 +419,10 @@
     DecorationPassthroughNV = 5250,
     DecorationViewportRelativeNV = 5252,
     DecorationSecondaryViewportRelativeNV = 5256,
+    DecorationPerPrimitiveNV = 5271,
+    DecorationPerViewNV = 5272,
+    DecorationPerTaskNV = 5273,
+    DecorationPerVertexNV = 5285,
     DecorationNonUniformEXT = 5300,
     DecorationHlslCounterBufferGOOGLE = 5634,
     DecorationHlslSemanticGOOGLE = 5635,
@@ -470,6 +500,31 @@
     BuiltInPositionPerViewNV = 5261,
     BuiltInViewportMaskPerViewNV = 5262,
     BuiltInFullyCoveredEXT = 5264,
+    BuiltInTaskCountNV = 5274,
+    BuiltInPrimitiveCountNV = 5275,
+    BuiltInPrimitiveIndicesNV = 5276,
+    BuiltInClipDistancePerViewNV = 5277,
+    BuiltInCullDistancePerViewNV = 5278,
+    BuiltInLayerPerViewNV = 5279,
+    BuiltInMeshViewCountNV = 5280,
+    BuiltInMeshViewIndicesNV = 5281,
+    BuiltInBaryCoordNV = 5286,
+    BuiltInBaryCoordNoPerspNV = 5287,
+    BuiltInFragmentSizeNV = 5292,
+    BuiltInInvocationsPerPixelNV = 5293,
+    BuiltInLaunchIdNVX = 5319,
+    BuiltInLaunchSizeNVX = 5320,
+    BuiltInWorldRayOriginNVX = 5321,
+    BuiltInWorldRayDirectionNVX = 5322,
+    BuiltInObjectRayOriginNVX = 5323,
+    BuiltInObjectRayDirectionNVX = 5324,
+    BuiltInRayTminNVX = 5325,
+    BuiltInRayTmaxNVX = 5326,
+    BuiltInInstanceCustomIndexNVX = 5327,
+    BuiltInObjectToWorldNVX = 5330,
+    BuiltInWorldToObjectNVX = 5331,
+    BuiltInHitTNVX = 5332,
+    BuiltInHitKindNVX = 5333,
     BuiltInMax = 0x7fffffff,
 };
 
@@ -528,6 +583,9 @@
     MemorySemanticsCrossWorkgroupMemoryShift = 9,
     MemorySemanticsAtomicCounterMemoryShift = 10,
     MemorySemanticsImageMemoryShift = 11,
+    MemorySemanticsOutputMemoryKHRShift = 12,
+    MemorySemanticsMakeAvailableKHRShift = 13,
+    MemorySemanticsMakeVisibleKHRShift = 14,
     MemorySemanticsMax = 0x7fffffff,
 };
 
@@ -543,12 +601,18 @@
     MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
     MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
     MemorySemanticsImageMemoryMask = 0x00000800,
+    MemorySemanticsOutputMemoryKHRMask = 0x00001000,
+    MemorySemanticsMakeAvailableKHRMask = 0x00002000,
+    MemorySemanticsMakeVisibleKHRMask = 0x00004000,
 };
 
 enum MemoryAccessShift {
     MemoryAccessVolatileShift = 0,
     MemoryAccessAlignedShift = 1,
     MemoryAccessNontemporalShift = 2,
+    MemoryAccessMakePointerAvailableKHRShift = 3,
+    MemoryAccessMakePointerVisibleKHRShift = 4,
+    MemoryAccessNonPrivatePointerKHRShift = 5,
     MemoryAccessMax = 0x7fffffff,
 };
 
@@ -557,6 +621,9 @@
     MemoryAccessVolatileMask = 0x00000001,
     MemoryAccessAlignedMask = 0x00000002,
     MemoryAccessNontemporalMask = 0x00000004,
+    MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+    MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+    MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
 };
 
 enum Scope {
@@ -565,6 +632,7 @@
     ScopeWorkgroup = 2,
     ScopeSubgroup = 3,
     ScopeInvocation = 4,
+    ScopeQueueFamilyKHR = 5,
     ScopeMax = 0x7fffffff,
 };
 
@@ -695,6 +763,11 @@
     CapabilityShaderStereoViewNV = 5259,
     CapabilityPerViewAttributesNV = 5260,
     CapabilityFragmentFullyCoveredEXT = 5265,
+    CapabilityMeshShadingNV = 5266,
+    CapabilityImageFootprintNV = 5282,
+    CapabilityFragmentBarycentricNV = 5284,
+    CapabilityComputeDerivativeGroupQuadsNV = 5288,
+    CapabilityShadingRateNV = 5291,
     CapabilityGroupNonUniformPartitionedNV = 5297,
     CapabilityShaderNonUniformEXT = 5301,
     CapabilityRuntimeDescriptorArrayEXT = 5302,
@@ -708,6 +781,10 @@
     CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
     CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
     CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
+    CapabilityRaytracingNVX = 5340,
+    CapabilityVulkanMemoryModelKHR = 5345,
+    CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
+    CapabilityComputeDerivativeGroupLinearNV = 5350,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1071,7 +1148,14 @@
     OpGroupSMaxNonUniformAMD = 5007,
     OpFragmentMaskFetchAMD = 5011,
     OpFragmentFetchAMD = 5012,
+    OpImageSampleFootprintNV = 5283,
     OpGroupNonUniformPartitionNV = 5296,
+    OpWritePackedPrimitiveIndices4x8NV = 5299,
+    OpReportIntersectionNVX = 5334,
+    OpIgnoreIntersectionNVX = 5335,
+    OpTerminateRayNVX = 5336,
+    OpTraceNVX = 5337,
+    OpTypeAccelerationStructureNVX = 5341,
     OpSubgroupShuffleINTEL = 5571,
     OpSubgroupShuffleDownINTEL = 5572,
     OpSubgroupShuffleUpINTEL = 5573,
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
old mode 100755
new mode 100644
index 8b6c644..2532b17
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -79,6 +79,11 @@
                                       MemorySemanticsAtomicCounterMemoryMask |
                                       MemorySemanticsImageMemoryMask);
 
+struct IdImmediate {
+    bool isId;      // true if word is an Id, false if word is an immediate
+    unsigned word;
+};
+
 //
 // SPIR-V IR instruction.
 //
@@ -88,8 +93,14 @@
     Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), block(nullptr) { }
     explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { }
     virtual ~Instruction() {}
-    void addIdOperand(Id id) { operands.push_back(id); }
-    void addImmediateOperand(unsigned int immediate) { operands.push_back(immediate); }
+    void addIdOperand(Id id) {
+        operands.push_back(id);
+        idOperand.push_back(true);
+    }
+    void addImmediateOperand(unsigned int immediate) {
+        operands.push_back(immediate);
+        idOperand.push_back(false);
+    }
     void addStringOperand(const char* str)
     {
         unsigned int word;
@@ -116,14 +127,25 @@
             addImmediateOperand(word);
         }
     }
+    bool isIdOperand(int op) const { return idOperand[op]; }
     void setBlock(Block* b) { block = b; }
     Block* getBlock() const { return block; }
     Op getOpCode() const { return opCode; }
-    int getNumOperands() const { return (int)operands.size(); }
+    int getNumOperands() const
+    {
+        assert(operands.size() == idOperand.size());
+        return (int)operands.size();
+    }
     Id getResultId() const { return resultId; }
     Id getTypeId() const { return typeId; }
-    Id getIdOperand(int op) const { return operands[op]; }
-    unsigned int getImmediateOperand(int op) const { return operands[op]; }
+    Id getIdOperand(int op) const {
+        assert(idOperand[op]);
+        return operands[op];
+    }
+    unsigned int getImmediateOperand(int op) const {
+        assert(!idOperand[op]);
+        return operands[op];
+    }
 
     // Write out the binary form.
     void dump(std::vector<unsigned int>& out) const
@@ -153,7 +175,8 @@
     Id resultId;
     Id typeId;
     Op opCode;
-    std::vector<Id> operands;
+    std::vector<Id> operands;     // operands, both <id> and immediates (both are unsigned int)
+    std::vector<bool> idOperand;  // true for operands that are <id>, false for immediates
     Block* block;
 };
 
@@ -331,7 +354,9 @@
 
     Instruction* getInstruction(Id id) const { return idToInstruction[id]; }
     const std::vector<Function*>& getFunctions() const { return functions; }
-    spv::Id getTypeId(Id resultId) const { return idToInstruction[resultId]->getTypeId(); }
+    spv::Id getTypeId(Id resultId) const {
+        return idToInstruction[resultId] == nullptr ? NoType : idToInstruction[resultId]->getTypeId();
+    }
     StorageClass getStorageClass(Id typeId) const
     {
         assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer);
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
old mode 100755
new mode 100644
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index e22ec80..66e79af 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -125,6 +125,16 @@
     /* .MaxCullDistances = */ 8,
     /* .MaxCombinedClipAndCullDistances = */ 8,
     /* .MaxSamples = */ 4,
+    /* .maxMeshOutputVerticesNV = */ 256,
+    /* .maxMeshOutputPrimitivesNV = */ 512,
+    /* .maxMeshWorkGroupSizeX_NV = */ 32,
+    /* .maxMeshWorkGroupSizeY_NV = */ 1,
+    /* .maxMeshWorkGroupSizeZ_NV = */ 1,
+    /* .maxTaskWorkGroupSizeX_NV = */ 32,
+    /* .maxTaskWorkGroupSizeY_NV = */ 1,
+    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
+    /* .maxMeshViewCountNV = */ 4,
+
     /* .limits = */ {
         /* .nonInductiveForLoops = */ 1,
         /* .whileLoops = */ 1,
@@ -224,7 +234,17 @@
             << "MaxCullDistances "                          << DefaultTBuiltInResource.maxCullDistances << "\n"
             << "MaxCombinedClipAndCullDistances "           << DefaultTBuiltInResource.maxCombinedClipAndCullDistances << "\n"
             << "MaxSamples "                                << DefaultTBuiltInResource.maxSamples << "\n"
-
+#ifdef NV_EXTENSIONS
+            << "MaxMeshOutputVerticesNV "                   << DefaultTBuiltInResource.maxMeshOutputVerticesNV << "\n"
+            << "MaxMeshOutputPrimitivesNV "                 << DefaultTBuiltInResource.maxMeshOutputPrimitivesNV << "\n"
+            << "MaxMeshWorkGroupSizeX_NV "                  << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_NV << "\n"
+            << "MaxMeshWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxMeshWorkGroupSizeY_NV << "\n"
+            << "MaxMeshWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxMeshWorkGroupSizeZ_NV << "\n"
+            << "MaxTaskWorkGroupSizeX_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeX_NV << "\n"
+            << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
+            << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
+            << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
+#endif
             << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
             << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
             << "doWhileLoops "                              << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
@@ -431,6 +451,26 @@
             resources->maxCombinedClipAndCullDistances = value;
         else if (tokenStr == "MaxSamples")
             resources->maxSamples = value;
+#ifdef NV_EXTENSIONS
+        else if (tokenStr == "MaxMeshOutputVerticesNV")
+            resources->maxMeshOutputVerticesNV = value;
+        else if (tokenStr == "MaxMeshOutputPrimitivesNV")
+            resources->maxMeshOutputPrimitivesNV = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeX_NV")
+            resources->maxMeshWorkGroupSizeX_NV = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeY_NV")
+            resources->maxMeshWorkGroupSizeY_NV = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeZ_NV")
+            resources->maxMeshWorkGroupSizeZ_NV = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeX_NV")
+            resources->maxTaskWorkGroupSizeX_NV = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeY_NV")
+            resources->maxTaskWorkGroupSizeY_NV = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeZ_NV")
+            resources->maxTaskWorkGroupSizeZ_NV = value;
+        else if (tokenStr == "MaxMeshViewCountNV")
+            resources->maxMeshViewCountNV = value;
+#endif
         else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
         else if (tokenStr == "whileLoops")
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
old mode 100755
new mode 100644
index a159bc8..fd14476
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -103,6 +103,7 @@
 };
 bool targetHlslFunctionality1 = false;
 bool SpvToolsDisassembler = false;
+bool SpvToolsValidate = false;
 
 //
 // Return codes from main/exit().
@@ -243,6 +244,16 @@
         case EShLangGeometry:        name = "geom.spv";    break;
         case EShLangFragment:        name = "frag.spv";    break;
         case EShLangCompute:         name = "comp.spv";    break;
+#ifdef NV_EXTENSIONS
+        case EShLangRayGenNV:        name = "rgen.spv";    break;
+        case EShLangIntersectNV:     name = "rint.spv";    break;
+        case EShLangAnyHitNV:        name = "rahit.spv";   break;
+        case EShLangClosestHitNV:    name = "rchit.spv";   break;
+        case EShLangMissNV:          name = "rmiss.spv";   break;
+        case EShLangCallableNV:      name = "rcall.spv";   break;
+        case EShLangMeshNV:          name = "mesh.spv";    break;
+        case EShLangTaskNV:          name = "task.spv";    break;
+#endif
         default:                     name = "unknown";     break;
         }
     } else
@@ -322,7 +333,7 @@
 
     for (int lang = langMin; lang < langMax; ++lang) {
         if (!perSetBase.empty())
-            baseBindingForSet[res][lang] = perSetBase;
+            baseBindingForSet[res][lang].insert(perSetBase.begin(), perSetBase.end());
         else
             baseBinding[res][lang] = singleBase;
     }
@@ -446,6 +457,11 @@
                                 Error("--client expects vulkan100 or opengl100");
                         }
                         bumpArg();
+                    } else if (lowerword == "entry-point") {
+                        entryPointName = argv[1];
+                        if (argc <= 1)
+                            Error("no <name> provided for --entry-point");
+                        bumpArg();
                     } else if (lowerword == "flatten-uniform-arrays" || // synonyms
                                lowerword == "flatten-uniform-array"  ||
                                lowerword == "fua") {
@@ -478,8 +494,8 @@
                                lowerword == "sib") {
                         ProcessBindingBase(argc, argv, glslang::EResImage);
                     } else if (lowerword == "shift-sampler-bindings" || // synonyms
-                        lowerword == "shift-sampler-binding"  ||
-                        lowerword == "ssb") {
+                               lowerword == "shift-sampler-binding"  ||
+                               lowerword == "ssb") {
                         ProcessBindingBase(argc, argv, glslang::EResSampler);
                     } else if (lowerword == "shift-uav-bindings" ||  // synonyms
                                lowerword == "shift-uav-binding"  ||
@@ -509,6 +525,8 @@
                         break;
                     } else if (lowerword == "spirv-dis") {
                         SpvToolsDisassembler = true;
+                    } else if (lowerword == "spirv-val") {
+                        SpvToolsValidate = true;
                     } else if (lowerword == "stdin") {
                         Options |= EOptionStdin;
                         shaderStageName = argv[1];
@@ -610,8 +628,6 @@
                     Options |= EOptionDefaultDesktop;
                 break;
             case 'e':
-                // HLSL todo: entry point handle needs much more sophistication.
-                // This is okay for one compilation unit with one entry point.
                 entryPointName = argv[1];
                 if (argc <= 1)
                     Error("no <name> provided for -e");
@@ -840,7 +856,7 @@
         const auto &compUnit = *it;
         glslang::TShader* shader = new glslang::TShader(compUnit.stage);
         shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count);
-        if (entryPointName) // HLSL todo: this needs to be tracked per compUnits
+        if (entryPointName)
             shader->setEntryPoint(entryPointName);
         if (sourceEntryPointName) {
             if (entryPointName == nullptr)
@@ -975,6 +991,8 @@
                         spvOptions.generateDebugInfo = true;
                     spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0;
                     spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0;
+                    spvOptions.disassemble = SpvToolsDisassembler;
+                    spvOptions.validate = SpvToolsValidate;
                     glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger, &spvOptions);
 
                     // Dump the spv to a file or stdout, etc., but only if not doing
@@ -986,13 +1004,6 @@
                         } else {
                             glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage));
                         }
-#if ENABLE_OPT
-                        if (SpvToolsDisassembler)
-                            spv::SpirvToolsDisassemble(std::cout, spirv);
-#else
-                        if (SpvToolsDisassembler)
-                            printf("SPIRV-Tools is not enabled; use -H for human readable SPIR-V\n");
-#endif
                         if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv))
                             spv::Disassemble(std::cout, spirv);
                     }
@@ -1205,7 +1216,12 @@
 //   .geom = geometry
 //   .frag = fragment
 //   .comp = compute
-//
+//   .rgen = ray generation
+//   .rint = ray intersection
+//   .rahit = ray any hit
+//   .rchit = ray closest hit
+//   .rmiss = ray miss
+//   .rcall = ray callable
 //   Additionally, the file names may end in .<stage>.glsl and .<stage>.hlsl
 //   where <stage> is one of the stages listed above.
 //
@@ -1249,6 +1265,24 @@
         return EShLangFragment;
     else if (stageName == "comp")
         return EShLangCompute;
+#ifdef NV_EXTENSIONS
+    else if (stageName == "rgen")
+        return EShLangRayGenNV;
+    else if (stageName == "rint")
+        return EShLangIntersectNV;
+    else if (stageName == "rahit")
+        return EShLangAnyHitNV;
+    else if (stageName == "rchit")
+        return EShLangClosestHitNV;
+    else if (stageName == "rmiss")
+        return EShLangMissNV;
+    else if (stageName == "rcall")
+        return EShLangCallableNV;
+    else if (stageName == "mesh")
+        return EShLangMeshNV;
+    else if (stageName == "task")
+        return EShLangTaskNV;
+#endif
 
     usage();
     return EShLangVertex;
@@ -1318,27 +1352,37 @@
            "    .geom   for a geometry shader\n"
            "    .frag   for a fragment shader\n"
            "    .comp   for a compute shader\n"
+#ifdef NV_EXTENSIONS
+           "    .mesh   for a mesh shader\n"
+           "    .task   for a task shader\n"
+           "    .rgen    for a ray generation shader\n"
+           "    .rint    for a ray intersection shader\n"
+           "    .rahit   for a ray any hit shader\n"
+           "    .rchit   for a ray closest hit shader\n"
+           "    .rmiss   for a ray miss shader\n"
+           "    .rcall   for a ray callable shader"
+#endif
            "    .glsl   for .vert.glsl, .tesc.glsl, ..., .comp.glsl compound suffixes\n"
            "    .hlsl   for .vert.hlsl, .tesc.hlsl, ..., .comp.hlsl compound suffixes\n"
            "\n"
            "Options:\n"
            "  -C          cascading errors; risk crash from accumulation of error recoveries\n"
-           "  -D          input is HLSL (default when any suffix is .hlsl)\n"
+           "  -D          input is HLSL (this is the default when any suffix is .hlsl)\n"
            "  -D<macro=def>\n"
            "  -D<macro>   define a pre-processor macro\n"
            "  -E          print pre-processed GLSL; cannot be used with -l;\n"
-           "              errors will appear on stderr.\n"
+           "              errors will appear on stderr\n"
            "  -G[ver]     create SPIR-V binary, under OpenGL semantics; turns on -l;\n"
-           "              default file name is <stage>.spv (-o overrides this)\n"
+           "              default file name is <stage>.spv (-o overrides this);\n"
            "              'ver', when present, is the version of the input semantics,\n"
-           "              which will appear in #define GL_SPIRV ver\n"
-           "              '--client opengl100' is the same as -G100\n"
+           "              which will appear in #define GL_SPIRV ver;\n"
+           "              '--client opengl100' is the same as -G100;\n"
            "              a '--target-env' for OpenGL will also imply '-G'\n"
            "  -H          print human readable form of SPIR-V; turns on -V\n"
            "  -I<dir>     add dir to the include search path; includer's directory\n"
            "              is searched first, followed by left-to-right order of -I\n"
-           "  -Od         disables optimization. May cause illegal SPIR-V for HLSL.\n"
-           "  -Os         optimizes SPIR-V to minimize size.\n"
+           "  -Od         disables optimization; may cause illegal SPIR-V for HLSL\n"
+           "  -Os         optimizes SPIR-V to minimize size\n"
            "  -S <stage>  uses specified stage rather than parsing the file extension\n"
            "              choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
            "  -U<macro>   undefine a pre-processor macro\n"
@@ -1352,10 +1396,11 @@
            "              creates the default configuration file (redirect to a .conf file)\n"
            "  -d          default to desktop (#version 110) when there is no shader #version\n"
            "              (default is ES version 100)\n"
-           "  -e <name>   specify <name> as the entry-point name\n"
+           "  -e <name> | --entry-point <name>\n"
+           "              specify <name> as the entry-point function name\n"
            "  -f{hlsl_functionality1}\n"
            "              'hlsl_functionality1' enables use of the\n"
-           "                  SPV_GOOGLE_hlsl_functionality1 extension\n"
+           "              SPV_GOOGLE_hlsl_functionality1 extension\n"
            "  -g          generate debug information\n"
            "  -h          print this usage message\n"
            "  -i          intermediate tree (glslang AST) is printed out\n"
@@ -1363,80 +1408,82 @@
            "  -m          memory leak mode\n"
            "  -o <file>   save binary to <file>, requires a binary option (e.g., -V)\n"
            "  -q          dump reflection query database\n"
-           "  -r          synonym for --relaxed-errors\n"
+           "  -r | --relaxed-errors"
+           "              relaxed GLSL semantic error-checking mode\n"
            "  -s          silence syntax and semantic error reporting\n"
            "  -t          multi-threaded mode\n"
-           "  -v          print version strings\n"
-           "  -w          synonym for --suppress-warnings\n"
+           "  -v | --version\n"
+           "              print version strings\n"
+           "  -w | --suppress-warnings\n"
+           "              suppress GLSL warnings, except as required by \"#extension : warn\"\n"
            "  -x          save binary output as text-based 32-bit hexadecimal numbers\n"
-           "  --auto-map-bindings                  automatically bind uniform variables\n"
-           "                                       without explicit bindings.\n"
-           "  --amb                                synonym for --auto-map-bindings\n"
-           "  --auto-map-locations                 automatically locate input/output lacking\n"
-           "                                       'location' (fragile, not cross stage)\n"
-           "  --aml                                synonym for --auto-map-locations\n"
-           "  --client {vulkan<ver>|opengl<ver>}   see -V and -G\n"
-           "  -dumpfullversion                     print bare major.minor.patchlevel\n"
-           "  -dumpversion                         same as -dumpfullversion\n"
-           "  --flatten-uniform-arrays             flatten uniform texture/sampler arrays to\n"
-           "                                       scalars\n"
-           "  --fua                                synonym for --flatten-uniform-arrays\n"
-           "  --hlsl-offsets                       Allow block offsets to follow HLSL rules\n"
-           "                                       Works independently of source language\n"
-           "  --hlsl-iomap                         Perform IO mapping in HLSL register space\n"
-           "  --hlsl-enable-16bit-types            Allow use of 16-bit types in SPIR-V for HLSL\n"
-           "  --invert-y | --iy                    invert position.Y output in vertex shader\n"
-           "  --keep-uncalled                      don't eliminate uncalled functions\n"
-           "  --ku                                 synonym for --keep-uncalled\n"
-           "  --no-storage-format                  use Unknown image format\n"
-           "  --nsf                                synonym for --no-storage-format\n"
-           "  --relaxed-errors                     relaxed GLSL semantic error-checking mode\n"
+           "  --auto-map-bindings | --amb       automatically bind uniform variables\n"
+           "                                    without explicit bindings\n"
+           "  --auto-map-locations | --aml      automatically locate input/output lacking\n"
+           "                                    'location' (fragile, not cross stage)\n"
+           "  --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
+           "  -dumpfullversion | -dumpversion   print bare major.minor.patchlevel\n"
+           "  --flatten-uniform-arrays | --fua  flatten uniform texture/sampler arrays to\n"
+           "                                    scalars\n"
+           "  --hlsl-offsets                    allow block offsets to follow HLSL rules\n"
+           "                                    works independently of source language\n"
+           "  --hlsl-iomap                      perform IO mapping in HLSL register space\n"
+           "  --hlsl-enable-16bit-types         allow 16-bit types in SPIR-V for HLSL\n"
+           "  --invert-y | --iy                 invert position.Y output in vertex shader\n"
+           "  --keep-uncalled | --ku            don't eliminate uncalled functions\n"
+           "  --no-storage-format | --nsf       use Unknown image format\n"
            "  --resource-set-binding [stage] name set binding\n"
-           "              Set descriptor set and binding for individual resources\n"
+           "                                    set descriptor set and binding for\n"
+           "                                    individual resources\n"
            "  --resource-set-binding [stage] set\n"
-           "              Set descriptor set for all resources\n"
-           "  --rsb [stage] type set binding       synonym for --resource-set-binding\n"
-           "  --shift-image-binding [stage] num    base binding number for images (uav)\n"
-           "  --shift-image-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --sib [stage] num                    synonym for --shift-image-binding\n"
-           "  --shift-sampler-binding [stage] num  base binding number for samplers\n"
-           "  --shift-sampler-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --ssb [stage] num                    synonym for --shift-sampler-binding\n"
-           "  --shift-ssbo-binding [stage] num     base binding number for SSBOs\n"
-           "  --shift-ssbo-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --sbb [stage] num                    synonym for --shift-ssbo-binding\n"
-           "  --shift-texture-binding [stage] num  base binding number for textures\n"
-           "  --shift-texture-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --stb [stage] num                    synonym for --shift-texture-binding\n"
-           "  --shift-uav-binding [stage] num      base binding number for UAVs\n"
-           "  --shift-uav-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --suavb [stage] num                  synonym for --shift-uav-binding\n"
-           "  --shift-UBO-binding [stage] num      base binding number for UBOs\n"
-           "  --shift-UBO-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --shift-cbuffer-binding [stage] num  synonym for --shift-UBO-binding\n"
-           "  --shift-cbuffer-binding [stage] [num set]... per-descriptor-set shift values\n"
-           "  --spirv-dis                          output standard form disassembly; works only\n"
-           "                                       when a SPIR-V generation option is also used\n"
-           "  --sub [stage] num                    synonym for --shift-UBO-binding\n"
-           "  --source-entrypoint <name>           the given shader source function is\n"
-           "                                       renamed to be the <name> given in -e\n"
-           "  --sep                                synonym for --source-entrypoint\n"
-           "  --stdin                              Read from stdin instead of from a file.\n"
-           "                                       You'll have to provide the shader stage\n"
-           "                                       using -S.\n"
-           "  --suppress-warnings                  suppress GLSL warnings\n"
-           "                                       (except as required by #extension : warn)\n"
+           "                                    set descriptor set for all resources\n"
+           "  --rsb                             synonym for --resource-set-binding\n"
+           "  --shift-image-binding [stage] num\n"
+           "                                    base binding number for images (uav)\n"
+           "  --shift-image-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --sib                             synonym for --shift-image-binding\n"
+           "  --shift-sampler-binding [stage] num\n"
+           "                                    base binding number for samplers\n"
+           "  --shift-sampler-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --ssb                             synonym for --shift-sampler-binding\n"
+           "  --shift-ssbo-binding [stage] num  base binding number for SSBOs\n"
+           "  --shift-ssbo-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --sbb                             synonym for --shift-ssbo-binding\n"
+           "  --shift-texture-binding [stage] num\n"
+           "                                    base binding number for textures\n"
+           "  --shift-texture-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --stb                             synonym for --shift-texture-binding\n"
+           "  --shift-uav-binding [stage] num   base binding number for UAVs\n"
+           "  --shift-uav-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --suavb                           synonym for --shift-uav-binding\n"
+           "  --shift-UBO-binding [stage] num   base binding number for UBOs\n"
+           "  --shift-UBO-binding [stage] [num set]...\n"
+           "                                    per-descriptor-set shift values\n"
+           "  --sub                             synonym for --shift-UBO-binding\n"
+           "  --shift-cbuffer-binding | --scb   synonyms for --shift-UBO-binding\n"
+           "  --spirv-dis                       output standard-form disassembly; works only\n"
+           "                                    when a SPIR-V generation option is also used\n"
+           "  --spirv-val                       execute the SPIRV-Tools validator\n"
+           "  --source-entrypoint <name>        the given shader source function is\n"
+           "                                    renamed to be the <name> given in -e\n"
+           "  --sep                             synonym for --source-entrypoint\n"
+           "  --stdin                           read from stdin instead of from a file;\n"
+           "                                    requires providing the shader stage using -S\n"
            "  --target-env {vulkan1.0 | vulkan1.1 | opengl} \n"
-           "                                       set execution environment that emitted code\n"
-           "                                       will execute in (as opposed to the language\n"
-           "                                       semantics selected by --client) defaults:\n"
-           "                                          'vulkan1.0' under '--client vulkan<ver>'\n"
-           "                                          'opengl' under '--client opengl<ver>'\n"
-           "  --variable-name <name>               Creates a C header file that contains a\n"
-           "                                       uint32_t array named <name>\n"
-           "                                       initialized with the shader binary code.\n"
-           "  --version                            synonym for -v\n"
-           "  --vn <name>                          synonym for --variable-name <name>\n"
+           "                                    set execution environment that emitted code\n"
+           "                                    will execute in (as opposed to the language\n"
+           "                                    semantics selected by --client) defaults:\n"
+           "                                     * 'vulkan1.0' under '--client vulkan<ver>'\n"
+           "                                     * 'opengl' under '--client opengl<ver>'\n"
+           "  --variable-name <name>\n"
+           "  --vn <name>                       creates a C header file that contains a\n"
+           "                                    uint32_t array named <name>\n"
+           "                                    initialized with the shader binary code\n"
            );
 
     exit(EFailUsage);
diff --git a/Test/110scope.vert b/Test/110scope.vert
old mode 100755
new mode 100644
diff --git a/Test/400.geom b/Test/400.geom
old mode 100755
new mode 100644
diff --git a/Test/420.comp b/Test/420.comp
old mode 100755
new mode 100644
diff --git a/Test/badMacroArgs.frag b/Test/badMacroArgs.frag
old mode 100755
new mode 100644
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/310runtimeArray.vert.out b/Test/baseResults/310runtimeArray.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.comp.out b/Test/baseResults/320.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.frag.out b/Test/baseResults/320.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.geom.out b/Test/baseResults/320.geom.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/320.vert.out b/Test/baseResults/320.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/400.vert.out b/Test/baseResults/400.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/410.vert.out b/Test/baseResults/410.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/420.comp.out b/Test/baseResults/420.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/435.vert.out b/Test/baseResults/435.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/460.frag.out b/Test/baseResults/460.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/460.vert.out b/Test/baseResults/460.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppBad2.vert.out b/Test/baseResults/cppBad2.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppDeepNest.frag.out b/Test/baseResults/cppDeepNest.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppPassMacroName.frag.out b/Test/baseResults/cppPassMacroName.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/cppRelaxSkipTokensErrors.vert.out b/Test/baseResults/cppRelaxSkipTokensErrors.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glspv.frag.out b/Test/baseResults/glspv.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glspv.version.vert.out b/Test/baseResults/glspv.version.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/glspv.vert.out b/Test/baseResults/glspv.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out
old mode 100755
new mode 100644
index 0d18f1f..c21008d
--- a/Test/baseResults/hlsl.PointSize.geom.out
+++ b/Test/baseResults/hlsl.PointSize.geom.out
@@ -69,6 +69,10 @@
 0:?     'ps' ( in 3-element array of uint PointSize)
 0:?     'OutputStream.ps' ( out float PointSize)
 
+error: SPIRV-Tools Validation Errors
+error: According to the Vulkan spec BuiltIn PointSize variable needs to be a 32-bit float scalar. ID <28> (OpVariable) is not a float scalar.
+  %29 = OpLoad %_arr_uint_uint_3 %ps_1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 36
diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
old mode 100755
new mode 100644
index becb500..afc7466
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -93,6 +93,10 @@
 0:?     '@entryPointOutput' (layout( location=7) out 4-component vector of float)
 0:?     'input' (layout( location=8) in 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Operand 2 of Decorate requires one of these capabilities: InputAttachment 
+  OpDecorate %attach InputAttachmentIndex 4
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 51
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
old mode 100755
new mode 100644
index 8d2c514..4528d98
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -145,6 +145,10 @@
 0:?     '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
 0:?     'input' ( in 4-component vector of float FragCoord)
 
+error: SPIRV-Tools Validation Errors
+error: Structure id 50 decorated as BufferBlock for variable in Uniform storage class must follow standard storage buffer layout rules: member 7 at offset 128 overlaps previous member ending at offset 171
+  %tbufName = OpTypeStruct %v4float %int %float %float %float %float %float %float %mat3v4float %mat3v4float %mat3v4float %mat3v4float
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 73
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
index 6142ca0..f7225f8 100644
--- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -251,12 +251,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80007
-// Id's are bound by 106
+// Id's are bound by 93
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 87 91 99 103
+                              EntryPoint Vertex 4  "main" 74 78 86 90
                               Source HLSL 500
                               Name 4  "main"
                               Name 9  "VS_INPUT"
@@ -274,13 +274,13 @@
                               MemberName 28(C) 1  "View"
                               MemberName 28(C) 2  "Projection"
                               Name 30  ""
-                              Name 85  "input"
-                              Name 87  "input.Pos"
-                              Name 91  "input.Norm"
-                              Name 94  "flattenTemp"
-                              Name 95  "param"
-                              Name 99  "@entryPointOutput.Pos"
-                              Name 103  "@entryPointOutput.Norm"
+                              Name 72  "input"
+                              Name 74  "input.Pos"
+                              Name 78  "input.Norm"
+                              Name 81  "flattenTemp"
+                              Name 82  "param"
+                              Name 86  "@entryPointOutput.Pos"
+                              Name 90  "@entryPointOutput.Norm"
                               MemberDecorate 28(C) 0 RowMajor
                               MemberDecorate 28(C) 0 Offset 0
                               MemberDecorate 28(C) 0 MatrixStride 16
@@ -293,10 +293,10 @@
                               Decorate 28(C) Block
                               Decorate 30 DescriptorSet 0
                               Decorate 30 Binding 0
-                              Decorate 87(input.Pos) Location 0
-                              Decorate 91(input.Norm) Location 1
-                              Decorate 99(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 103(@entryPointOutput.Norm) Location 0
+                              Decorate 74(input.Pos) Location 0
+                              Decorate 78(input.Norm) Location 1
+                              Decorate 86(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 90(@entryPointOutput.Norm) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -324,37 +324,36 @@
               39:     16(int) Constant 1
               46:     16(int) Constant 2
               55:             TypeMatrix 7(fvec4) 3
-              56:    6(float) Constant 1065353216
-              73:             TypePointer Function 8(fvec3)
-              86:             TypePointer Input 7(fvec4)
-   87(input.Pos):     86(ptr) Variable Input
-              90:             TypePointer Input 8(fvec3)
-  91(input.Norm):     90(ptr) Variable Input
-              98:             TypePointer Output 7(fvec4)
-99(@entryPointOutput.Pos):     98(ptr) Variable Output
-             102:             TypePointer Output 8(fvec3)
-103(@entryPointOutput.Norm):    102(ptr) Variable Output
+              60:             TypePointer Function 8(fvec3)
+              73:             TypePointer Input 7(fvec4)
+   74(input.Pos):     73(ptr) Variable Input
+              77:             TypePointer Input 8(fvec3)
+  78(input.Norm):     77(ptr) Variable Input
+              85:             TypePointer Output 7(fvec4)
+86(@entryPointOutput.Pos):     85(ptr) Variable Output
+              89:             TypePointer Output 8(fvec3)
+90(@entryPointOutput.Norm):     89(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-       85(input):     10(ptr) Variable Function
- 94(flattenTemp):     20(ptr) Variable Function
-       95(param):     10(ptr) Variable Function
-              88:    7(fvec4) Load 87(input.Pos)
-              89:     34(ptr) AccessChain 85(input) 26
-                              Store 89 88
-              92:    8(fvec3) Load 91(input.Norm)
-              93:     73(ptr) AccessChain 85(input) 39
-                              Store 93 92
-              96: 9(VS_INPUT) Load 85(input)
-                              Store 95(param) 96
-              97:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 95(param)
-                              Store 94(flattenTemp) 97
-             100:     34(ptr) AccessChain 94(flattenTemp) 26
-             101:    7(fvec4) Load 100
-                              Store 99(@entryPointOutput.Pos) 101
-             104:     73(ptr) AccessChain 94(flattenTemp) 39
-             105:    8(fvec3) Load 104
-                              Store 103(@entryPointOutput.Norm) 105
+       72(input):     10(ptr) Variable Function
+ 81(flattenTemp):     20(ptr) Variable Function
+       82(param):     10(ptr) Variable Function
+              75:    7(fvec4) Load 74(input.Pos)
+              76:     34(ptr) AccessChain 72(input) 26
+                              Store 76 75
+              79:    8(fvec3) Load 78(input.Norm)
+              80:     60(ptr) AccessChain 72(input) 39
+                              Store 80 79
+              83: 9(VS_INPUT) Load 72(input)
+                              Store 82(param) 83
+              84:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 82(param)
+                              Store 81(flattenTemp) 84
+              87:     34(ptr) AccessChain 81(flattenTemp) 26
+              88:    7(fvec4) Load 87
+                              Store 86(@entryPointOutput.Pos) 88
+              91:     60(ptr) AccessChain 81(flattenTemp) 39
+              92:    8(fvec3) Load 91
+                              Store 90(@entryPointOutput.Norm) 92
                               Return
                               FunctionEnd
 14(@main(struct-VS_INPUT-vf4-vf31;):11(PS_INPUT) Function None 12
@@ -387,31 +386,19 @@
                               Store 52 51
               53:     31(ptr) AccessChain 30 26
               54:          27 Load 53
-              57:    6(float) CompositeExtract 54 0 0
-              58:    6(float) CompositeExtract 54 0 1
-              59:    6(float) CompositeExtract 54 0 2
-              60:    6(float) CompositeExtract 54 0 3
-              61:    6(float) CompositeExtract 54 1 0
-              62:    6(float) CompositeExtract 54 1 1
-              63:    6(float) CompositeExtract 54 1 2
-              64:    6(float) CompositeExtract 54 1 3
-              65:    6(float) CompositeExtract 54 2 0
-              66:    6(float) CompositeExtract 54 2 1
-              67:    6(float) CompositeExtract 54 2 2
-              68:    6(float) CompositeExtract 54 2 3
-              69:    7(fvec4) CompositeConstruct 57 58 59 60
-              70:    7(fvec4) CompositeConstruct 61 62 63 64
-              71:    7(fvec4) CompositeConstruct 65 66 67 68
-              72:          55 CompositeConstruct 69 70 71
-              74:     73(ptr) AccessChain 13(input) 39
-              75:    8(fvec3) Load 74
-              76:    7(fvec4) MatrixTimesVector 72 75
-              77:    6(float) CompositeExtract 76 0
-              78:    6(float) CompositeExtract 76 1
-              79:    6(float) CompositeExtract 76 2
-              80:    8(fvec3) CompositeConstruct 77 78 79
-              81:     73(ptr) AccessChain 21(output) 39
-                              Store 81 80
-              82:11(PS_INPUT) Load 21(output)
-                              ReturnValue 82
+              56:    7(fvec4) CompositeExtract 54 0
+              57:    7(fvec4) CompositeExtract 54 1
+              58:    7(fvec4) CompositeExtract 54 2
+              59:          55 CompositeConstruct 56 57 58
+              61:     60(ptr) AccessChain 13(input) 39
+              62:    8(fvec3) Load 61
+              63:    7(fvec4) MatrixTimesVector 59 62
+              64:    6(float) CompositeExtract 63 0
+              65:    6(float) CompositeExtract 63 1
+              66:    6(float) CompositeExtract 63 2
+              67:    8(fvec3) CompositeConstruct 64 65 66
+              68:     60(ptr) AccessChain 21(output) 39
+                              Store 68 67
+              69:11(PS_INPUT) Load 21(output)
+                              ReturnValue 69
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 4b5c6b1..4185ea9 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -131,6 +131,10 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform int c1})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Only a single level of array is allowed for descriptor set variables
+  %cb3_0 = OpVariable %_ptr_Uniform__arr__arr_cb3_uint_4_uint_2 Uniform
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 66
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out
index c36ff6d..e88c3d8 100644
--- a/Test/baseResults/hlsl.constructimat.frag.out
+++ b/Test/baseResults/hlsl.constructimat.frag.out
@@ -543,6 +543,10 @@
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
+error: SPIRV-Tools Validation Errors
+error: Matrix types can only be parameterized with floating-point types.
+  %mat4v4int = OpTypeMatrix %v4int 4
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 98
diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out
index 8afc59a..bea2fc0 100644
--- a/Test/baseResults/hlsl.coverage.frag.out
+++ b/Test/baseResults/hlsl.coverage.frag.out
@@ -117,6 +117,10 @@
 0:?     '@entryPointOutput.nCoverageMask' ( out 1-element array of uint SampleMaskIn)
 0:?     '@entryPointOutput.vColor' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Input variable id <34> is used by entry point 'main' id <4>, but is not listed as an interface
+  %i_1 = OpVariable %_ptr_Input_PS_INPUT Input
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 52
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out
index 8c8b62b..34a635c 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -49,6 +49,10 @@
 0:?             'i' ( temp structure{})
 0:?   Linker Objects
 
+error: SPIRV-Tools Validation Errors
+error: Input variable id <20> is used by entry point 'main' id <4>, but is not listed as an interface
+  %i_1 = OpVariable %_ptr_Input_ps_in Input
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 27
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index b2aaf5e..6170458 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -47,6 +47,10 @@
 0:?             'i' ( temp structure{})
 0:?   Linker Objects
 
+error: SPIRV-Tools Validation Errors
+error: Input variable id <20> is used by entry point 'main' id <4>, but is not listed as an interface
+  %i_1 = OpVariable %_ptr_Input_vs_in Input
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 27
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
old mode 100755
new mode 100644
index 7862123..31febfd
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -64,6 +64,10 @@
 0:?     'f1' ( global 1-component vector of float)
 0:?     'scalar' ( global float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected int scalar or vector type as Result Type: IMul
+  %20 = OpIMul %float %18 %19
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 27
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.function.frag.out b/Test/baseResults/hlsl.function.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 49fda31..33c9af4 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1261,6 +1261,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image Operand ConstOffsets to be a const object
+  %90 = OpImageGather %v4float %76 %78 %int_0 ConstOffsets %89
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 399
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 9de1a97..22b02e7 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1253,6 +1253,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image Operand ConstOffsets to be a const object
+  %90 = OpImageGather %v4float %76 %78 %int_0 ConstOffsets %89
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 389
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.includeNegative.vert.out b/Test/baseResults/hlsl.includeNegative.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index a5b543c..5058f23 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -715,6 +715,10 @@
 0:?     'inU0' (layout( location=3) in 4-component vector of uint)
 0:?     'inU1' (layout( location=4) in 4-component vector of uint)
 
+error: SPIRV-Tools Validation Errors
+error: Expected operand to be vector bool: All
+  %64 = OpAll %bool %63
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 265
diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index e786562..4fd1e7b 100644
--- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -153,6 +153,10 @@
 0:?     'inF4' (layout( location=3) in 4-component vector of float)
 0:?     'inI2' (layout( location=4) flat in 2-component vector of int)
 
+error: SPIRV-Tools Validation Errors
+error: GLSL.std.450 InterpolateAtOffset: expected Interpolant storage class to be Input
+  %28 = OpExtInst %float %1 InterpolateAtOffset %inF1 %27
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 80
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index b7d7139..20d2bb0 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -142,1110 +142,1104 @@
 0:44          'r023' ( temp float)
 0:44          degrees ( temp float)
 0:44            'inF0' ( in float)
-0:48      Sequence
-0:48        move second child to first child ( temp float)
-0:48          'r027' ( temp float)
-0:48          exp ( temp float)
-0:48            'inF0' ( in float)
+0:45      Sequence
+0:45        move second child to first child ( temp float)
+0:45          'r024' ( temp float)
+0:45          distance ( temp float)
+0:45            'inF0' ( in float)
+0:45            'inF1' ( in float)
 0:49      Sequence
 0:49        move second child to first child ( temp float)
-0:49          'r028' ( temp float)
-0:49          exp2 ( temp float)
+0:49          'r027' ( temp float)
+0:49          exp ( temp float)
 0:49            'inF0' ( in float)
 0:50      Sequence
-0:50        move second child to first child ( temp uint)
-0:50          'r029' ( temp uint)
-0:50          Convert int to uint ( temp uint)
-0:50            findMSB ( temp int)
-0:50              Constant:
-0:50                7 (const int)
+0:50        move second child to first child ( temp float)
+0:50          'r028' ( temp float)
+0:50          exp2 ( temp float)
+0:50            'inF0' ( in float)
 0:51      Sequence
 0:51        move second child to first child ( temp uint)
-0:51          'r030' ( temp uint)
+0:51          'r029' ( temp uint)
 0:51          Convert int to uint ( temp uint)
-0:51            findLSB ( temp int)
+0:51            findMSB ( temp int)
 0:51              Constant:
 0:51                7 (const int)
 0:52      Sequence
-0:52        move second child to first child ( temp float)
-0:52          'r031' ( temp float)
-0:52          Floor ( temp float)
-0:52            'inF0' ( in float)
-0:54      Sequence
-0:54        move second child to first child ( temp float)
-0:54          'r033' ( temp float)
-0:54          mod ( temp float)
-0:54            'inF0' ( in float)
-0:54            'inF1' ( in float)
+0:52        move second child to first child ( temp uint)
+0:52          'r030' ( temp uint)
+0:52          Convert int to uint ( temp uint)
+0:52            findLSB ( temp int)
+0:52              Constant:
+0:52                7 (const int)
+0:53      Sequence
+0:53        move second child to first child ( temp float)
+0:53          'r031' ( temp float)
+0:53          Floor ( temp float)
+0:53            'inF0' ( in float)
 0:55      Sequence
 0:55        move second child to first child ( temp float)
-0:55          'r034' ( temp float)
-0:55          Fraction ( temp float)
+0:55          'r033' ( temp float)
+0:55          mod ( temp float)
 0:55            'inF0' ( in float)
+0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r036' ( temp float)
-0:56          fwidth ( temp float)
+0:56          'r034' ( temp float)
+0:56          Fraction ( temp float)
 0:56            'inF0' ( in float)
 0:57      Sequence
-0:57        move second child to first child ( temp bool)
-0:57          'r037' ( temp bool)
-0:57          isinf ( temp bool)
+0:57        move second child to first child ( temp float)
+0:57          'r036' ( temp float)
+0:57          fwidth ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
 0:58        move second child to first child ( temp bool)
-0:58          'r038' ( temp bool)
-0:58          isnan ( temp bool)
+0:58          'r037' ( temp bool)
+0:58          isinf ( temp bool)
 0:58            'inF0' ( in float)
 0:59      Sequence
-0:59        move second child to first child ( temp float)
-0:59          'r039' ( temp float)
-0:59          ldexp ( temp float)
+0:59        move second child to first child ( temp bool)
+0:59          'r038' ( temp bool)
+0:59          isnan ( temp bool)
 0:59            'inF0' ( in float)
-0:59            'inF1' ( in float)
 0:60      Sequence
 0:60        move second child to first child ( temp float)
-0:60          'r039a' ( temp float)
-0:60          mix ( temp float)
+0:60          'r039' ( temp float)
+0:60          ldexp ( temp float)
 0:60            'inF0' ( in float)
 0:60            'inF1' ( in float)
-0:60            'inF2' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r040' ( temp float)
-0:61          log ( temp float)
+0:61          'r039a' ( temp float)
+0:61          mix ( temp float)
 0:61            'inF0' ( in float)
+0:61            'inF1' ( in float)
+0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r041' ( temp float)
-0:62          component-wise multiply ( temp float)
-0:62            log2 ( temp float)
-0:62              'inF0' ( in float)
-0:62            Constant:
-0:62              0.301030
+0:62          'r040' ( temp float)
+0:62          log ( temp float)
+0:62            'inF0' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r042' ( temp float)
-0:63          log2 ( temp float)
-0:63            'inF0' ( in float)
+0:63          'r041' ( temp float)
+0:63          component-wise multiply ( temp float)
+0:63            log2 ( temp float)
+0:63              'inF0' ( in float)
+0:63            Constant:
+0:63              0.301030
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r043' ( temp float)
-0:64          max ( temp float)
+0:64          'r042' ( temp float)
+0:64          log2 ( temp float)
 0:64            'inF0' ( in float)
-0:64            'inF1' ( in float)
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r044' ( temp float)
-0:65          min ( temp float)
+0:65          'r043' ( temp float)
+0:65          max ( temp float)
 0:65            'inF0' ( in float)
 0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r045' ( temp float)
-0:66          pow ( temp float)
+0:66          'r044' ( temp float)
+0:66          min ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r046' ( temp float)
-0:67          radians ( temp float)
+0:67          'r045' ( temp float)
+0:67          pow ( temp float)
 0:67            'inF0' ( in float)
+0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r047' ( temp float)
-0:68          divide ( temp float)
-0:68            Constant:
-0:68              1.000000
+0:68          'r046' ( temp float)
+0:68          radians ( temp float)
 0:68            'inF0' ( in float)
 0:69      Sequence
-0:69        move second child to first child ( temp uint)
-0:69          'r048' ( temp uint)
-0:69          Convert int to uint ( temp uint)
-0:69            bitFieldReverse ( temp int)
-0:69              Constant:
-0:69                2 (const int)
+0:69        move second child to first child ( temp float)
+0:69          'r047' ( temp float)
+0:69          divide ( temp float)
+0:69            Constant:
+0:69              1.000000
+0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp float)
-0:70          'r049' ( temp float)
-0:70          roundEven ( temp float)
-0:70            'inF0' ( in float)
+0:70        move second child to first child ( temp uint)
+0:70          'r048' ( temp uint)
+0:70          Convert int to uint ( temp uint)
+0:70            bitFieldReverse ( temp int)
+0:70              Constant:
+0:70                2 (const int)
 0:71      Sequence
 0:71        move second child to first child ( temp float)
-0:71          'r050' ( temp float)
-0:71          inverse sqrt ( temp float)
+0:71          'r049' ( temp float)
+0:71          roundEven ( temp float)
 0:71            'inF0' ( in float)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r051' ( temp float)
-0:72          clamp ( temp float)
+0:72          'r050' ( temp float)
+0:72          inverse sqrt ( temp float)
 0:72            'inF0' ( in float)
-0:72            Constant:
-0:72              0.000000
-0:72            Constant:
-0:72              1.000000
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r052' ( temp float)
-0:73          Sign ( temp float)
+0:73          'r051' ( temp float)
+0:73          clamp ( temp float)
 0:73            'inF0' ( in float)
+0:73            Constant:
+0:73              0.000000
+0:73            Constant:
+0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r053' ( temp float)
-0:74          sine ( temp float)
+0:74          'r052' ( temp float)
+0:74          Sign ( temp float)
 0:74            'inF0' ( in float)
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'inF1' ( in float)
+0:75          'r053' ( temp float)
 0:75          sine ( temp float)
 0:75            'inF0' ( in float)
-0:75        move second child to first child ( temp float)
-0:75          'inF2' ( in float)
-0:75          cosine ( temp float)
-0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'r055' ( temp float)
-0:76          hyp. sine ( temp float)
+0:76          'inF1' ( in float)
+0:76          sine ( temp float)
+0:76            'inF0' ( in float)
+0:76        move second child to first child ( temp float)
+0:76          'inF2' ( in float)
+0:76          cosine ( temp float)
 0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r056' ( temp float)
-0:77          smoothstep ( temp float)
+0:77          'r055' ( temp float)
+0:77          hyp. sine ( temp float)
 0:77            'inF0' ( in float)
-0:77            'inF1' ( in float)
-0:77            'inF2' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r057' ( temp float)
-0:78          sqrt ( temp float)
+0:78          'r056' ( temp float)
+0:78          smoothstep ( temp float)
 0:78            'inF0' ( in float)
+0:78            'inF1' ( in float)
+0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r058' ( temp float)
-0:79          step ( temp float)
+0:79          'r057' ( temp float)
+0:79          sqrt ( temp float)
 0:79            'inF0' ( in float)
-0:79            'inF1' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r059' ( temp float)
-0:80          tangent ( temp float)
+0:80          'r058' ( temp float)
+0:80          step ( temp float)
 0:80            'inF0' ( in float)
+0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r060' ( temp float)
-0:81          hyp. tangent ( temp float)
+0:81          'r059' ( temp float)
+0:81          tangent ( temp float)
 0:81            'inF0' ( in float)
-0:83      Sequence
-0:83        move second child to first child ( temp float)
-0:83          'r061' ( temp float)
-0:83          trunc ( temp float)
-0:83            'inF0' ( in float)
-0:85      Branch: Return with expression
-0:85        Constant:
-0:85          0.000000
-0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:89    Function Parameters: 
-0:89      'inF0' ( in 1-component vector of float)
-0:89      'inF1' ( in 1-component vector of float)
-0:89      'inF2' ( in 1-component vector of float)
+0:82      Sequence
+0:82        move second child to first child ( temp float)
+0:82          'r060' ( temp float)
+0:82          hyp. tangent ( temp float)
+0:82            'inF0' ( in float)
+0:84      Sequence
+0:84        move second child to first child ( temp float)
+0:84          'r061' ( temp float)
+0:84          trunc ( temp float)
+0:84            'inF0' ( in float)
+0:86      Branch: Return with expression
+0:86        Constant:
+0:86          0.000000
+0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:90    Function Parameters: 
+0:90      'inF0' ( in 1-component vector of float)
+0:90      'inF1' ( in 1-component vector of float)
+0:90      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:91      Branch: Return with expression
-0:91        Constant:
-0:91          0.000000
-0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:95    Function Parameters: 
-0:95      'inF0' ( in 2-component vector of float)
-0:95      'inF1' ( in 2-component vector of float)
-0:95      'inF2' ( in 2-component vector of float)
-0:95      'inU0' ( in 2-component vector of uint)
-0:95      'inU1' ( in 2-component vector of uint)
+0:92      Branch: Return with expression
+0:92        Constant:
+0:92          0.000000
+0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:96    Function Parameters: 
+0:96      'inF0' ( in 2-component vector of float)
+0:96      'inF1' ( in 2-component vector of float)
+0:96      'inF2' ( in 2-component vector of float)
+0:96      'inU0' ( in 2-component vector of uint)
+0:96      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:98      Sequence
-0:98        move second child to first child ( temp bool)
-0:98          'r000' ( temp bool)
-0:98          all ( temp bool)
-0:98            Convert float to bool ( temp 2-component vector of bool)
-0:98              'inF0' ( in 2-component vector of float)
 0:99      Sequence
-0:99        move second child to first child ( temp 2-component vector of float)
-0:99          'r001' ( temp 2-component vector of float)
-0:99          Absolute value ( temp 2-component vector of float)
-0:99            'inF0' ( in 2-component vector of float)
+0:99        move second child to first child ( temp bool)
+0:99          'r000' ( temp bool)
+0:99          all ( temp bool)
+0:99            Convert float to bool ( temp 2-component vector of bool)
+0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r002' ( temp 2-component vector of float)
-0:100          arc cosine ( temp 2-component vector of float)
+0:100          'r001' ( temp 2-component vector of float)
+0:100          Absolute value ( temp 2-component vector of float)
 0:100            'inF0' ( in 2-component vector of float)
 0:101      Sequence
-0:101        move second child to first child ( temp bool)
-0:101          'r003' ( temp bool)
-0:101          any ( temp bool)
-0:101            Convert float to bool ( temp 2-component vector of bool)
-0:101              'inF0' ( in 2-component vector of float)
+0:101        move second child to first child ( temp 2-component vector of float)
+0:101          'r002' ( temp 2-component vector of float)
+0:101          arc cosine ( temp 2-component vector of float)
+0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp 2-component vector of float)
-0:102          'r004' ( temp 2-component vector of float)
-0:102          arc sine ( temp 2-component vector of float)
-0:102            'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp bool)
+0:102          'r003' ( temp bool)
+0:102          any ( temp bool)
+0:102            Convert float to bool ( temp 2-component vector of bool)
+0:102              'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of int)
-0:103          'r005' ( temp 2-component vector of int)
-0:103          floatBitsToInt ( temp 2-component vector of int)
+0:103        move second child to first child ( temp 2-component vector of float)
+0:103          'r004' ( temp 2-component vector of float)
+0:103          arc sine ( temp 2-component vector of float)
 0:103            'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of uint)
-0:104          'r006' ( temp 2-component vector of uint)
-0:104          floatBitsToUint ( temp 2-component vector of uint)
+0:104        move second child to first child ( temp 2-component vector of int)
+0:104          'r005' ( temp 2-component vector of int)
+0:104          floatBitsToInt ( temp 2-component vector of int)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of float)
-0:105          'r007' ( temp 2-component vector of float)
-0:105          intBitsToFloat ( temp 2-component vector of float)
-0:105            'inU0' ( in 2-component vector of uint)
-0:107      Sequence
-0:107        move second child to first child ( temp 2-component vector of float)
-0:107          'r009' ( temp 2-component vector of float)
-0:107          arc tangent ( temp 2-component vector of float)
-0:107            'inF0' ( in 2-component vector of float)
+0:105        move second child to first child ( temp 2-component vector of uint)
+0:105          'r006' ( temp 2-component vector of uint)
+0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105            'inF0' ( in 2-component vector of float)
+0:106      Sequence
+0:106        move second child to first child ( temp 2-component vector of float)
+0:106          'r007' ( temp 2-component vector of float)
+0:106          intBitsToFloat ( temp 2-component vector of float)
+0:106            'inU0' ( in 2-component vector of uint)
 0:108      Sequence
 0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r010' ( temp 2-component vector of float)
+0:108          'r009' ( temp 2-component vector of float)
 0:108          arc tangent ( temp 2-component vector of float)
 0:108            'inF0' ( in 2-component vector of float)
-0:108            'inF1' ( in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r011' ( temp 2-component vector of float)
-0:109          Ceiling ( temp 2-component vector of float)
+0:109          'r010' ( temp 2-component vector of float)
+0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
+0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r012' ( temp 2-component vector of float)
-0:110          clamp ( temp 2-component vector of float)
+0:110          'r011' ( temp 2-component vector of float)
+0:110          Ceiling ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
-0:110            'inF1' ( in 2-component vector of float)
-0:110            'inF2' ( in 2-component vector of float)
-0:111      Test condition and select ( temp void)
-0:111        Condition
-0:111        any ( temp bool)
-0:111          Compare Less Than ( temp 2-component vector of bool)
+0:111      Sequence
+0:111        move second child to first child ( temp 2-component vector of float)
+0:111          'r012' ( temp 2-component vector of float)
+0:111          clamp ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            Constant:
-0:111              0.000000
-0:111              0.000000
-0:111        true case
-0:111        Branch: Kill
+0:111            'inF1' ( in 2-component vector of float)
+0:111            'inF2' ( in 2-component vector of float)
 0:112      Test condition and select ( temp void)
 0:112        Condition
 0:112        any ( temp bool)
 0:112          Compare Less Than ( temp 2-component vector of bool)
-0:112            'inU0' ( in 2-component vector of uint)
+0:112            'inF0' ( in 2-component vector of float)
 0:112            Constant:
 0:112              0.000000
 0:112              0.000000
 0:112        true case
 0:112        Branch: Kill
-0:113      Sequence
-0:113        move second child to first child ( temp 2-component vector of float)
-0:113          'r013' ( temp 2-component vector of float)
-0:113          cosine ( temp 2-component vector of float)
-0:113            'inF0' ( in 2-component vector of float)
+0:113      Test condition and select ( temp void)
+0:113        Condition
+0:113        any ( temp bool)
+0:113          Compare Less Than ( temp 2-component vector of bool)
+0:113            'inU0' ( in 2-component vector of uint)
+0:113            Constant:
+0:113              0.000000
+0:113              0.000000
+0:113        true case
+0:113        Branch: Kill
 0:114      Sequence
 0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r015' ( temp 2-component vector of float)
-0:114          hyp. cosine ( temp 2-component vector of float)
+0:114          'r013' ( temp 2-component vector of float)
+0:114          cosine ( temp 2-component vector of float)
 0:114            'inF0' ( in 2-component vector of float)
 0:115      Sequence
-0:115        move second child to first child ( temp 2-component vector of int)
-0:115          'r016' ( temp 2-component vector of int)
+0:115        move second child to first child ( temp 2-component vector of float)
+0:115          'r015' ( temp 2-component vector of float)
+0:115          hyp. cosine ( temp 2-component vector of float)
+0:115            'inF0' ( in 2-component vector of float)
+0:116      Sequence
+0:116        move second child to first child ( temp 2-component vector of int)
+0:116          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of float)
-0:116          'r017' ( temp 2-component vector of float)
-0:116          dPdx ( temp 2-component vector of float)
-0:116            'inF0' ( in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r018' ( temp 2-component vector of float)
-0:117          dPdxCoarse ( temp 2-component vector of float)
+0:117          'r017' ( temp 2-component vector of float)
+0:117          dPdx ( temp 2-component vector of float)
 0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r019' ( temp 2-component vector of float)
-0:118          dPdxFine ( temp 2-component vector of float)
+0:118          'r018' ( temp 2-component vector of float)
+0:118          dPdxCoarse ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r020' ( temp 2-component vector of float)
-0:119          dPdy ( temp 2-component vector of float)
+0:119          'r019' ( temp 2-component vector of float)
+0:119          dPdxFine ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r021' ( temp 2-component vector of float)
-0:120          dPdyCoarse ( temp 2-component vector of float)
+0:120          'r020' ( temp 2-component vector of float)
+0:120          dPdy ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r022' ( temp 2-component vector of float)
-0:121          dPdyFine ( temp 2-component vector of float)
+0:121          'r021' ( temp 2-component vector of float)
+0:121          dPdyCoarse ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r023' ( temp 2-component vector of float)
-0:122          degrees ( temp 2-component vector of float)
+0:122          'r022' ( temp 2-component vector of float)
+0:122          dPdyFine ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
-0:126      Sequence
-0:126        move second child to first child ( temp float)
-0:126          'r026' ( temp float)
-0:126          distance ( temp float)
-0:126            'inF0' ( in 2-component vector of float)
-0:126            'inF1' ( in 2-component vector of float)
+0:123      Sequence
+0:123        move second child to first child ( temp 2-component vector of float)
+0:123          'r023' ( temp 2-component vector of float)
+0:123          degrees ( temp 2-component vector of float)
+0:123            'inF0' ( in 2-component vector of float)
 0:127      Sequence
 0:127        move second child to first child ( temp float)
-0:127          'r027' ( temp float)
-0:127          dot-product ( temp float)
+0:127          'r026' ( temp float)
+0:127          distance ( temp float)
 0:127            'inF0' ( in 2-component vector of float)
 0:127            'inF1' ( in 2-component vector of float)
-0:131      Sequence
-0:131        move second child to first child ( temp 2-component vector of float)
-0:131          'r028' ( temp 2-component vector of float)
-0:131          exp ( temp 2-component vector of float)
-0:131            'inF0' ( in 2-component vector of float)
+0:128      Sequence
+0:128        move second child to first child ( temp float)
+0:128          'r027' ( temp float)
+0:128          dot-product ( temp float)
+0:128            'inF0' ( in 2-component vector of float)
+0:128            'inF1' ( in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r029' ( temp 2-component vector of float)
-0:132          exp2 ( temp 2-component vector of float)
+0:132          'r028' ( temp 2-component vector of float)
+0:132          exp ( temp 2-component vector of float)
 0:132            'inF0' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r030' ( temp 2-component vector of float)
-0:133          face-forward ( temp 2-component vector of float)
+0:133          'r029' ( temp 2-component vector of float)
+0:133          exp2 ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
-0:133            'inF1' ( in 2-component vector of float)
-0:133            'inF2' ( in 2-component vector of float)
 0:134      Sequence
-0:134        move second child to first child ( temp 2-component vector of uint)
-0:134          'r031' ( temp 2-component vector of uint)
+0:134        move second child to first child ( temp 2-component vector of float)
+0:134          'r030' ( temp 2-component vector of float)
+0:134          face-forward ( temp 2-component vector of float)
+0:134            'inF0' ( in 2-component vector of float)
+0:134            'inF1' ( in 2-component vector of float)
+0:134            'inF2' ( in 2-component vector of float)
+0:135      Sequence
+0:135        move second child to first child ( temp 2-component vector of uint)
+0:135          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r032' ( temp 2-component vector of uint)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of float)
-0:136          'r033' ( temp 2-component vector of float)
-0:136          Floor ( temp 2-component vector of float)
-0:136            'inF0' ( in 2-component vector of float)
-0:138      Sequence
-0:138        move second child to first child ( temp 2-component vector of float)
-0:138          'r035' ( temp 2-component vector of float)
-0:138          mod ( temp 2-component vector of float)
-0:138            'inF0' ( in 2-component vector of float)
-0:138            'inF1' ( in 2-component vector of float)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of float)
+0:137          'r033' ( temp 2-component vector of float)
+0:137          Floor ( temp 2-component vector of float)
+0:137            'inF0' ( in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r036' ( temp 2-component vector of float)
-0:139          Fraction ( temp 2-component vector of float)
+0:139          'r035' ( temp 2-component vector of float)
+0:139          mod ( temp 2-component vector of float)
 0:139            'inF0' ( in 2-component vector of float)
+0:139            'inF1' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r038' ( temp 2-component vector of float)
-0:140          fwidth ( temp 2-component vector of float)
+0:140          'r036' ( temp 2-component vector of float)
+0:140          Fraction ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
 0:141      Sequence
-0:141        move second child to first child ( temp 2-component vector of bool)
-0:141          'r039' ( temp 2-component vector of bool)
-0:141          isinf ( temp 2-component vector of bool)
+0:141        move second child to first child ( temp 2-component vector of float)
+0:141          'r038' ( temp 2-component vector of float)
+0:141          fwidth ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r040' ( temp 2-component vector of bool)
-0:142          isnan ( temp 2-component vector of bool)
+0:142          'r039' ( temp 2-component vector of bool)
+0:142          isinf ( temp 2-component vector of bool)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
-0:143        move second child to first child ( temp 2-component vector of float)
-0:143          'r041' ( temp 2-component vector of float)
-0:143          ldexp ( temp 2-component vector of float)
+0:143        move second child to first child ( temp 2-component vector of bool)
+0:143          'r040' ( temp 2-component vector of bool)
+0:143          isnan ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
-0:143            'inF1' ( in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r039a' ( temp 2-component vector of float)
-0:144          mix ( temp 2-component vector of float)
+0:144          'r041' ( temp 2-component vector of float)
+0:144          ldexp ( temp 2-component vector of float)
 0:144            'inF0' ( in 2-component vector of float)
 0:144            'inF1' ( in 2-component vector of float)
-0:144            'inF2' ( in 2-component vector of float)
 0:145      Sequence
-0:145        move second child to first child ( temp float)
-0:145          'r042' ( temp float)
-0:145          length ( temp float)
+0:145        move second child to first child ( temp 2-component vector of float)
+0:145          'r039a' ( temp 2-component vector of float)
+0:145          mix ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
+0:145            'inF1' ( in 2-component vector of float)
+0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp 2-component vector of float)
-0:146          'r043' ( temp 2-component vector of float)
-0:146          log ( temp 2-component vector of float)
+0:146        move second child to first child ( temp float)
+0:146          'r042' ( temp float)
+0:146          length ( temp float)
 0:146            'inF0' ( in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r044' ( temp 2-component vector of float)
-0:147          vector-scale ( temp 2-component vector of float)
-0:147            log2 ( temp 2-component vector of float)
-0:147              'inF0' ( in 2-component vector of float)
-0:147            Constant:
-0:147              0.301030
+0:147          'r043' ( temp 2-component vector of float)
+0:147          log ( temp 2-component vector of float)
+0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r045' ( temp 2-component vector of float)
-0:148          log2 ( temp 2-component vector of float)
-0:148            'inF0' ( in 2-component vector of float)
+0:148          'r044' ( temp 2-component vector of float)
+0:148          vector-scale ( temp 2-component vector of float)
+0:148            log2 ( temp 2-component vector of float)
+0:148              'inF0' ( in 2-component vector of float)
+0:148            Constant:
+0:148              0.301030
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r046' ( temp 2-component vector of float)
-0:149          max ( temp 2-component vector of float)
+0:149          'r045' ( temp 2-component vector of float)
+0:149          log2 ( temp 2-component vector of float)
 0:149            'inF0' ( in 2-component vector of float)
-0:149            'inF1' ( in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r047' ( temp 2-component vector of float)
-0:150          min ( temp 2-component vector of float)
+0:150          'r046' ( temp 2-component vector of float)
+0:150          max ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
 0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r048' ( temp 2-component vector of float)
-0:151          normalize ( temp 2-component vector of float)
+0:151          'r047' ( temp 2-component vector of float)
+0:151          min ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
+0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r049' ( temp 2-component vector of float)
-0:152          pow ( temp 2-component vector of float)
+0:152          'r048' ( temp 2-component vector of float)
+0:152          normalize ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
-0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r050' ( temp 2-component vector of float)
-0:153          radians ( temp 2-component vector of float)
+0:153          'r049' ( temp 2-component vector of float)
+0:153          pow ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
+0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r051' ( temp 2-component vector of float)
-0:154          divide ( temp 2-component vector of float)
-0:154            Constant:
-0:154              1.000000
+0:154          'r050' ( temp 2-component vector of float)
+0:154          radians ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r052' ( temp 2-component vector of float)
-0:155          reflect ( temp 2-component vector of float)
+0:155          'r051' ( temp 2-component vector of float)
+0:155          divide ( temp 2-component vector of float)
+0:155            Constant:
+0:155              1.000000
 0:155            'inF0' ( in 2-component vector of float)
-0:155            'inF1' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r053' ( temp 2-component vector of float)
-0:156          refract ( temp 2-component vector of float)
+0:156          'r052' ( temp 2-component vector of float)
+0:156          reflect ( temp 2-component vector of float)
 0:156            'inF0' ( in 2-component vector of float)
 0:156            'inF1' ( in 2-component vector of float)
-0:156            Constant:
-0:156              2.000000
 0:157      Sequence
-0:157        move second child to first child ( temp 2-component vector of uint)
-0:157          'r054' ( temp 2-component vector of uint)
+0:157        move second child to first child ( temp 2-component vector of float)
+0:157          'r053' ( temp 2-component vector of float)
+0:157          refract ( temp 2-component vector of float)
+0:157            'inF0' ( in 2-component vector of float)
+0:157            'inF1' ( in 2-component vector of float)
+0:157            Constant:
+0:157              2.000000
+0:158      Sequence
+0:158        move second child to first child ( temp 2-component vector of uint)
+0:158          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of float)
-0:158          'r055' ( temp 2-component vector of float)
-0:158          roundEven ( temp 2-component vector of float)
-0:158            'inF0' ( in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r056' ( temp 2-component vector of float)
-0:159          inverse sqrt ( temp 2-component vector of float)
+0:159          'r055' ( temp 2-component vector of float)
+0:159          roundEven ( temp 2-component vector of float)
 0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r057' ( temp 2-component vector of float)
-0:160          clamp ( temp 2-component vector of float)
+0:160          'r056' ( temp 2-component vector of float)
+0:160          inverse sqrt ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
-0:160            Constant:
-0:160              0.000000
-0:160            Constant:
-0:160              1.000000
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r058' ( temp 2-component vector of float)
-0:161          Sign ( temp 2-component vector of float)
+0:161          'r057' ( temp 2-component vector of float)
+0:161          clamp ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
+0:161            Constant:
+0:161              0.000000
+0:161            Constant:
+0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r059' ( temp 2-component vector of float)
-0:162          sine ( temp 2-component vector of float)
+0:162          'r058' ( temp 2-component vector of float)
+0:162          Sign ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'inF1' ( in 2-component vector of float)
+0:163          'r059' ( temp 2-component vector of float)
 0:163          sine ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
-0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'inF2' ( in 2-component vector of float)
-0:163          cosine ( temp 2-component vector of float)
-0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'r060' ( temp 2-component vector of float)
-0:164          hyp. sine ( temp 2-component vector of float)
+0:164          'inF1' ( in 2-component vector of float)
+0:164          sine ( temp 2-component vector of float)
+0:164            'inF0' ( in 2-component vector of float)
+0:164        move second child to first child ( temp 2-component vector of float)
+0:164          'inF2' ( in 2-component vector of float)
+0:164          cosine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r061' ( temp 2-component vector of float)
-0:165          smoothstep ( temp 2-component vector of float)
+0:165          'r060' ( temp 2-component vector of float)
+0:165          hyp. sine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
-0:165            'inF1' ( in 2-component vector of float)
-0:165            'inF2' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r062' ( temp 2-component vector of float)
-0:166          sqrt ( temp 2-component vector of float)
+0:166          'r061' ( temp 2-component vector of float)
+0:166          smoothstep ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
+0:166            'inF1' ( in 2-component vector of float)
+0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r063' ( temp 2-component vector of float)
-0:167          step ( temp 2-component vector of float)
+0:167          'r062' ( temp 2-component vector of float)
+0:167          sqrt ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
-0:167            'inF1' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r064' ( temp 2-component vector of float)
-0:168          tangent ( temp 2-component vector of float)
+0:168          'r063' ( temp 2-component vector of float)
+0:168          step ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
+0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r065' ( temp 2-component vector of float)
-0:169          hyp. tangent ( temp 2-component vector of float)
+0:169          'r064' ( temp 2-component vector of float)
+0:169          tangent ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
-0:171      Sequence
-0:171        move second child to first child ( temp 2-component vector of float)
-0:171          'r066' ( temp 2-component vector of float)
-0:171          trunc ( temp 2-component vector of float)
-0:171            'inF0' ( in 2-component vector of float)
-0:174      Branch: Return with expression
+0:170      Sequence
+0:170        move second child to first child ( temp 2-component vector of float)
+0:170          'r065' ( temp 2-component vector of float)
+0:170          hyp. tangent ( temp 2-component vector of float)
+0:170            'inF0' ( in 2-component vector of float)
+0:172      Sequence
+0:172        move second child to first child ( temp 2-component vector of float)
+0:172          'r066' ( temp 2-component vector of float)
+0:172          trunc ( temp 2-component vector of float)
+0:172            'inF0' ( in 2-component vector of float)
+0:175      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:178    Function Parameters: 
-0:178      'inF0' ( in 3-component vector of float)
-0:178      'inF1' ( in 3-component vector of float)
-0:178      'inF2' ( in 3-component vector of float)
-0:178      'inU0' ( in 3-component vector of uint)
-0:178      'inU1' ( in 3-component vector of uint)
+0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:179    Function Parameters: 
+0:179      'inF0' ( in 3-component vector of float)
+0:179      'inF1' ( in 3-component vector of float)
+0:179      'inF2' ( in 3-component vector of float)
+0:179      'inU0' ( in 3-component vector of uint)
+0:179      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:181      Sequence
-0:181        move second child to first child ( temp bool)
-0:181          'r000' ( temp bool)
-0:181          all ( temp bool)
-0:181            Convert float to bool ( temp 3-component vector of bool)
-0:181              'inF0' ( in 3-component vector of float)
 0:182      Sequence
-0:182        move second child to first child ( temp 3-component vector of float)
-0:182          'r001' ( temp 3-component vector of float)
-0:182          Absolute value ( temp 3-component vector of float)
-0:182            'inF0' ( in 3-component vector of float)
+0:182        move second child to first child ( temp bool)
+0:182          'r000' ( temp bool)
+0:182          all ( temp bool)
+0:182            Convert float to bool ( temp 3-component vector of bool)
+0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r002' ( temp 3-component vector of float)
-0:183          arc cosine ( temp 3-component vector of float)
+0:183          'r001' ( temp 3-component vector of float)
+0:183          Absolute value ( temp 3-component vector of float)
 0:183            'inF0' ( in 3-component vector of float)
 0:184      Sequence
-0:184        move second child to first child ( temp bool)
-0:184          'r003' ( temp bool)
-0:184          any ( temp bool)
-0:184            Convert float to bool ( temp 3-component vector of bool)
-0:184              'inF0' ( in 3-component vector of float)
+0:184        move second child to first child ( temp 3-component vector of float)
+0:184          'r002' ( temp 3-component vector of float)
+0:184          arc cosine ( temp 3-component vector of float)
+0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp 3-component vector of float)
-0:185          'r004' ( temp 3-component vector of float)
-0:185          arc sine ( temp 3-component vector of float)
-0:185            'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp bool)
+0:185          'r003' ( temp bool)
+0:185          any ( temp bool)
+0:185            Convert float to bool ( temp 3-component vector of bool)
+0:185              'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of int)
-0:186          'r005' ( temp 3-component vector of int)
-0:186          floatBitsToInt ( temp 3-component vector of int)
+0:186        move second child to first child ( temp 3-component vector of float)
+0:186          'r004' ( temp 3-component vector of float)
+0:186          arc sine ( temp 3-component vector of float)
 0:186            'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of uint)
-0:187          'r006' ( temp 3-component vector of uint)
-0:187          floatBitsToUint ( temp 3-component vector of uint)
+0:187        move second child to first child ( temp 3-component vector of int)
+0:187          'r005' ( temp 3-component vector of int)
+0:187          floatBitsToInt ( temp 3-component vector of int)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of float)
-0:188          'r007' ( temp 3-component vector of float)
-0:188          intBitsToFloat ( temp 3-component vector of float)
-0:188            'inU0' ( in 3-component vector of uint)
-0:190      Sequence
-0:190        move second child to first child ( temp 3-component vector of float)
-0:190          'r009' ( temp 3-component vector of float)
-0:190          arc tangent ( temp 3-component vector of float)
-0:190            'inF0' ( in 3-component vector of float)
+0:188        move second child to first child ( temp 3-component vector of uint)
+0:188          'r006' ( temp 3-component vector of uint)
+0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188            'inF0' ( in 3-component vector of float)
+0:189      Sequence
+0:189        move second child to first child ( temp 3-component vector of float)
+0:189          'r007' ( temp 3-component vector of float)
+0:189          intBitsToFloat ( temp 3-component vector of float)
+0:189            'inU0' ( in 3-component vector of uint)
 0:191      Sequence
 0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r010' ( temp 3-component vector of float)
+0:191          'r009' ( temp 3-component vector of float)
 0:191          arc tangent ( temp 3-component vector of float)
 0:191            'inF0' ( in 3-component vector of float)
-0:191            'inF1' ( in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r011' ( temp 3-component vector of float)
-0:192          Ceiling ( temp 3-component vector of float)
+0:192          'r010' ( temp 3-component vector of float)
+0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
+0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r012' ( temp 3-component vector of float)
-0:193          clamp ( temp 3-component vector of float)
+0:193          'r011' ( temp 3-component vector of float)
+0:193          Ceiling ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
-0:193            'inF1' ( in 3-component vector of float)
-0:193            'inF2' ( in 3-component vector of float)
-0:194      Test condition and select ( temp void)
-0:194        Condition
-0:194        any ( temp bool)
-0:194          Compare Less Than ( temp 3-component vector of bool)
+0:194      Sequence
+0:194        move second child to first child ( temp 3-component vector of float)
+0:194          'r012' ( temp 3-component vector of float)
+0:194          clamp ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            Constant:
-0:194              0.000000
-0:194              0.000000
-0:194              0.000000
-0:194        true case
-0:194        Branch: Kill
+0:194            'inF1' ( in 3-component vector of float)
+0:194            'inF2' ( in 3-component vector of float)
 0:195      Test condition and select ( temp void)
 0:195        Condition
 0:195        any ( temp bool)
 0:195          Compare Less Than ( temp 3-component vector of bool)
-0:195            'inU0' ( in 3-component vector of uint)
+0:195            'inF0' ( in 3-component vector of float)
 0:195            Constant:
 0:195              0.000000
 0:195              0.000000
 0:195              0.000000
 0:195        true case
 0:195        Branch: Kill
-0:196      Sequence
-0:196        move second child to first child ( temp 3-component vector of float)
-0:196          'r013' ( temp 3-component vector of float)
-0:196          cosine ( temp 3-component vector of float)
-0:196            'inF0' ( in 3-component vector of float)
+0:196      Test condition and select ( temp void)
+0:196        Condition
+0:196        any ( temp bool)
+0:196          Compare Less Than ( temp 3-component vector of bool)
+0:196            'inU0' ( in 3-component vector of uint)
+0:196            Constant:
+0:196              0.000000
+0:196              0.000000
+0:196              0.000000
+0:196        true case
+0:196        Branch: Kill
 0:197      Sequence
 0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r014' ( temp 3-component vector of float)
-0:197          hyp. cosine ( temp 3-component vector of float)
+0:197          'r013' ( temp 3-component vector of float)
+0:197          cosine ( temp 3-component vector of float)
 0:197            'inF0' ( in 3-component vector of float)
 0:198      Sequence
-0:198        move second child to first child ( temp 3-component vector of uint)
-0:198          'r015' ( temp 3-component vector of uint)
+0:198        move second child to first child ( temp 3-component vector of float)
+0:198          'r014' ( temp 3-component vector of float)
+0:198          hyp. cosine ( temp 3-component vector of float)
+0:198            'inF0' ( in 3-component vector of float)
+0:199      Sequence
+0:199        move second child to first child ( temp 3-component vector of uint)
+0:199          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of float)
-0:199          'r016' ( temp 3-component vector of float)
-0:199          cross-product ( temp 3-component vector of float)
-0:199            'inF0' ( in 3-component vector of float)
-0:199            'inF1' ( in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r017' ( temp 3-component vector of float)
-0:200          dPdx ( temp 3-component vector of float)
+0:200          'r016' ( temp 3-component vector of float)
+0:200          cross-product ( temp 3-component vector of float)
 0:200            'inF0' ( in 3-component vector of float)
+0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r018' ( temp 3-component vector of float)
-0:201          dPdxCoarse ( temp 3-component vector of float)
+0:201          'r017' ( temp 3-component vector of float)
+0:201          dPdx ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r019' ( temp 3-component vector of float)
-0:202          dPdxFine ( temp 3-component vector of float)
+0:202          'r018' ( temp 3-component vector of float)
+0:202          dPdxCoarse ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r020' ( temp 3-component vector of float)
-0:203          dPdy ( temp 3-component vector of float)
+0:203          'r019' ( temp 3-component vector of float)
+0:203          dPdxFine ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r021' ( temp 3-component vector of float)
-0:204          dPdyCoarse ( temp 3-component vector of float)
+0:204          'r020' ( temp 3-component vector of float)
+0:204          dPdy ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r022' ( temp 3-component vector of float)
-0:205          dPdyFine ( temp 3-component vector of float)
+0:205          'r021' ( temp 3-component vector of float)
+0:205          dPdyCoarse ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r023' ( temp 3-component vector of float)
-0:206          degrees ( temp 3-component vector of float)
+0:206          'r022' ( temp 3-component vector of float)
+0:206          dPdyFine ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
-0:207        move second child to first child ( temp float)
-0:207          'r024' ( temp float)
-0:207          distance ( temp float)
+0:207        move second child to first child ( temp 3-component vector of float)
+0:207          'r023' ( temp 3-component vector of float)
+0:207          degrees ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
-0:207            'inF1' ( in 3-component vector of float)
 0:208      Sequence
 0:208        move second child to first child ( temp float)
-0:208          'r025' ( temp float)
-0:208          dot-product ( temp float)
+0:208          'r024' ( temp float)
+0:208          distance ( temp float)
 0:208            'inF0' ( in 3-component vector of float)
 0:208            'inF1' ( in 3-component vector of float)
-0:212      Sequence
-0:212        move second child to first child ( temp 3-component vector of float)
-0:212          'r029' ( temp 3-component vector of float)
-0:212          exp ( temp 3-component vector of float)
-0:212            'inF0' ( in 3-component vector of float)
+0:209      Sequence
+0:209        move second child to first child ( temp float)
+0:209          'r025' ( temp float)
+0:209          dot-product ( temp float)
+0:209            'inF0' ( in 3-component vector of float)
+0:209            'inF1' ( in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r030' ( temp 3-component vector of float)
-0:213          exp2 ( temp 3-component vector of float)
+0:213          'r029' ( temp 3-component vector of float)
+0:213          exp ( temp 3-component vector of float)
 0:213            'inF0' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r031' ( temp 3-component vector of float)
-0:214          face-forward ( temp 3-component vector of float)
+0:214          'r030' ( temp 3-component vector of float)
+0:214          exp2 ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
-0:214            'inF1' ( in 3-component vector of float)
-0:214            'inF2' ( in 3-component vector of float)
 0:215      Sequence
-0:215        move second child to first child ( temp 3-component vector of uint)
-0:215          'r032' ( temp 3-component vector of uint)
+0:215        move second child to first child ( temp 3-component vector of float)
+0:215          'r031' ( temp 3-component vector of float)
+0:215          face-forward ( temp 3-component vector of float)
+0:215            'inF0' ( in 3-component vector of float)
+0:215            'inF1' ( in 3-component vector of float)
+0:215            'inF2' ( in 3-component vector of float)
+0:216      Sequence
+0:216        move second child to first child ( temp 3-component vector of uint)
+0:216          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r033' ( temp 3-component vector of uint)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of float)
-0:217          'r034' ( temp 3-component vector of float)
-0:217          Floor ( temp 3-component vector of float)
-0:217            'inF0' ( in 3-component vector of float)
-0:219      Sequence
-0:219        move second child to first child ( temp 3-component vector of float)
-0:219          'r036' ( temp 3-component vector of float)
-0:219          mod ( temp 3-component vector of float)
-0:219            'inF0' ( in 3-component vector of float)
-0:219            'inF1' ( in 3-component vector of float)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of float)
+0:218          'r034' ( temp 3-component vector of float)
+0:218          Floor ( temp 3-component vector of float)
+0:218            'inF0' ( in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r037' ( temp 3-component vector of float)
-0:220          Fraction ( temp 3-component vector of float)
+0:220          'r036' ( temp 3-component vector of float)
+0:220          mod ( temp 3-component vector of float)
 0:220            'inF0' ( in 3-component vector of float)
+0:220            'inF1' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r039' ( temp 3-component vector of float)
-0:221          fwidth ( temp 3-component vector of float)
+0:221          'r037' ( temp 3-component vector of float)
+0:221          Fraction ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
 0:222      Sequence
-0:222        move second child to first child ( temp 3-component vector of bool)
-0:222          'r040' ( temp 3-component vector of bool)
-0:222          isinf ( temp 3-component vector of bool)
+0:222        move second child to first child ( temp 3-component vector of float)
+0:222          'r039' ( temp 3-component vector of float)
+0:222          fwidth ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r041' ( temp 3-component vector of bool)
-0:223          isnan ( temp 3-component vector of bool)
+0:223          'r040' ( temp 3-component vector of bool)
+0:223          isinf ( temp 3-component vector of bool)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
-0:224        move second child to first child ( temp 3-component vector of float)
-0:224          'r042' ( temp 3-component vector of float)
-0:224          ldexp ( temp 3-component vector of float)
+0:224        move second child to first child ( temp 3-component vector of bool)
+0:224          'r041' ( temp 3-component vector of bool)
+0:224          isnan ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
-0:224            'inF1' ( in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r039a' ( temp 3-component vector of float)
-0:225          mix ( temp 3-component vector of float)
+0:225          'r042' ( temp 3-component vector of float)
+0:225          ldexp ( temp 3-component vector of float)
 0:225            'inF0' ( in 3-component vector of float)
 0:225            'inF1' ( in 3-component vector of float)
-0:225            'inF2' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039b' ( temp 3-component vector of float)
+0:226          'r039a' ( temp 3-component vector of float)
 0:226          mix ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            Constant:
-0:226              0.300000
+0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
-0:227        move second child to first child ( temp float)
-0:227          'r043' ( temp float)
-0:227          length ( temp float)
+0:227        move second child to first child ( temp 3-component vector of float)
+0:227          'r039b' ( temp 3-component vector of float)
+0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
+0:227            'inF1' ( in 3-component vector of float)
+0:227            Constant:
+0:227              0.300000
 0:228      Sequence
-0:228        move second child to first child ( temp 3-component vector of float)
-0:228          'r044' ( temp 3-component vector of float)
-0:228          log ( temp 3-component vector of float)
+0:228        move second child to first child ( temp float)
+0:228          'r043' ( temp float)
+0:228          length ( temp float)
 0:228            'inF0' ( in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r045' ( temp 3-component vector of float)
-0:229          vector-scale ( temp 3-component vector of float)
-0:229            log2 ( temp 3-component vector of float)
-0:229              'inF0' ( in 3-component vector of float)
-0:229            Constant:
-0:229              0.301030
+0:229          'r044' ( temp 3-component vector of float)
+0:229          log ( temp 3-component vector of float)
+0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r046' ( temp 3-component vector of float)
-0:230          log2 ( temp 3-component vector of float)
-0:230            'inF0' ( in 3-component vector of float)
+0:230          'r045' ( temp 3-component vector of float)
+0:230          vector-scale ( temp 3-component vector of float)
+0:230            log2 ( temp 3-component vector of float)
+0:230              'inF0' ( in 3-component vector of float)
+0:230            Constant:
+0:230              0.301030
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r047' ( temp 3-component vector of float)
-0:231          max ( temp 3-component vector of float)
+0:231          'r046' ( temp 3-component vector of float)
+0:231          log2 ( temp 3-component vector of float)
 0:231            'inF0' ( in 3-component vector of float)
-0:231            'inF1' ( in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r048' ( temp 3-component vector of float)
-0:232          min ( temp 3-component vector of float)
+0:232          'r047' ( temp 3-component vector of float)
+0:232          max ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
 0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r049' ( temp 3-component vector of float)
-0:233          normalize ( temp 3-component vector of float)
+0:233          'r048' ( temp 3-component vector of float)
+0:233          min ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
+0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r050' ( temp 3-component vector of float)
-0:234          pow ( temp 3-component vector of float)
+0:234          'r049' ( temp 3-component vector of float)
+0:234          normalize ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
-0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r051' ( temp 3-component vector of float)
-0:235          radians ( temp 3-component vector of float)
+0:235          'r050' ( temp 3-component vector of float)
+0:235          pow ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
+0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r052' ( temp 3-component vector of float)
-0:236          divide ( temp 3-component vector of float)
-0:236            Constant:
-0:236              1.000000
+0:236          'r051' ( temp 3-component vector of float)
+0:236          radians ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r053' ( temp 3-component vector of float)
-0:237          reflect ( temp 3-component vector of float)
+0:237          'r052' ( temp 3-component vector of float)
+0:237          divide ( temp 3-component vector of float)
+0:237            Constant:
+0:237              1.000000
 0:237            'inF0' ( in 3-component vector of float)
-0:237            'inF1' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r054' ( temp 3-component vector of float)
-0:238          refract ( temp 3-component vector of float)
+0:238          'r053' ( temp 3-component vector of float)
+0:238          reflect ( temp 3-component vector of float)
 0:238            'inF0' ( in 3-component vector of float)
 0:238            'inF1' ( in 3-component vector of float)
-0:238            Constant:
-0:238              2.000000
 0:239      Sequence
-0:239        move second child to first child ( temp 3-component vector of uint)
-0:239          'r055' ( temp 3-component vector of uint)
+0:239        move second child to first child ( temp 3-component vector of float)
+0:239          'r054' ( temp 3-component vector of float)
+0:239          refract ( temp 3-component vector of float)
+0:239            'inF0' ( in 3-component vector of float)
+0:239            'inF1' ( in 3-component vector of float)
+0:239            Constant:
+0:239              2.000000
+0:240      Sequence
+0:240        move second child to first child ( temp 3-component vector of uint)
+0:240          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of float)
-0:240          'r056' ( temp 3-component vector of float)
-0:240          roundEven ( temp 3-component vector of float)
-0:240            'inF0' ( in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r057' ( temp 3-component vector of float)
-0:241          inverse sqrt ( temp 3-component vector of float)
+0:241          'r056' ( temp 3-component vector of float)
+0:241          roundEven ( temp 3-component vector of float)
 0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r058' ( temp 3-component vector of float)
-0:242          clamp ( temp 3-component vector of float)
+0:242          'r057' ( temp 3-component vector of float)
+0:242          inverse sqrt ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
-0:242            Constant:
-0:242              0.000000
-0:242            Constant:
-0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r059' ( temp 3-component vector of float)
-0:243          Sign ( temp 3-component vector of float)
+0:243          'r058' ( temp 3-component vector of float)
+0:243          clamp ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
+0:243            Constant:
+0:243              0.000000
+0:243            Constant:
+0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r060' ( temp 3-component vector of float)
-0:244          sine ( temp 3-component vector of float)
+0:244          'r059' ( temp 3-component vector of float)
+0:244          Sign ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'inF1' ( in 3-component vector of float)
+0:245          'r060' ( temp 3-component vector of float)
 0:245          sine ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
-0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'inF2' ( in 3-component vector of float)
-0:245          cosine ( temp 3-component vector of float)
-0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'r061' ( temp 3-component vector of float)
-0:246          hyp. sine ( temp 3-component vector of float)
+0:246          'inF1' ( in 3-component vector of float)
+0:246          sine ( temp 3-component vector of float)
+0:246            'inF0' ( in 3-component vector of float)
+0:246        move second child to first child ( temp 3-component vector of float)
+0:246          'inF2' ( in 3-component vector of float)
+0:246          cosine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r062' ( temp 3-component vector of float)
-0:247          smoothstep ( temp 3-component vector of float)
+0:247          'r061' ( temp 3-component vector of float)
+0:247          hyp. sine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
-0:247            'inF1' ( in 3-component vector of float)
-0:247            'inF2' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r063' ( temp 3-component vector of float)
-0:248          sqrt ( temp 3-component vector of float)
+0:248          'r062' ( temp 3-component vector of float)
+0:248          smoothstep ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
+0:248            'inF1' ( in 3-component vector of float)
+0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r064' ( temp 3-component vector of float)
-0:249          step ( temp 3-component vector of float)
+0:249          'r063' ( temp 3-component vector of float)
+0:249          sqrt ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
-0:249            'inF1' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r065' ( temp 3-component vector of float)
-0:250          tangent ( temp 3-component vector of float)
+0:250          'r064' ( temp 3-component vector of float)
+0:250          step ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
+0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r066' ( temp 3-component vector of float)
-0:251          hyp. tangent ( temp 3-component vector of float)
+0:251          'r065' ( temp 3-component vector of float)
+0:251          tangent ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
-0:253      Sequence
-0:253        move second child to first child ( temp 3-component vector of float)
-0:253          'r067' ( temp 3-component vector of float)
-0:253          trunc ( temp 3-component vector of float)
-0:253            'inF0' ( in 3-component vector of float)
-0:256      Branch: Return with expression
+0:252      Sequence
+0:252        move second child to first child ( temp 3-component vector of float)
+0:252          'r066' ( temp 3-component vector of float)
+0:252          hyp. tangent ( temp 3-component vector of float)
+0:252            'inF0' ( in 3-component vector of float)
+0:254      Sequence
+0:254        move second child to first child ( temp 3-component vector of float)
+0:254          'r067' ( temp 3-component vector of float)
+0:254          trunc ( temp 3-component vector of float)
+0:254            'inF0' ( in 3-component vector of float)
+0:257      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:260    Function Parameters: 
-0:260      'inF0' ( in 4-component vector of float)
-0:260      'inF1' ( in 4-component vector of float)
-0:260      'inF2' ( in 4-component vector of float)
-0:260      'inU0' ( in 4-component vector of uint)
-0:260      'inU1' ( in 4-component vector of uint)
+0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:261    Function Parameters: 
+0:261      'inF0' ( in 4-component vector of float)
+0:261      'inF1' ( in 4-component vector of float)
+0:261      'inF2' ( in 4-component vector of float)
+0:261      'inU0' ( in 4-component vector of uint)
+0:261      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:263      Sequence
-0:263        move second child to first child ( temp bool)
-0:263          'r000' ( temp bool)
-0:263          all ( temp bool)
-0:263            Convert float to bool ( temp 4-component vector of bool)
-0:263              'inF0' ( in 4-component vector of float)
 0:264      Sequence
-0:264        move second child to first child ( temp 4-component vector of float)
-0:264          'r001' ( temp 4-component vector of float)
-0:264          Absolute value ( temp 4-component vector of float)
-0:264            'inF0' ( in 4-component vector of float)
+0:264        move second child to first child ( temp bool)
+0:264          'r000' ( temp bool)
+0:264          all ( temp bool)
+0:264            Convert float to bool ( temp 4-component vector of bool)
+0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r002' ( temp 4-component vector of float)
-0:265          arc cosine ( temp 4-component vector of float)
+0:265          'r001' ( temp 4-component vector of float)
+0:265          Absolute value ( temp 4-component vector of float)
 0:265            'inF0' ( in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child ( temp bool)
-0:266          'r003' ( temp bool)
-0:266          any ( temp bool)
-0:266            Convert float to bool ( temp 4-component vector of bool)
-0:266              'inF0' ( in 4-component vector of float)
+0:266        move second child to first child ( temp 4-component vector of float)
+0:266          'r002' ( temp 4-component vector of float)
+0:266          arc cosine ( temp 4-component vector of float)
+0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp 4-component vector of float)
-0:267          'r004' ( temp 4-component vector of float)
-0:267          arc sine ( temp 4-component vector of float)
-0:267            'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp bool)
+0:267          'r003' ( temp bool)
+0:267          any ( temp bool)
+0:267            Convert float to bool ( temp 4-component vector of bool)
+0:267              'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of int)
-0:268          'r005' ( temp 4-component vector of int)
-0:268          floatBitsToInt ( temp 4-component vector of int)
+0:268        move second child to first child ( temp 4-component vector of float)
+0:268          'r004' ( temp 4-component vector of float)
+0:268          arc sine ( temp 4-component vector of float)
 0:268            'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of uint)
-0:269          'r006' ( temp 4-component vector of uint)
-0:269          floatBitsToUint ( temp 4-component vector of uint)
+0:269        move second child to first child ( temp 4-component vector of int)
+0:269          'r005' ( temp 4-component vector of int)
+0:269          floatBitsToInt ( temp 4-component vector of int)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of float)
-0:270          'r007' ( temp 4-component vector of float)
-0:270          intBitsToFloat ( temp 4-component vector of float)
-0:270            'inU0' ( in 4-component vector of uint)
-0:272      Sequence
-0:272        move second child to first child ( temp 4-component vector of float)
-0:272          'r009' ( temp 4-component vector of float)
-0:272          arc tangent ( temp 4-component vector of float)
-0:272            'inF0' ( in 4-component vector of float)
+0:270        move second child to first child ( temp 4-component vector of uint)
+0:270          'r006' ( temp 4-component vector of uint)
+0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270            'inF0' ( in 4-component vector of float)
+0:271      Sequence
+0:271        move second child to first child ( temp 4-component vector of float)
+0:271          'r007' ( temp 4-component vector of float)
+0:271          intBitsToFloat ( temp 4-component vector of float)
+0:271            'inU0' ( in 4-component vector of uint)
 0:273      Sequence
 0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r010' ( temp 4-component vector of float)
+0:273          'r009' ( temp 4-component vector of float)
 0:273          arc tangent ( temp 4-component vector of float)
 0:273            'inF0' ( in 4-component vector of float)
-0:273            'inF1' ( in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r011' ( temp 4-component vector of float)
-0:274          Ceiling ( temp 4-component vector of float)
+0:274          'r010' ( temp 4-component vector of float)
+0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
+0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r012' ( temp 4-component vector of float)
-0:275          clamp ( temp 4-component vector of float)
+0:275          'r011' ( temp 4-component vector of float)
+0:275          Ceiling ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
-0:275            'inF1' ( in 4-component vector of float)
-0:275            'inF2' ( in 4-component vector of float)
-0:276      Test condition and select ( temp void)
-0:276        Condition
-0:276        any ( temp bool)
-0:276          Compare Less Than ( temp 4-component vector of bool)
+0:276      Sequence
+0:276        move second child to first child ( temp 4-component vector of float)
+0:276          'r012' ( temp 4-component vector of float)
+0:276          clamp ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            Constant:
-0:276              0.000000
-0:276              0.000000
-0:276              0.000000
-0:276              0.000000
-0:276        true case
-0:276        Branch: Kill
+0:276            'inF1' ( in 4-component vector of float)
+0:276            'inF2' ( in 4-component vector of float)
 0:277      Test condition and select ( temp void)
 0:277        Condition
 0:277        any ( temp bool)
 0:277          Compare Less Than ( temp 4-component vector of bool)
-0:277            'inU0' ( in 4-component vector of uint)
+0:277            'inF0' ( in 4-component vector of float)
 0:277            Constant:
 0:277              0.000000
 0:277              0.000000
@@ -1253,905 +1247,917 @@
 0:277              0.000000
 0:277        true case
 0:277        Branch: Kill
-0:278      Sequence
-0:278        move second child to first child ( temp 4-component vector of float)
-0:278          'r013' ( temp 4-component vector of float)
-0:278          cosine ( temp 4-component vector of float)
-0:278            'inF0' ( in 4-component vector of float)
+0:278      Test condition and select ( temp void)
+0:278        Condition
+0:278        any ( temp bool)
+0:278          Compare Less Than ( temp 4-component vector of bool)
+0:278            'inU0' ( in 4-component vector of uint)
+0:278            Constant:
+0:278              0.000000
+0:278              0.000000
+0:278              0.000000
+0:278              0.000000
+0:278        true case
+0:278        Branch: Kill
 0:279      Sequence
 0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r014' ( temp 4-component vector of float)
-0:279          hyp. cosine ( temp 4-component vector of float)
+0:279          'r013' ( temp 4-component vector of float)
+0:279          cosine ( temp 4-component vector of float)
 0:279            'inF0' ( in 4-component vector of float)
 0:280      Sequence
-0:280        move second child to first child ( temp 4-component vector of uint)
-0:280          'r015' ( temp 4-component vector of uint)
+0:280        move second child to first child ( temp 4-component vector of float)
+0:280          'r014' ( temp 4-component vector of float)
+0:280          hyp. cosine ( temp 4-component vector of float)
+0:280            'inF0' ( in 4-component vector of float)
+0:281      Sequence
+0:281        move second child to first child ( temp 4-component vector of uint)
+0:281          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of float)
-0:281          'r016' ( temp 4-component vector of float)
-0:281          dPdx ( temp 4-component vector of float)
-0:281            'inF0' ( in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r017' ( temp 4-component vector of float)
-0:282          dPdxCoarse ( temp 4-component vector of float)
+0:282          'r016' ( temp 4-component vector of float)
+0:282          dPdx ( temp 4-component vector of float)
 0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r018' ( temp 4-component vector of float)
-0:283          dPdxFine ( temp 4-component vector of float)
+0:283          'r017' ( temp 4-component vector of float)
+0:283          dPdxCoarse ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r019' ( temp 4-component vector of float)
-0:284          dPdy ( temp 4-component vector of float)
+0:284          'r018' ( temp 4-component vector of float)
+0:284          dPdxFine ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r020' ( temp 4-component vector of float)
-0:285          dPdyCoarse ( temp 4-component vector of float)
+0:285          'r019' ( temp 4-component vector of float)
+0:285          dPdy ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r021' ( temp 4-component vector of float)
-0:286          dPdyFine ( temp 4-component vector of float)
+0:286          'r020' ( temp 4-component vector of float)
+0:286          dPdyCoarse ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r022' ( temp 4-component vector of float)
-0:287          degrees ( temp 4-component vector of float)
+0:287          'r021' ( temp 4-component vector of float)
+0:287          dPdyFine ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
-0:288        move second child to first child ( temp float)
-0:288          'r023' ( temp float)
-0:288          distance ( temp float)
+0:288        move second child to first child ( temp 4-component vector of float)
+0:288          'r022' ( temp 4-component vector of float)
+0:288          degrees ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
-0:288            'inF1' ( in 4-component vector of float)
 0:289      Sequence
 0:289        move second child to first child ( temp float)
-0:289          'r024' ( temp float)
-0:289          dot-product ( temp float)
+0:289          'r023' ( temp float)
+0:289          distance ( temp float)
 0:289            'inF0' ( in 4-component vector of float)
 0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
-0:290        move second child to first child ( temp 4-component vector of float)
-0:290          'r025' ( temp 4-component vector of float)
-0:290          Construct vec4 ( temp 4-component vector of float)
-0:290            Constant:
-0:290              1.000000
-0:290            component-wise multiply ( temp float)
-0:290              direct index ( temp float)
-0:290                'inF0' ( in 4-component vector of float)
-0:290                Constant:
-0:290                  1 (const int)
-0:290              direct index ( temp float)
-0:290                'inF1' ( in 4-component vector of float)
-0:290                Constant:
-0:290                  1 (const int)
-0:290            direct index ( temp float)
-0:290              'inF0' ( in 4-component vector of float)
-0:290              Constant:
-0:290                2 (const int)
-0:290            direct index ( temp float)
-0:290              'inF1' ( in 4-component vector of float)
-0:290              Constant:
-0:290                3 (const int)
-0:294      Sequence
-0:294        move second child to first child ( temp 4-component vector of float)
-0:294          'r029' ( temp 4-component vector of float)
-0:294          exp ( temp 4-component vector of float)
-0:294            'inF0' ( in 4-component vector of float)
+0:290        move second child to first child ( temp float)
+0:290          'r024' ( temp float)
+0:290          dot-product ( temp float)
+0:290            'inF0' ( in 4-component vector of float)
+0:290            'inF1' ( in 4-component vector of float)
+0:291      Sequence
+0:291        move second child to first child ( temp 4-component vector of float)
+0:291          'r025' ( temp 4-component vector of float)
+0:291          Construct vec4 ( temp 4-component vector of float)
+0:291            Constant:
+0:291              1.000000
+0:291            component-wise multiply ( temp float)
+0:291              direct index ( temp float)
+0:291                'inF0' ( in 4-component vector of float)
+0:291                Constant:
+0:291                  1 (const int)
+0:291              direct index ( temp float)
+0:291                'inF1' ( in 4-component vector of float)
+0:291                Constant:
+0:291                  1 (const int)
+0:291            direct index ( temp float)
+0:291              'inF0' ( in 4-component vector of float)
+0:291              Constant:
+0:291                2 (const int)
+0:291            direct index ( temp float)
+0:291              'inF1' ( in 4-component vector of float)
+0:291              Constant:
+0:291                3 (const int)
 0:295      Sequence
 0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r030' ( temp 4-component vector of float)
-0:295          exp2 ( temp 4-component vector of float)
+0:295          'r029' ( temp 4-component vector of float)
+0:295          exp ( temp 4-component vector of float)
 0:295            'inF0' ( in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r031' ( temp 4-component vector of float)
-0:296          face-forward ( temp 4-component vector of float)
+0:296          'r030' ( temp 4-component vector of float)
+0:296          exp2 ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
-0:296            'inF1' ( in 4-component vector of float)
-0:296            'inF2' ( in 4-component vector of float)
 0:297      Sequence
-0:297        move second child to first child ( temp 4-component vector of uint)
-0:297          'r032' ( temp 4-component vector of uint)
+0:297        move second child to first child ( temp 4-component vector of float)
+0:297          'r031' ( temp 4-component vector of float)
+0:297          face-forward ( temp 4-component vector of float)
+0:297            'inF0' ( in 4-component vector of float)
+0:297            'inF1' ( in 4-component vector of float)
+0:297            'inF2' ( in 4-component vector of float)
+0:298      Sequence
+0:298        move second child to first child ( temp 4-component vector of uint)
+0:298          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r033' ( temp 4-component vector of uint)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of float)
-0:299          'r034' ( temp 4-component vector of float)
-0:299          Floor ( temp 4-component vector of float)
-0:299            'inF0' ( in 4-component vector of float)
-0:301      Sequence
-0:301        move second child to first child ( temp 4-component vector of float)
-0:301          'r036' ( temp 4-component vector of float)
-0:301          mod ( temp 4-component vector of float)
-0:301            'inF0' ( in 4-component vector of float)
-0:301            'inF1' ( in 4-component vector of float)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of float)
+0:300          'r034' ( temp 4-component vector of float)
+0:300          Floor ( temp 4-component vector of float)
+0:300            'inF0' ( in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r037' ( temp 4-component vector of float)
-0:302          Fraction ( temp 4-component vector of float)
+0:302          'r036' ( temp 4-component vector of float)
+0:302          mod ( temp 4-component vector of float)
 0:302            'inF0' ( in 4-component vector of float)
+0:302            'inF1' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r039' ( temp 4-component vector of float)
-0:303          fwidth ( temp 4-component vector of float)
+0:303          'r037' ( temp 4-component vector of float)
+0:303          Fraction ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
 0:304      Sequence
-0:304        move second child to first child ( temp 4-component vector of bool)
-0:304          'r040' ( temp 4-component vector of bool)
-0:304          isinf ( temp 4-component vector of bool)
+0:304        move second child to first child ( temp 4-component vector of float)
+0:304          'r039' ( temp 4-component vector of float)
+0:304          fwidth ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r041' ( temp 4-component vector of bool)
-0:305          isnan ( temp 4-component vector of bool)
+0:305          'r040' ( temp 4-component vector of bool)
+0:305          isinf ( temp 4-component vector of bool)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
-0:306        move second child to first child ( temp 4-component vector of float)
-0:306          'r042' ( temp 4-component vector of float)
-0:306          ldexp ( temp 4-component vector of float)
+0:306        move second child to first child ( temp 4-component vector of bool)
+0:306          'r041' ( temp 4-component vector of bool)
+0:306          isnan ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
-0:306            'inF1' ( in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r039a' ( temp 4-component vector of float)
-0:307          mix ( temp 4-component vector of float)
+0:307          'r042' ( temp 4-component vector of float)
+0:307          ldexp ( temp 4-component vector of float)
 0:307            'inF0' ( in 4-component vector of float)
 0:307            'inF1' ( in 4-component vector of float)
-0:307            'inF2' ( in 4-component vector of float)
 0:308      Sequence
-0:308        move second child to first child ( temp float)
-0:308          'r043' ( temp float)
-0:308          length ( temp float)
+0:308        move second child to first child ( temp 4-component vector of float)
+0:308          'r039a' ( temp 4-component vector of float)
+0:308          mix ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
+0:308            'inF1' ( in 4-component vector of float)
+0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp 4-component vector of float)
-0:309          'r044' ( temp 4-component vector of float)
-0:309          log ( temp 4-component vector of float)
+0:309        move second child to first child ( temp float)
+0:309          'r043' ( temp float)
+0:309          length ( temp float)
 0:309            'inF0' ( in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r045' ( temp 4-component vector of float)
-0:310          vector-scale ( temp 4-component vector of float)
-0:310            log2 ( temp 4-component vector of float)
-0:310              'inF0' ( in 4-component vector of float)
-0:310            Constant:
-0:310              0.301030
+0:310          'r044' ( temp 4-component vector of float)
+0:310          log ( temp 4-component vector of float)
+0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r046' ( temp 4-component vector of float)
-0:311          log2 ( temp 4-component vector of float)
-0:311            'inF0' ( in 4-component vector of float)
+0:311          'r045' ( temp 4-component vector of float)
+0:311          vector-scale ( temp 4-component vector of float)
+0:311            log2 ( temp 4-component vector of float)
+0:311              'inF0' ( in 4-component vector of float)
+0:311            Constant:
+0:311              0.301030
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r047' ( temp 4-component vector of float)
-0:312          max ( temp 4-component vector of float)
+0:312          'r046' ( temp 4-component vector of float)
+0:312          log2 ( temp 4-component vector of float)
 0:312            'inF0' ( in 4-component vector of float)
-0:312            'inF1' ( in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r048' ( temp 4-component vector of float)
-0:313          min ( temp 4-component vector of float)
+0:313          'r047' ( temp 4-component vector of float)
+0:313          max ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
 0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r049' ( temp 4-component vector of float)
-0:314          normalize ( temp 4-component vector of float)
+0:314          'r048' ( temp 4-component vector of float)
+0:314          min ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
+0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r050' ( temp 4-component vector of float)
-0:315          pow ( temp 4-component vector of float)
+0:315          'r049' ( temp 4-component vector of float)
+0:315          normalize ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
-0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r051' ( temp 4-component vector of float)
-0:316          radians ( temp 4-component vector of float)
+0:316          'r050' ( temp 4-component vector of float)
+0:316          pow ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
+0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r052' ( temp 4-component vector of float)
-0:317          divide ( temp 4-component vector of float)
-0:317            Constant:
-0:317              1.000000
+0:317          'r051' ( temp 4-component vector of float)
+0:317          radians ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r053' ( temp 4-component vector of float)
-0:318          reflect ( temp 4-component vector of float)
+0:318          'r052' ( temp 4-component vector of float)
+0:318          divide ( temp 4-component vector of float)
+0:318            Constant:
+0:318              1.000000
 0:318            'inF0' ( in 4-component vector of float)
-0:318            'inF1' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r054' ( temp 4-component vector of float)
-0:319          refract ( temp 4-component vector of float)
+0:319          'r053' ( temp 4-component vector of float)
+0:319          reflect ( temp 4-component vector of float)
 0:319            'inF0' ( in 4-component vector of float)
 0:319            'inF1' ( in 4-component vector of float)
-0:319            Constant:
-0:319              2.000000
 0:320      Sequence
-0:320        move second child to first child ( temp 4-component vector of uint)
-0:320          'r055' ( temp 4-component vector of uint)
+0:320        move second child to first child ( temp 4-component vector of float)
+0:320          'r054' ( temp 4-component vector of float)
+0:320          refract ( temp 4-component vector of float)
+0:320            'inF0' ( in 4-component vector of float)
+0:320            'inF1' ( in 4-component vector of float)
+0:320            Constant:
+0:320              2.000000
+0:321      Sequence
+0:321        move second child to first child ( temp 4-component vector of uint)
+0:321          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of float)
-0:321          'r056' ( temp 4-component vector of float)
-0:321          roundEven ( temp 4-component vector of float)
-0:321            'inF0' ( in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r057' ( temp 4-component vector of float)
-0:322          inverse sqrt ( temp 4-component vector of float)
+0:322          'r056' ( temp 4-component vector of float)
+0:322          roundEven ( temp 4-component vector of float)
 0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r058' ( temp 4-component vector of float)
-0:323          clamp ( temp 4-component vector of float)
+0:323          'r057' ( temp 4-component vector of float)
+0:323          inverse sqrt ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
-0:323            Constant:
-0:323              0.000000
-0:323            Constant:
-0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r059' ( temp 4-component vector of float)
-0:324          Sign ( temp 4-component vector of float)
+0:324          'r058' ( temp 4-component vector of float)
+0:324          clamp ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
+0:324            Constant:
+0:324              0.000000
+0:324            Constant:
+0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r060' ( temp 4-component vector of float)
-0:325          sine ( temp 4-component vector of float)
+0:325          'r059' ( temp 4-component vector of float)
+0:325          Sign ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'inF1' ( in 4-component vector of float)
+0:326          'r060' ( temp 4-component vector of float)
 0:326          sine ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
-0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'inF2' ( in 4-component vector of float)
-0:326          cosine ( temp 4-component vector of float)
-0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'r061' ( temp 4-component vector of float)
-0:327          hyp. sine ( temp 4-component vector of float)
+0:327          'inF1' ( in 4-component vector of float)
+0:327          sine ( temp 4-component vector of float)
+0:327            'inF0' ( in 4-component vector of float)
+0:327        move second child to first child ( temp 4-component vector of float)
+0:327          'inF2' ( in 4-component vector of float)
+0:327          cosine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r062' ( temp 4-component vector of float)
-0:328          smoothstep ( temp 4-component vector of float)
+0:328          'r061' ( temp 4-component vector of float)
+0:328          hyp. sine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
-0:328            'inF1' ( in 4-component vector of float)
-0:328            'inF2' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r063' ( temp 4-component vector of float)
-0:329          sqrt ( temp 4-component vector of float)
+0:329          'r062' ( temp 4-component vector of float)
+0:329          smoothstep ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
+0:329            'inF1' ( in 4-component vector of float)
+0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r064' ( temp 4-component vector of float)
-0:330          step ( temp 4-component vector of float)
+0:330          'r063' ( temp 4-component vector of float)
+0:330          sqrt ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
-0:330            'inF1' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r065' ( temp 4-component vector of float)
-0:331          tangent ( temp 4-component vector of float)
+0:331          'r064' ( temp 4-component vector of float)
+0:331          step ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
+0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r066' ( temp 4-component vector of float)
-0:332          hyp. tangent ( temp 4-component vector of float)
+0:332          'r065' ( temp 4-component vector of float)
+0:332          tangent ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
-0:334      Sequence
-0:334        move second child to first child ( temp 4-component vector of float)
-0:334          'r067' ( temp 4-component vector of float)
-0:334          trunc ( temp 4-component vector of float)
-0:334            'inF0' ( in 4-component vector of float)
-0:337      Branch: Return with expression
+0:333      Sequence
+0:333        move second child to first child ( temp 4-component vector of float)
+0:333          'r066' ( temp 4-component vector of float)
+0:333          hyp. tangent ( temp 4-component vector of float)
+0:333            'inF0' ( in 4-component vector of float)
+0:335      Sequence
+0:335        move second child to first child ( temp 4-component vector of float)
+0:335          'r067' ( temp 4-component vector of float)
+0:335          trunc ( temp 4-component vector of float)
+0:335            'inF0' ( in 4-component vector of float)
+0:338      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:400  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:400    Function Parameters: 
-0:400      'inF0' ( in 2X2 matrix of float)
-0:400      'inF1' ( in 2X2 matrix of float)
-0:400      'inF2' ( in 2X2 matrix of float)
+0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:401    Function Parameters: 
+0:401      'inF0' ( in 2X2 matrix of float)
+0:401      'inF1' ( in 2X2 matrix of float)
+0:401      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:402      Sequence
-0:402        move second child to first child ( temp bool)
-0:402          'r000' ( temp bool)
-0:402          all ( temp bool)
-0:402            Convert float to bool ( temp 2X2 matrix of bool)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r001' ( temp 2X2 matrix of float)
-0:402          Absolute value ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      arc cosine ( temp 2X2 matrix of float)
-0:402        'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp bool)
-0:402          'r003' ( temp bool)
-0:402          any ( temp bool)
-0:402            Convert float to bool ( temp 2X2 matrix of bool)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r004' ( temp 2X2 matrix of float)
-0:402          arc sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r005' ( temp 2X2 matrix of float)
-0:402          arc tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r006' ( temp 2X2 matrix of float)
-0:402          arc tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r007' ( temp 2X2 matrix of float)
-0:402          Ceiling ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Test condition and select ( temp void)
-0:402        Condition
-0:402        any ( temp bool)
-0:402          Compare Less Than ( temp 2X2 matrix of bool)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402        true case
-0:402        Branch: Kill
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r008' ( temp 2X2 matrix of float)
-0:402          clamp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r009' ( temp 2X2 matrix of float)
-0:402          cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r010' ( temp 2X2 matrix of float)
-0:402          hyp. cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r011' ( temp 2X2 matrix of float)
-0:402          dPdx ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r012' ( temp 2X2 matrix of float)
-0:402          dPdxCoarse ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r013' ( temp 2X2 matrix of float)
-0:402          dPdxFine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r014' ( temp 2X2 matrix of float)
-0:402          dPdy ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r015' ( temp 2X2 matrix of float)
-0:402          dPdyCoarse ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r016' ( temp 2X2 matrix of float)
-0:402          dPdyFine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r017' ( temp 2X2 matrix of float)
-0:402          degrees ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp float)
-0:402          'r018' ( temp float)
-0:402          determinant ( temp float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r019' ( temp 2X2 matrix of float)
-0:402          exp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'R020' ( temp 2X2 matrix of float)
-0:402          exp2 ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r021' ( temp 2X2 matrix of float)
-0:402          Floor ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r022' ( temp 2X2 matrix of float)
-0:402          mod ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r023' ( temp 2X2 matrix of float)
-0:402          Fraction ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r025' ( temp 2X2 matrix of float)
-0:402          fwidth ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r026' ( temp 2X2 matrix of float)
-0:402          ldexp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r026a' ( temp 2X2 matrix of float)
-0:402          mix ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r027' ( temp 2X2 matrix of float)
-0:402          log ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r028' ( temp 2X2 matrix of float)
-0:402          matrix-scale ( temp 2X2 matrix of float)
-0:402            log2 ( temp 2X2 matrix of float)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.301030
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r029' ( temp 2X2 matrix of float)
-0:402          log2 ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r030' ( temp 2X2 matrix of float)
-0:402          max ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r031' ( temp 2X2 matrix of float)
-0:402          min ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r032' ( temp 2X2 matrix of float)
-0:402          pow ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r033' ( temp 2X2 matrix of float)
-0:402          radians ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r034' ( temp 2X2 matrix of float)
-0:402          roundEven ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r035' ( temp 2X2 matrix of float)
-0:402          inverse sqrt ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r036' ( temp 2X2 matrix of float)
-0:402          clamp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402            Constant:
-0:402              1.000000
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r037' ( temp 2X2 matrix of float)
-0:402          Sign ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r038' ( temp 2X2 matrix of float)
-0:402          sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'inF1' ( in 2X2 matrix of float)
-0:402          sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'inF2' ( in 2X2 matrix of float)
-0:402          cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r039' ( temp 2X2 matrix of float)
-0:402          hyp. sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r049' ( temp 2X2 matrix of float)
-0:402          smoothstep ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r041' ( temp 2X2 matrix of float)
-0:402          sqrt ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r042' ( temp 2X2 matrix of float)
-0:402          step ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r043' ( temp 2X2 matrix of float)
-0:402          tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r044' ( temp 2X2 matrix of float)
-0:402          hyp. tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      transpose ( temp 2X2 matrix of float)
-0:402        'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r046' ( temp 2X2 matrix of float)
-0:402          trunc ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:405      Branch: Return with expression
+0:403      Sequence
+0:403        move second child to first child ( temp bool)
+0:403          'r000' ( temp bool)
+0:403          all ( temp bool)
+0:403            Convert float to bool ( temp 2X2 matrix of bool)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r001' ( temp 2X2 matrix of float)
+0:403          Absolute value ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      arc cosine ( temp 2X2 matrix of float)
+0:403        'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp bool)
+0:403          'r003' ( temp bool)
+0:403          any ( temp bool)
+0:403            Convert float to bool ( temp 2X2 matrix of bool)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r004' ( temp 2X2 matrix of float)
+0:403          arc sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r005' ( temp 2X2 matrix of float)
+0:403          arc tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r006' ( temp 2X2 matrix of float)
+0:403          arc tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r007' ( temp 2X2 matrix of float)
+0:403          Ceiling ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Test condition and select ( temp void)
+0:403        Condition
+0:403        any ( temp bool)
+0:403          Compare Less Than ( temp 2X2 matrix of bool)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403        true case
+0:403        Branch: Kill
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r008' ( temp 2X2 matrix of float)
+0:403          clamp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r009' ( temp 2X2 matrix of float)
+0:403          cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r010' ( temp 2X2 matrix of float)
+0:403          hyp. cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r011' ( temp 2X2 matrix of float)
+0:403          dPdx ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r012' ( temp 2X2 matrix of float)
+0:403          dPdxCoarse ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r013' ( temp 2X2 matrix of float)
+0:403          dPdxFine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r014' ( temp 2X2 matrix of float)
+0:403          dPdy ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r015' ( temp 2X2 matrix of float)
+0:403          dPdyCoarse ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r016' ( temp 2X2 matrix of float)
+0:403          dPdyFine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r017' ( temp 2X2 matrix of float)
+0:403          degrees ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp float)
+0:403          'r018' ( temp float)
+0:403          determinant ( temp float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r019' ( temp 2X2 matrix of float)
+0:403          exp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'R020' ( temp 2X2 matrix of float)
+0:403          exp2 ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r021' ( temp 2X2 matrix of float)
+0:403          Floor ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r022' ( temp 2X2 matrix of float)
+0:403          mod ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r023' ( temp 2X2 matrix of float)
+0:403          Fraction ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r025' ( temp 2X2 matrix of float)
+0:403          fwidth ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r026' ( temp 2X2 matrix of float)
+0:403          ldexp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r026a' ( temp 2X2 matrix of float)
+0:403          mix ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r027' ( temp 2X2 matrix of float)
+0:403          log ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r028' ( temp 2X2 matrix of float)
+0:403          matrix-scale ( temp 2X2 matrix of float)
+0:403            log2 ( temp 2X2 matrix of float)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.301030
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r029' ( temp 2X2 matrix of float)
+0:403          log2 ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r030' ( temp 2X2 matrix of float)
+0:403          max ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r031' ( temp 2X2 matrix of float)
+0:403          min ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r032' ( temp 2X2 matrix of float)
+0:403          pow ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r033' ( temp 2X2 matrix of float)
+0:403          radians ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r034' ( temp 2X2 matrix of float)
+0:403          roundEven ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r035' ( temp 2X2 matrix of float)
+0:403          inverse sqrt ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r036' ( temp 2X2 matrix of float)
+0:403          clamp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403            Constant:
+0:403              1.000000
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r037' ( temp 2X2 matrix of float)
+0:403          Sign ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r038' ( temp 2X2 matrix of float)
+0:403          sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'inF1' ( in 2X2 matrix of float)
+0:403          sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'inF2' ( in 2X2 matrix of float)
+0:403          cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r039' ( temp 2X2 matrix of float)
+0:403          hyp. sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r049' ( temp 2X2 matrix of float)
+0:403          smoothstep ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r041' ( temp 2X2 matrix of float)
+0:403          sqrt ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r042' ( temp 2X2 matrix of float)
+0:403          step ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r043' ( temp 2X2 matrix of float)
+0:403          tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r044' ( temp 2X2 matrix of float)
+0:403          hyp. tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      transpose ( temp 2X2 matrix of float)
+0:403        'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r046' ( temp 2X2 matrix of float)
+0:403          trunc ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:406      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:409  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:409    Function Parameters: 
-0:409      'inF0' ( in 3X3 matrix of float)
-0:409      'inF1' ( in 3X3 matrix of float)
-0:409      'inF2' ( in 3X3 matrix of float)
+0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:410    Function Parameters: 
+0:410      'inF0' ( in 3X3 matrix of float)
+0:410      'inF1' ( in 3X3 matrix of float)
+0:410      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:411      Sequence
-0:411        move second child to first child ( temp bool)
-0:411          'r000' ( temp bool)
-0:411          all ( temp bool)
-0:411            Convert float to bool ( temp 3X3 matrix of bool)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r001' ( temp 3X3 matrix of float)
-0:411          Absolute value ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      arc cosine ( temp 3X3 matrix of float)
-0:411        'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp bool)
-0:411          'r003' ( temp bool)
-0:411          any ( temp bool)
-0:411            Convert float to bool ( temp 3X3 matrix of bool)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r004' ( temp 3X3 matrix of float)
-0:411          arc sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r005' ( temp 3X3 matrix of float)
-0:411          arc tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r006' ( temp 3X3 matrix of float)
-0:411          arc tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r007' ( temp 3X3 matrix of float)
-0:411          Ceiling ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Test condition and select ( temp void)
-0:411        Condition
-0:411        any ( temp bool)
-0:411          Compare Less Than ( temp 3X3 matrix of bool)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411        true case
-0:411        Branch: Kill
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r008' ( temp 3X3 matrix of float)
-0:411          clamp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r009' ( temp 3X3 matrix of float)
-0:411          cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r010' ( temp 3X3 matrix of float)
-0:411          hyp. cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r011' ( temp 3X3 matrix of float)
-0:411          dPdx ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r012' ( temp 3X3 matrix of float)
-0:411          dPdxCoarse ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r013' ( temp 3X3 matrix of float)
-0:411          dPdxFine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r014' ( temp 3X3 matrix of float)
-0:411          dPdy ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r015' ( temp 3X3 matrix of float)
-0:411          dPdyCoarse ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r016' ( temp 3X3 matrix of float)
-0:411          dPdyFine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r017' ( temp 3X3 matrix of float)
-0:411          degrees ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp float)
-0:411          'r018' ( temp float)
-0:411          determinant ( temp float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r019' ( temp 3X3 matrix of float)
-0:411          exp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'R020' ( temp 3X3 matrix of float)
-0:411          exp2 ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r021' ( temp 3X3 matrix of float)
-0:411          Floor ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r022' ( temp 3X3 matrix of float)
-0:411          mod ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r023' ( temp 3X3 matrix of float)
-0:411          Fraction ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r025' ( temp 3X3 matrix of float)
-0:411          fwidth ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r026' ( temp 3X3 matrix of float)
-0:411          ldexp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r026a' ( temp 3X3 matrix of float)
-0:411          mix ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r027' ( temp 3X3 matrix of float)
-0:411          log ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r028' ( temp 3X3 matrix of float)
-0:411          matrix-scale ( temp 3X3 matrix of float)
-0:411            log2 ( temp 3X3 matrix of float)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.301030
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r029' ( temp 3X3 matrix of float)
-0:411          log2 ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r030' ( temp 3X3 matrix of float)
-0:411          max ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r031' ( temp 3X3 matrix of float)
-0:411          min ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r032' ( temp 3X3 matrix of float)
-0:411          pow ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r033' ( temp 3X3 matrix of float)
-0:411          radians ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r034' ( temp 3X3 matrix of float)
-0:411          roundEven ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r035' ( temp 3X3 matrix of float)
-0:411          inverse sqrt ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r036' ( temp 3X3 matrix of float)
-0:411          clamp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411            Constant:
-0:411              1.000000
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r037' ( temp 3X3 matrix of float)
-0:411          Sign ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r038' ( temp 3X3 matrix of float)
-0:411          sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'inF1' ( in 3X3 matrix of float)
-0:411          sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'inF2' ( in 3X3 matrix of float)
-0:411          cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r039' ( temp 3X3 matrix of float)
-0:411          hyp. sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r049' ( temp 3X3 matrix of float)
-0:411          smoothstep ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r041' ( temp 3X3 matrix of float)
-0:411          sqrt ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r042' ( temp 3X3 matrix of float)
-0:411          step ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r043' ( temp 3X3 matrix of float)
-0:411          tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r044' ( temp 3X3 matrix of float)
-0:411          hyp. tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      transpose ( temp 3X3 matrix of float)
-0:411        'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r046' ( temp 3X3 matrix of float)
-0:411          trunc ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:414      Branch: Return with expression
+0:412      Sequence
+0:412        move second child to first child ( temp bool)
+0:412          'r000' ( temp bool)
+0:412          all ( temp bool)
+0:412            Convert float to bool ( temp 3X3 matrix of bool)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r001' ( temp 3X3 matrix of float)
+0:412          Absolute value ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      arc cosine ( temp 3X3 matrix of float)
+0:412        'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp bool)
+0:412          'r003' ( temp bool)
+0:412          any ( temp bool)
+0:412            Convert float to bool ( temp 3X3 matrix of bool)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r004' ( temp 3X3 matrix of float)
+0:412          arc sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r005' ( temp 3X3 matrix of float)
+0:412          arc tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r006' ( temp 3X3 matrix of float)
+0:412          arc tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r007' ( temp 3X3 matrix of float)
+0:412          Ceiling ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Test condition and select ( temp void)
+0:412        Condition
+0:412        any ( temp bool)
+0:412          Compare Less Than ( temp 3X3 matrix of bool)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412        true case
+0:412        Branch: Kill
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r008' ( temp 3X3 matrix of float)
+0:412          clamp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r009' ( temp 3X3 matrix of float)
+0:412          cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r010' ( temp 3X3 matrix of float)
+0:412          hyp. cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r011' ( temp 3X3 matrix of float)
+0:412          dPdx ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r012' ( temp 3X3 matrix of float)
+0:412          dPdxCoarse ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r013' ( temp 3X3 matrix of float)
+0:412          dPdxFine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r014' ( temp 3X3 matrix of float)
+0:412          dPdy ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r015' ( temp 3X3 matrix of float)
+0:412          dPdyCoarse ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r016' ( temp 3X3 matrix of float)
+0:412          dPdyFine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r017' ( temp 3X3 matrix of float)
+0:412          degrees ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp float)
+0:412          'r018' ( temp float)
+0:412          determinant ( temp float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r019' ( temp 3X3 matrix of float)
+0:412          exp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'R020' ( temp 3X3 matrix of float)
+0:412          exp2 ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r021' ( temp 3X3 matrix of float)
+0:412          Floor ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r022' ( temp 3X3 matrix of float)
+0:412          mod ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r023' ( temp 3X3 matrix of float)
+0:412          Fraction ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r025' ( temp 3X3 matrix of float)
+0:412          fwidth ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r026' ( temp 3X3 matrix of float)
+0:412          ldexp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r026a' ( temp 3X3 matrix of float)
+0:412          mix ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r027' ( temp 3X3 matrix of float)
+0:412          log ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r028' ( temp 3X3 matrix of float)
+0:412          matrix-scale ( temp 3X3 matrix of float)
+0:412            log2 ( temp 3X3 matrix of float)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.301030
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r029' ( temp 3X3 matrix of float)
+0:412          log2 ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r030' ( temp 3X3 matrix of float)
+0:412          max ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r031' ( temp 3X3 matrix of float)
+0:412          min ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r032' ( temp 3X3 matrix of float)
+0:412          pow ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r033' ( temp 3X3 matrix of float)
+0:412          radians ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r034' ( temp 3X3 matrix of float)
+0:412          roundEven ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r035' ( temp 3X3 matrix of float)
+0:412          inverse sqrt ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r036' ( temp 3X3 matrix of float)
+0:412          clamp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412            Constant:
+0:412              1.000000
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r037' ( temp 3X3 matrix of float)
+0:412          Sign ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r038' ( temp 3X3 matrix of float)
+0:412          sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'inF1' ( in 3X3 matrix of float)
+0:412          sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'inF2' ( in 3X3 matrix of float)
+0:412          cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r039' ( temp 3X3 matrix of float)
+0:412          hyp. sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r049' ( temp 3X3 matrix of float)
+0:412          smoothstep ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r041' ( temp 3X3 matrix of float)
+0:412          sqrt ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r042' ( temp 3X3 matrix of float)
+0:412          step ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r043' ( temp 3X3 matrix of float)
+0:412          tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r044' ( temp 3X3 matrix of float)
+0:412          hyp. tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      transpose ( temp 3X3 matrix of float)
+0:412        'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r046' ( temp 3X3 matrix of float)
+0:412          trunc ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:415      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2162,297 +2168,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:418  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:418    Function Parameters: 
-0:418      'inF0' ( in 4X4 matrix of float)
-0:418      'inF1' ( in 4X4 matrix of float)
-0:418      'inF2' ( in 4X4 matrix of float)
+0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:419    Function Parameters: 
+0:419      'inF0' ( in 4X4 matrix of float)
+0:419      'inF1' ( in 4X4 matrix of float)
+0:419      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:420      Sequence
-0:420        move second child to first child ( temp bool)
-0:420          'r000' ( temp bool)
-0:420          all ( temp bool)
-0:420            Convert float to bool ( temp 4X4 matrix of bool)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r001' ( temp 4X4 matrix of float)
-0:420          Absolute value ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      arc cosine ( temp 4X4 matrix of float)
-0:420        'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp bool)
-0:420          'r003' ( temp bool)
-0:420          any ( temp bool)
-0:420            Convert float to bool ( temp 4X4 matrix of bool)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r004' ( temp 4X4 matrix of float)
-0:420          arc sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r005' ( temp 4X4 matrix of float)
-0:420          arc tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r006' ( temp 4X4 matrix of float)
-0:420          arc tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r007' ( temp 4X4 matrix of float)
-0:420          Ceiling ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Test condition and select ( temp void)
-0:420        Condition
-0:420        any ( temp bool)
-0:420          Compare Less Than ( temp 4X4 matrix of bool)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420        true case
-0:420        Branch: Kill
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r008' ( temp 4X4 matrix of float)
-0:420          clamp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r009' ( temp 4X4 matrix of float)
-0:420          cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r010' ( temp 4X4 matrix of float)
-0:420          hyp. cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r011' ( temp 4X4 matrix of float)
-0:420          dPdx ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r012' ( temp 4X4 matrix of float)
-0:420          dPdxCoarse ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r013' ( temp 4X4 matrix of float)
-0:420          dPdxFine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r014' ( temp 4X4 matrix of float)
-0:420          dPdy ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r015' ( temp 4X4 matrix of float)
-0:420          dPdyCoarse ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r016' ( temp 4X4 matrix of float)
-0:420          dPdyFine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r017' ( temp 4X4 matrix of float)
-0:420          degrees ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp float)
-0:420          'r018' ( temp float)
-0:420          determinant ( temp float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r019' ( temp 4X4 matrix of float)
-0:420          exp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'R020' ( temp 4X4 matrix of float)
-0:420          exp2 ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r021' ( temp 4X4 matrix of float)
-0:420          Floor ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r022' ( temp 4X4 matrix of float)
-0:420          mod ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r023' ( temp 4X4 matrix of float)
-0:420          Fraction ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r025' ( temp 4X4 matrix of float)
-0:420          fwidth ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r026' ( temp 4X4 matrix of float)
-0:420          ldexp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r026a' ( temp 4X4 matrix of float)
-0:420          mix ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r027' ( temp 4X4 matrix of float)
-0:420          log ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r028' ( temp 4X4 matrix of float)
-0:420          matrix-scale ( temp 4X4 matrix of float)
-0:420            log2 ( temp 4X4 matrix of float)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.301030
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r029' ( temp 4X4 matrix of float)
-0:420          log2 ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r030' ( temp 4X4 matrix of float)
-0:420          max ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r031' ( temp 4X4 matrix of float)
-0:420          min ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r032' ( temp 4X4 matrix of float)
-0:420          pow ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r033' ( temp 4X4 matrix of float)
-0:420          radians ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r034' ( temp 4X4 matrix of float)
-0:420          roundEven ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r035' ( temp 4X4 matrix of float)
-0:420          inverse sqrt ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r036' ( temp 4X4 matrix of float)
-0:420          clamp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420            Constant:
-0:420              1.000000
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r037' ( temp 4X4 matrix of float)
-0:420          Sign ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r038' ( temp 4X4 matrix of float)
-0:420          sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'inF1' ( in 4X4 matrix of float)
-0:420          sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'inF2' ( in 4X4 matrix of float)
-0:420          cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r039' ( temp 4X4 matrix of float)
-0:420          hyp. sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r049' ( temp 4X4 matrix of float)
-0:420          smoothstep ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r041' ( temp 4X4 matrix of float)
-0:420          sqrt ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r042' ( temp 4X4 matrix of float)
-0:420          step ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r043' ( temp 4X4 matrix of float)
-0:420          tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r044' ( temp 4X4 matrix of float)
-0:420          hyp. tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      transpose ( temp 4X4 matrix of float)
-0:420        'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r046' ( temp 4X4 matrix of float)
-0:420          trunc ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:423      Branch: Return with expression
+0:421      Sequence
+0:421        move second child to first child ( temp bool)
+0:421          'r000' ( temp bool)
+0:421          all ( temp bool)
+0:421            Convert float to bool ( temp 4X4 matrix of bool)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r001' ( temp 4X4 matrix of float)
+0:421          Absolute value ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      arc cosine ( temp 4X4 matrix of float)
+0:421        'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp bool)
+0:421          'r003' ( temp bool)
+0:421          any ( temp bool)
+0:421            Convert float to bool ( temp 4X4 matrix of bool)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r004' ( temp 4X4 matrix of float)
+0:421          arc sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r005' ( temp 4X4 matrix of float)
+0:421          arc tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r006' ( temp 4X4 matrix of float)
+0:421          arc tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r007' ( temp 4X4 matrix of float)
+0:421          Ceiling ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Test condition and select ( temp void)
+0:421        Condition
+0:421        any ( temp bool)
+0:421          Compare Less Than ( temp 4X4 matrix of bool)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421        true case
+0:421        Branch: Kill
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r008' ( temp 4X4 matrix of float)
+0:421          clamp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r009' ( temp 4X4 matrix of float)
+0:421          cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r010' ( temp 4X4 matrix of float)
+0:421          hyp. cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r011' ( temp 4X4 matrix of float)
+0:421          dPdx ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r012' ( temp 4X4 matrix of float)
+0:421          dPdxCoarse ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r013' ( temp 4X4 matrix of float)
+0:421          dPdxFine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r014' ( temp 4X4 matrix of float)
+0:421          dPdy ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r015' ( temp 4X4 matrix of float)
+0:421          dPdyCoarse ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r016' ( temp 4X4 matrix of float)
+0:421          dPdyFine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r017' ( temp 4X4 matrix of float)
+0:421          degrees ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp float)
+0:421          'r018' ( temp float)
+0:421          determinant ( temp float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r019' ( temp 4X4 matrix of float)
+0:421          exp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'R020' ( temp 4X4 matrix of float)
+0:421          exp2 ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r021' ( temp 4X4 matrix of float)
+0:421          Floor ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r022' ( temp 4X4 matrix of float)
+0:421          mod ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r023' ( temp 4X4 matrix of float)
+0:421          Fraction ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r025' ( temp 4X4 matrix of float)
+0:421          fwidth ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r026' ( temp 4X4 matrix of float)
+0:421          ldexp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r026a' ( temp 4X4 matrix of float)
+0:421          mix ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r027' ( temp 4X4 matrix of float)
+0:421          log ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r028' ( temp 4X4 matrix of float)
+0:421          matrix-scale ( temp 4X4 matrix of float)
+0:421            log2 ( temp 4X4 matrix of float)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.301030
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r029' ( temp 4X4 matrix of float)
+0:421          log2 ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r030' ( temp 4X4 matrix of float)
+0:421          max ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r031' ( temp 4X4 matrix of float)
+0:421          min ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r032' ( temp 4X4 matrix of float)
+0:421          pow ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r033' ( temp 4X4 matrix of float)
+0:421          radians ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r034' ( temp 4X4 matrix of float)
+0:421          roundEven ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r035' ( temp 4X4 matrix of float)
+0:421          inverse sqrt ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r036' ( temp 4X4 matrix of float)
+0:421          clamp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421            Constant:
+0:421              1.000000
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r037' ( temp 4X4 matrix of float)
+0:421          Sign ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r038' ( temp 4X4 matrix of float)
+0:421          sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'inF1' ( in 4X4 matrix of float)
+0:421          sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'inF2' ( in 4X4 matrix of float)
+0:421          cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r039' ( temp 4X4 matrix of float)
+0:421          hyp. sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r049' ( temp 4X4 matrix of float)
+0:421          smoothstep ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r041' ( temp 4X4 matrix of float)
+0:421          sqrt ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r042' ( temp 4X4 matrix of float)
+0:421          step ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r043' ( temp 4X4 matrix of float)
+0:421          tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r044' ( temp 4X4 matrix of float)
+0:421          hyp. tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      transpose ( temp 4X4 matrix of float)
+0:421        'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r046' ( temp 4X4 matrix of float)
+0:421          trunc ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:424      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2470,334 +2476,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:441  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:441    Function Parameters: 
-0:441      'inF0' ( in float)
-0:441      'inF1' ( in float)
-0:441      'inFV0' ( in 2-component vector of float)
-0:441      'inFV1' ( in 2-component vector of float)
-0:441      'inFM0' ( in 2X2 matrix of float)
-0:441      'inFM1' ( in 2X2 matrix of float)
+0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:442    Function Parameters: 
+0:442      'inF0' ( in float)
+0:442      'inF1' ( in float)
+0:442      'inFV0' ( in 2-component vector of float)
+0:442      'inFV1' ( in 2-component vector of float)
+0:442      'inFM0' ( in 2X2 matrix of float)
+0:442      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:442      Sequence
-0:442        move second child to first child ( temp float)
-0:442          'r0' ( temp float)
-0:442          component-wise multiply ( temp float)
-0:442            'inF1' ( in float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r1' ( temp 2-component vector of float)
-0:442          vector-scale ( temp 2-component vector of float)
-0:442            'inF0' ( in float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r2' ( temp 2-component vector of float)
-0:442          vector-scale ( temp 2-component vector of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp float)
-0:442          'r3' ( temp float)
-0:442          dot-product ( temp float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inFV1' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r4' ( temp 2-component vector of float)
-0:442          vector-times-matrix ( temp 2-component vector of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r5' ( temp 2-component vector of float)
-0:442          matrix-times-vector ( temp 2-component vector of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r6' ( temp 2X2 matrix of float)
-0:442          matrix-scale ( temp 2X2 matrix of float)
-0:442            'inF0' ( in float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r7' ( temp 2X2 matrix of float)
-0:442          matrix-scale ( temp 2X2 matrix of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r8' ( temp 2X2 matrix of float)
-0:442          matrix-multiply ( temp 2X2 matrix of float)
-0:442            'inFM1' ( in 2X2 matrix of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:448  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:448    Function Parameters: 
-0:448      'inF0' ( in float)
-0:448      'inF1' ( in float)
-0:448      'inFV0' ( in 3-component vector of float)
-0:448      'inFV1' ( in 3-component vector of float)
-0:448      'inFM0' ( in 3X3 matrix of float)
-0:448      'inFM1' ( in 3X3 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp float)
+0:443          'r0' ( temp float)
+0:443          component-wise multiply ( temp float)
+0:443            'inF1' ( in float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r1' ( temp 2-component vector of float)
+0:443          vector-scale ( temp 2-component vector of float)
+0:443            'inF0' ( in float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r2' ( temp 2-component vector of float)
+0:443          vector-scale ( temp 2-component vector of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp float)
+0:443          'r3' ( temp float)
+0:443          dot-product ( temp float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inFV1' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r4' ( temp 2-component vector of float)
+0:443          vector-times-matrix ( temp 2-component vector of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r5' ( temp 2-component vector of float)
+0:443          matrix-times-vector ( temp 2-component vector of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r6' ( temp 2X2 matrix of float)
+0:443          matrix-scale ( temp 2X2 matrix of float)
+0:443            'inF0' ( in float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r7' ( temp 2X2 matrix of float)
+0:443          matrix-scale ( temp 2X2 matrix of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r8' ( temp 2X2 matrix of float)
+0:443          matrix-multiply ( temp 2X2 matrix of float)
+0:443            'inFM1' ( in 2X2 matrix of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:449    Function Parameters: 
+0:449      'inF0' ( in float)
+0:449      'inF1' ( in float)
+0:449      'inFV0' ( in 3-component vector of float)
+0:449      'inFV1' ( in 3-component vector of float)
+0:449      'inFM0' ( in 3X3 matrix of float)
+0:449      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:449      Sequence
-0:449        move second child to first child ( temp float)
-0:449          'r0' ( temp float)
-0:449          component-wise multiply ( temp float)
-0:449            'inF1' ( in float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r1' ( temp 3-component vector of float)
-0:449          vector-scale ( temp 3-component vector of float)
-0:449            'inF0' ( in float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r2' ( temp 3-component vector of float)
-0:449          vector-scale ( temp 3-component vector of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp float)
-0:449          'r3' ( temp float)
-0:449          dot-product ( temp float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inFV1' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r4' ( temp 3-component vector of float)
-0:449          vector-times-matrix ( temp 3-component vector of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r5' ( temp 3-component vector of float)
-0:449          matrix-times-vector ( temp 3-component vector of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r6' ( temp 3X3 matrix of float)
-0:449          matrix-scale ( temp 3X3 matrix of float)
-0:449            'inF0' ( in float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r7' ( temp 3X3 matrix of float)
-0:449          matrix-scale ( temp 3X3 matrix of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r8' ( temp 3X3 matrix of float)
-0:449          matrix-multiply ( temp 3X3 matrix of float)
-0:449            'inFM1' ( in 3X3 matrix of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:455  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:455    Function Parameters: 
-0:455      'inF0' ( in float)
-0:455      'inF1' ( in float)
-0:455      'inFV0' ( in 4-component vector of float)
-0:455      'inFV1' ( in 4-component vector of float)
-0:455      'inFM0' ( in 4X4 matrix of float)
-0:455      'inFM1' ( in 4X4 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp float)
+0:450          'r0' ( temp float)
+0:450          component-wise multiply ( temp float)
+0:450            'inF1' ( in float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r1' ( temp 3-component vector of float)
+0:450          vector-scale ( temp 3-component vector of float)
+0:450            'inF0' ( in float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r2' ( temp 3-component vector of float)
+0:450          vector-scale ( temp 3-component vector of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp float)
+0:450          'r3' ( temp float)
+0:450          dot-product ( temp float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inFV1' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r4' ( temp 3-component vector of float)
+0:450          vector-times-matrix ( temp 3-component vector of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r5' ( temp 3-component vector of float)
+0:450          matrix-times-vector ( temp 3-component vector of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r6' ( temp 3X3 matrix of float)
+0:450          matrix-scale ( temp 3X3 matrix of float)
+0:450            'inF0' ( in float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r7' ( temp 3X3 matrix of float)
+0:450          matrix-scale ( temp 3X3 matrix of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r8' ( temp 3X3 matrix of float)
+0:450          matrix-multiply ( temp 3X3 matrix of float)
+0:450            'inFM1' ( in 3X3 matrix of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:456    Function Parameters: 
+0:456      'inF0' ( in float)
+0:456      'inF1' ( in float)
+0:456      'inFV0' ( in 4-component vector of float)
+0:456      'inFV1' ( in 4-component vector of float)
+0:456      'inFM0' ( in 4X4 matrix of float)
+0:456      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:456      Sequence
-0:456        move second child to first child ( temp float)
-0:456          'r0' ( temp float)
-0:456          component-wise multiply ( temp float)
-0:456            'inF1' ( in float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r1' ( temp 4-component vector of float)
-0:456          vector-scale ( temp 4-component vector of float)
-0:456            'inF0' ( in float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r2' ( temp 4-component vector of float)
-0:456          vector-scale ( temp 4-component vector of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp float)
-0:456          'r3' ( temp float)
-0:456          dot-product ( temp float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inFV1' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r4' ( temp 4-component vector of float)
-0:456          vector-times-matrix ( temp 4-component vector of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r5' ( temp 4-component vector of float)
-0:456          matrix-times-vector ( temp 4-component vector of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r6' ( temp 4X4 matrix of float)
-0:456          matrix-scale ( temp 4X4 matrix of float)
-0:456            'inF0' ( in float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r7' ( temp 4X4 matrix of float)
-0:456          matrix-scale ( temp 4X4 matrix of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r8' ( temp 4X4 matrix of float)
-0:456          matrix-multiply ( temp 4X4 matrix of float)
-0:456            'inFM1' ( in 4X4 matrix of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:465  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:465    Function Parameters: 
-0:465      'inF0' ( in float)
-0:465      'inF1' ( in float)
-0:465      'inFV2' ( in 2-component vector of float)
-0:465      'inFV3' ( in 3-component vector of float)
-0:465      'inFM2x3' ( in 2X3 matrix of float)
-0:465      'inFM3x2' ( in 3X2 matrix of float)
-0:465      'inFM3x3' ( in 3X3 matrix of float)
-0:465      'inFM3x4' ( in 3X4 matrix of float)
-0:465      'inFM2x4' ( in 2X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp float)
+0:457          'r0' ( temp float)
+0:457          component-wise multiply ( temp float)
+0:457            'inF1' ( in float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r1' ( temp 4-component vector of float)
+0:457          vector-scale ( temp 4-component vector of float)
+0:457            'inF0' ( in float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r2' ( temp 4-component vector of float)
+0:457          vector-scale ( temp 4-component vector of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp float)
+0:457          'r3' ( temp float)
+0:457          dot-product ( temp float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inFV1' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r4' ( temp 4-component vector of float)
+0:457          vector-times-matrix ( temp 4-component vector of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r5' ( temp 4-component vector of float)
+0:457          matrix-times-vector ( temp 4-component vector of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r6' ( temp 4X4 matrix of float)
+0:457          matrix-scale ( temp 4X4 matrix of float)
+0:457            'inF0' ( in float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r7' ( temp 4X4 matrix of float)
+0:457          matrix-scale ( temp 4X4 matrix of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r8' ( temp 4X4 matrix of float)
+0:457          matrix-multiply ( temp 4X4 matrix of float)
+0:457            'inFM1' ( in 4X4 matrix of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:466    Function Parameters: 
+0:466      'inF0' ( in float)
+0:466      'inF1' ( in float)
+0:466      'inFV2' ( in 2-component vector of float)
+0:466      'inFV3' ( in 3-component vector of float)
+0:466      'inFM2x3' ( in 2X3 matrix of float)
+0:466      'inFM3x2' ( in 3X2 matrix of float)
+0:466      'inFM3x3' ( in 3X3 matrix of float)
+0:466      'inFM3x4' ( in 3X4 matrix of float)
+0:466      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:466      Sequence
-0:466        move second child to first child ( temp float)
-0:466          'r00' ( temp float)
-0:466          component-wise multiply ( temp float)
-0:466            'inF1' ( in float)
-0:466            'inF0' ( in float)
 0:467      Sequence
-0:467        move second child to first child ( temp 2-component vector of float)
-0:467          'r01' ( temp 2-component vector of float)
-0:467          vector-scale ( temp 2-component vector of float)
+0:467        move second child to first child ( temp float)
+0:467          'r00' ( temp float)
+0:467          component-wise multiply ( temp float)
+0:467            'inF1' ( in float)
 0:467            'inF0' ( in float)
-0:467            'inFV2' ( in 2-component vector of float)
 0:468      Sequence
-0:468        move second child to first child ( temp 3-component vector of float)
-0:468          'r02' ( temp 3-component vector of float)
-0:468          vector-scale ( temp 3-component vector of float)
+0:468        move second child to first child ( temp 2-component vector of float)
+0:468          'r01' ( temp 2-component vector of float)
+0:468          vector-scale ( temp 2-component vector of float)
 0:468            'inF0' ( in float)
-0:468            'inFV3' ( in 3-component vector of float)
+0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 2-component vector of float)
-0:469          'r03' ( temp 2-component vector of float)
-0:469          vector-scale ( temp 2-component vector of float)
-0:469            'inFV2' ( in 2-component vector of float)
+0:469        move second child to first child ( temp 3-component vector of float)
+0:469          'r02' ( temp 3-component vector of float)
+0:469          vector-scale ( temp 3-component vector of float)
 0:469            'inF0' ( in float)
+0:469            'inFV3' ( in 3-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 3-component vector of float)
-0:470          'r04' ( temp 3-component vector of float)
-0:470          vector-scale ( temp 3-component vector of float)
-0:470            'inFV3' ( in 3-component vector of float)
+0:470        move second child to first child ( temp 2-component vector of float)
+0:470          'r03' ( temp 2-component vector of float)
+0:470          vector-scale ( temp 2-component vector of float)
+0:470            'inFV2' ( in 2-component vector of float)
 0:470            'inF0' ( in float)
 0:471      Sequence
-0:471        move second child to first child ( temp float)
-0:471          'r05' ( temp float)
-0:471          dot-product ( temp float)
-0:471            'inFV2' ( in 2-component vector of float)
-0:471            'inFV2' ( in 2-component vector of float)
+0:471        move second child to first child ( temp 3-component vector of float)
+0:471          'r04' ( temp 3-component vector of float)
+0:471          vector-scale ( temp 3-component vector of float)
+0:471            'inFV3' ( in 3-component vector of float)
+0:471            'inF0' ( in float)
 0:472      Sequence
 0:472        move second child to first child ( temp float)
-0:472          'r06' ( temp float)
+0:472          'r05' ( temp float)
 0:472          dot-product ( temp float)
-0:472            'inFV3' ( in 3-component vector of float)
-0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inFV2' ( in 2-component vector of float)
+0:472            'inFV2' ( in 2-component vector of float)
 0:473      Sequence
-0:473        move second child to first child ( temp 3-component vector of float)
-0:473          'r07' ( temp 3-component vector of float)
-0:473          matrix-times-vector ( temp 3-component vector of float)
-0:473            'inFM2x3' ( in 2X3 matrix of float)
-0:473            'inFV2' ( in 2-component vector of float)
+0:473        move second child to first child ( temp float)
+0:473          'r06' ( temp float)
+0:473          dot-product ( temp float)
+0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV3' ( in 3-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 2-component vector of float)
-0:474          'r08' ( temp 2-component vector of float)
-0:474          matrix-times-vector ( temp 2-component vector of float)
-0:474            'inFM3x2' ( in 3X2 matrix of float)
-0:474            'inFV3' ( in 3-component vector of float)
+0:474        move second child to first child ( temp 3-component vector of float)
+0:474          'r07' ( temp 3-component vector of float)
+0:474          matrix-times-vector ( temp 3-component vector of float)
+0:474            'inFM2x3' ( in 2X3 matrix of float)
+0:474            'inFV2' ( in 2-component vector of float)
 0:475      Sequence
 0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r09' ( temp 2-component vector of float)
-0:475          vector-times-matrix ( temp 2-component vector of float)
+0:475          'r08' ( temp 2-component vector of float)
+0:475          matrix-times-vector ( temp 2-component vector of float)
+0:475            'inFM3x2' ( in 3X2 matrix of float)
 0:475            'inFV3' ( in 3-component vector of float)
-0:475            'inFM2x3' ( in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child ( temp 3-component vector of float)
-0:476          'r10' ( temp 3-component vector of float)
-0:476          vector-times-matrix ( temp 3-component vector of float)
-0:476            'inFV2' ( in 2-component vector of float)
-0:476            'inFM3x2' ( in 3X2 matrix of float)
+0:476        move second child to first child ( temp 2-component vector of float)
+0:476          'r09' ( temp 2-component vector of float)
+0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476            'inFV3' ( in 3-component vector of float)
+0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 2X3 matrix of float)
-0:477          'r11' ( temp 2X3 matrix of float)
-0:477          matrix-scale ( temp 2X3 matrix of float)
-0:477            'inF0' ( in float)
-0:477            'inFM2x3' ( in 2X3 matrix of float)
+0:477        move second child to first child ( temp 3-component vector of float)
+0:477          'r10' ( temp 3-component vector of float)
+0:477          vector-times-matrix ( temp 3-component vector of float)
+0:477            'inFV2' ( in 2-component vector of float)
+0:477            'inFM3x2' ( in 3X2 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 3X2 matrix of float)
-0:478          'r12' ( temp 3X2 matrix of float)
-0:478          matrix-scale ( temp 3X2 matrix of float)
+0:478        move second child to first child ( temp 2X3 matrix of float)
+0:478          'r11' ( temp 2X3 matrix of float)
+0:478          matrix-scale ( temp 2X3 matrix of float)
 0:478            'inF0' ( in float)
-0:478            'inFM3x2' ( in 3X2 matrix of float)
+0:478            'inFM2x3' ( in 2X3 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 2X2 matrix of float)
-0:479          'r13' ( temp 2X2 matrix of float)
-0:479          matrix-multiply ( temp 2X2 matrix of float)
+0:479        move second child to first child ( temp 3X2 matrix of float)
+0:479          'r12' ( temp 3X2 matrix of float)
+0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479            'inF0' ( in float)
 0:479            'inFM3x2' ( in 3X2 matrix of float)
-0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X3 matrix of float)
-0:480          'r14' ( temp 2X3 matrix of float)
-0:480          matrix-multiply ( temp 2X3 matrix of float)
-0:480            'inFM3x3' ( in 3X3 matrix of float)
+0:480        move second child to first child ( temp 2X2 matrix of float)
+0:480          'r13' ( temp 2X2 matrix of float)
+0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480            'inFM3x2' ( in 3X2 matrix of float)
 0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X4 matrix of float)
-0:481          'r15' ( temp 2X4 matrix of float)
-0:481          matrix-multiply ( temp 2X4 matrix of float)
-0:481            'inFM3x4' ( in 3X4 matrix of float)
+0:481        move second child to first child ( temp 2X3 matrix of float)
+0:481          'r14' ( temp 2X3 matrix of float)
+0:481          matrix-multiply ( temp 2X3 matrix of float)
+0:481            'inFM3x3' ( in 3X3 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 3X4 matrix of float)
-0:482          'r16' ( temp 3X4 matrix of float)
-0:482          matrix-multiply ( temp 3X4 matrix of float)
-0:482            'inFM2x4' ( in 2X4 matrix of float)
-0:482            'inFM3x2' ( in 3X2 matrix of float)
-0:488  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:488    Function Parameters: 
+0:482        move second child to first child ( temp 2X4 matrix of float)
+0:482          'r15' ( temp 2X4 matrix of float)
+0:482          matrix-multiply ( temp 2X4 matrix of float)
+0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482            'inFM2x3' ( in 2X3 matrix of float)
+0:483      Sequence
+0:483        move second child to first child ( temp 3X4 matrix of float)
+0:483          'r16' ( temp 3X4 matrix of float)
+0:483          matrix-multiply ( temp 3X4 matrix of float)
+0:483            'inFM2x4' ( in 2X4 matrix of float)
+0:483            'inFM3x2' ( in 3X2 matrix of float)
+0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:489    Function Parameters: 
 0:?     Sequence
-0:490      move second child to first child ( temp 4-component vector of float)
-0:490        color: direct index for structure ( temp 4-component vector of float)
-0:490          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:490          Constant:
-0:490            0 (const int)
-0:490        Constant:
-0:490          1.000000
-0:490          1.000000
-0:490          1.000000
-0:490          1.000000
-0:491      Branch: Return with expression
-0:491        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:488  Function Definition: main( ( temp void)
-0:488    Function Parameters: 
+0:491      move second child to first child ( temp 4-component vector of float)
+0:491        color: direct index for structure ( temp 4-component vector of float)
+0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:491          Constant:
+0:491            0 (const int)
+0:491        Constant:
+0:491          1.000000
+0:491          1.000000
+0:491          1.000000
+0:491          1.000000
+0:492      Branch: Return with expression
+0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:489  Function Definition: main( ( temp void)
+0:489    Function Parameters: 
 0:?     Sequence
-0:488      Sequence
-0:488        move second child to first child ( temp 4-component vector of float)
+0:489      Sequence
+0:489        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:488          color: direct index for structure ( temp 4-component vector of float)
-0:488            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:488            Constant:
-0:488              0 (const int)
+0:489          color: direct index for structure ( temp 4-component vector of float)
+0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:489            Constant:
+0:489              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -2960,1110 +2966,1104 @@
 0:44          'r023' ( temp float)
 0:44          degrees ( temp float)
 0:44            'inF0' ( in float)
-0:48      Sequence
-0:48        move second child to first child ( temp float)
-0:48          'r027' ( temp float)
-0:48          exp ( temp float)
-0:48            'inF0' ( in float)
+0:45      Sequence
+0:45        move second child to first child ( temp float)
+0:45          'r024' ( temp float)
+0:45          distance ( temp float)
+0:45            'inF0' ( in float)
+0:45            'inF1' ( in float)
 0:49      Sequence
 0:49        move second child to first child ( temp float)
-0:49          'r028' ( temp float)
-0:49          exp2 ( temp float)
+0:49          'r027' ( temp float)
+0:49          exp ( temp float)
 0:49            'inF0' ( in float)
 0:50      Sequence
-0:50        move second child to first child ( temp uint)
-0:50          'r029' ( temp uint)
-0:50          Convert int to uint ( temp uint)
-0:50            findMSB ( temp int)
-0:50              Constant:
-0:50                7 (const int)
+0:50        move second child to first child ( temp float)
+0:50          'r028' ( temp float)
+0:50          exp2 ( temp float)
+0:50            'inF0' ( in float)
 0:51      Sequence
 0:51        move second child to first child ( temp uint)
-0:51          'r030' ( temp uint)
+0:51          'r029' ( temp uint)
 0:51          Convert int to uint ( temp uint)
-0:51            findLSB ( temp int)
+0:51            findMSB ( temp int)
 0:51              Constant:
 0:51                7 (const int)
 0:52      Sequence
-0:52        move second child to first child ( temp float)
-0:52          'r031' ( temp float)
-0:52          Floor ( temp float)
-0:52            'inF0' ( in float)
-0:54      Sequence
-0:54        move second child to first child ( temp float)
-0:54          'r033' ( temp float)
-0:54          mod ( temp float)
-0:54            'inF0' ( in float)
-0:54            'inF1' ( in float)
+0:52        move second child to first child ( temp uint)
+0:52          'r030' ( temp uint)
+0:52          Convert int to uint ( temp uint)
+0:52            findLSB ( temp int)
+0:52              Constant:
+0:52                7 (const int)
+0:53      Sequence
+0:53        move second child to first child ( temp float)
+0:53          'r031' ( temp float)
+0:53          Floor ( temp float)
+0:53            'inF0' ( in float)
 0:55      Sequence
 0:55        move second child to first child ( temp float)
-0:55          'r034' ( temp float)
-0:55          Fraction ( temp float)
+0:55          'r033' ( temp float)
+0:55          mod ( temp float)
 0:55            'inF0' ( in float)
+0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r036' ( temp float)
-0:56          fwidth ( temp float)
+0:56          'r034' ( temp float)
+0:56          Fraction ( temp float)
 0:56            'inF0' ( in float)
 0:57      Sequence
-0:57        move second child to first child ( temp bool)
-0:57          'r037' ( temp bool)
-0:57          isinf ( temp bool)
+0:57        move second child to first child ( temp float)
+0:57          'r036' ( temp float)
+0:57          fwidth ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
 0:58        move second child to first child ( temp bool)
-0:58          'r038' ( temp bool)
-0:58          isnan ( temp bool)
+0:58          'r037' ( temp bool)
+0:58          isinf ( temp bool)
 0:58            'inF0' ( in float)
 0:59      Sequence
-0:59        move second child to first child ( temp float)
-0:59          'r039' ( temp float)
-0:59          ldexp ( temp float)
+0:59        move second child to first child ( temp bool)
+0:59          'r038' ( temp bool)
+0:59          isnan ( temp bool)
 0:59            'inF0' ( in float)
-0:59            'inF1' ( in float)
 0:60      Sequence
 0:60        move second child to first child ( temp float)
-0:60          'r039a' ( temp float)
-0:60          mix ( temp float)
+0:60          'r039' ( temp float)
+0:60          ldexp ( temp float)
 0:60            'inF0' ( in float)
 0:60            'inF1' ( in float)
-0:60            'inF2' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r040' ( temp float)
-0:61          log ( temp float)
+0:61          'r039a' ( temp float)
+0:61          mix ( temp float)
 0:61            'inF0' ( in float)
+0:61            'inF1' ( in float)
+0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r041' ( temp float)
-0:62          component-wise multiply ( temp float)
-0:62            log2 ( temp float)
-0:62              'inF0' ( in float)
-0:62            Constant:
-0:62              0.301030
+0:62          'r040' ( temp float)
+0:62          log ( temp float)
+0:62            'inF0' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r042' ( temp float)
-0:63          log2 ( temp float)
-0:63            'inF0' ( in float)
+0:63          'r041' ( temp float)
+0:63          component-wise multiply ( temp float)
+0:63            log2 ( temp float)
+0:63              'inF0' ( in float)
+0:63            Constant:
+0:63              0.301030
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r043' ( temp float)
-0:64          max ( temp float)
+0:64          'r042' ( temp float)
+0:64          log2 ( temp float)
 0:64            'inF0' ( in float)
-0:64            'inF1' ( in float)
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r044' ( temp float)
-0:65          min ( temp float)
+0:65          'r043' ( temp float)
+0:65          max ( temp float)
 0:65            'inF0' ( in float)
 0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r045' ( temp float)
-0:66          pow ( temp float)
+0:66          'r044' ( temp float)
+0:66          min ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r046' ( temp float)
-0:67          radians ( temp float)
+0:67          'r045' ( temp float)
+0:67          pow ( temp float)
 0:67            'inF0' ( in float)
+0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r047' ( temp float)
-0:68          divide ( temp float)
-0:68            Constant:
-0:68              1.000000
+0:68          'r046' ( temp float)
+0:68          radians ( temp float)
 0:68            'inF0' ( in float)
 0:69      Sequence
-0:69        move second child to first child ( temp uint)
-0:69          'r048' ( temp uint)
-0:69          Convert int to uint ( temp uint)
-0:69            bitFieldReverse ( temp int)
-0:69              Constant:
-0:69                2 (const int)
+0:69        move second child to first child ( temp float)
+0:69          'r047' ( temp float)
+0:69          divide ( temp float)
+0:69            Constant:
+0:69              1.000000
+0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp float)
-0:70          'r049' ( temp float)
-0:70          roundEven ( temp float)
-0:70            'inF0' ( in float)
+0:70        move second child to first child ( temp uint)
+0:70          'r048' ( temp uint)
+0:70          Convert int to uint ( temp uint)
+0:70            bitFieldReverse ( temp int)
+0:70              Constant:
+0:70                2 (const int)
 0:71      Sequence
 0:71        move second child to first child ( temp float)
-0:71          'r050' ( temp float)
-0:71          inverse sqrt ( temp float)
+0:71          'r049' ( temp float)
+0:71          roundEven ( temp float)
 0:71            'inF0' ( in float)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r051' ( temp float)
-0:72          clamp ( temp float)
+0:72          'r050' ( temp float)
+0:72          inverse sqrt ( temp float)
 0:72            'inF0' ( in float)
-0:72            Constant:
-0:72              0.000000
-0:72            Constant:
-0:72              1.000000
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r052' ( temp float)
-0:73          Sign ( temp float)
+0:73          'r051' ( temp float)
+0:73          clamp ( temp float)
 0:73            'inF0' ( in float)
+0:73            Constant:
+0:73              0.000000
+0:73            Constant:
+0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r053' ( temp float)
-0:74          sine ( temp float)
+0:74          'r052' ( temp float)
+0:74          Sign ( temp float)
 0:74            'inF0' ( in float)
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'inF1' ( in float)
+0:75          'r053' ( temp float)
 0:75          sine ( temp float)
 0:75            'inF0' ( in float)
-0:75        move second child to first child ( temp float)
-0:75          'inF2' ( in float)
-0:75          cosine ( temp float)
-0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'r055' ( temp float)
-0:76          hyp. sine ( temp float)
+0:76          'inF1' ( in float)
+0:76          sine ( temp float)
+0:76            'inF0' ( in float)
+0:76        move second child to first child ( temp float)
+0:76          'inF2' ( in float)
+0:76          cosine ( temp float)
 0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r056' ( temp float)
-0:77          smoothstep ( temp float)
+0:77          'r055' ( temp float)
+0:77          hyp. sine ( temp float)
 0:77            'inF0' ( in float)
-0:77            'inF1' ( in float)
-0:77            'inF2' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r057' ( temp float)
-0:78          sqrt ( temp float)
+0:78          'r056' ( temp float)
+0:78          smoothstep ( temp float)
 0:78            'inF0' ( in float)
+0:78            'inF1' ( in float)
+0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r058' ( temp float)
-0:79          step ( temp float)
+0:79          'r057' ( temp float)
+0:79          sqrt ( temp float)
 0:79            'inF0' ( in float)
-0:79            'inF1' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r059' ( temp float)
-0:80          tangent ( temp float)
+0:80          'r058' ( temp float)
+0:80          step ( temp float)
 0:80            'inF0' ( in float)
+0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r060' ( temp float)
-0:81          hyp. tangent ( temp float)
+0:81          'r059' ( temp float)
+0:81          tangent ( temp float)
 0:81            'inF0' ( in float)
-0:83      Sequence
-0:83        move second child to first child ( temp float)
-0:83          'r061' ( temp float)
-0:83          trunc ( temp float)
-0:83            'inF0' ( in float)
-0:85      Branch: Return with expression
-0:85        Constant:
-0:85          0.000000
-0:89  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:89    Function Parameters: 
-0:89      'inF0' ( in 1-component vector of float)
-0:89      'inF1' ( in 1-component vector of float)
-0:89      'inF2' ( in 1-component vector of float)
+0:82      Sequence
+0:82        move second child to first child ( temp float)
+0:82          'r060' ( temp float)
+0:82          hyp. tangent ( temp float)
+0:82            'inF0' ( in float)
+0:84      Sequence
+0:84        move second child to first child ( temp float)
+0:84          'r061' ( temp float)
+0:84          trunc ( temp float)
+0:84            'inF0' ( in float)
+0:86      Branch: Return with expression
+0:86        Constant:
+0:86          0.000000
+0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:90    Function Parameters: 
+0:90      'inF0' ( in 1-component vector of float)
+0:90      'inF1' ( in 1-component vector of float)
+0:90      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:91      Branch: Return with expression
-0:91        Constant:
-0:91          0.000000
-0:95  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:95    Function Parameters: 
-0:95      'inF0' ( in 2-component vector of float)
-0:95      'inF1' ( in 2-component vector of float)
-0:95      'inF2' ( in 2-component vector of float)
-0:95      'inU0' ( in 2-component vector of uint)
-0:95      'inU1' ( in 2-component vector of uint)
+0:92      Branch: Return with expression
+0:92        Constant:
+0:92          0.000000
+0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:96    Function Parameters: 
+0:96      'inF0' ( in 2-component vector of float)
+0:96      'inF1' ( in 2-component vector of float)
+0:96      'inF2' ( in 2-component vector of float)
+0:96      'inU0' ( in 2-component vector of uint)
+0:96      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:98      Sequence
-0:98        move second child to first child ( temp bool)
-0:98          'r000' ( temp bool)
-0:98          all ( temp bool)
-0:98            Convert float to bool ( temp 2-component vector of bool)
-0:98              'inF0' ( in 2-component vector of float)
 0:99      Sequence
-0:99        move second child to first child ( temp 2-component vector of float)
-0:99          'r001' ( temp 2-component vector of float)
-0:99          Absolute value ( temp 2-component vector of float)
-0:99            'inF0' ( in 2-component vector of float)
+0:99        move second child to first child ( temp bool)
+0:99          'r000' ( temp bool)
+0:99          all ( temp bool)
+0:99            Convert float to bool ( temp 2-component vector of bool)
+0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
 0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r002' ( temp 2-component vector of float)
-0:100          arc cosine ( temp 2-component vector of float)
+0:100          'r001' ( temp 2-component vector of float)
+0:100          Absolute value ( temp 2-component vector of float)
 0:100            'inF0' ( in 2-component vector of float)
 0:101      Sequence
-0:101        move second child to first child ( temp bool)
-0:101          'r003' ( temp bool)
-0:101          any ( temp bool)
-0:101            Convert float to bool ( temp 2-component vector of bool)
-0:101              'inF0' ( in 2-component vector of float)
+0:101        move second child to first child ( temp 2-component vector of float)
+0:101          'r002' ( temp 2-component vector of float)
+0:101          arc cosine ( temp 2-component vector of float)
+0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp 2-component vector of float)
-0:102          'r004' ( temp 2-component vector of float)
-0:102          arc sine ( temp 2-component vector of float)
-0:102            'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp bool)
+0:102          'r003' ( temp bool)
+0:102          any ( temp bool)
+0:102            Convert float to bool ( temp 2-component vector of bool)
+0:102              'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of int)
-0:103          'r005' ( temp 2-component vector of int)
-0:103          floatBitsToInt ( temp 2-component vector of int)
+0:103        move second child to first child ( temp 2-component vector of float)
+0:103          'r004' ( temp 2-component vector of float)
+0:103          arc sine ( temp 2-component vector of float)
 0:103            'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of uint)
-0:104          'r006' ( temp 2-component vector of uint)
-0:104          floatBitsToUint ( temp 2-component vector of uint)
+0:104        move second child to first child ( temp 2-component vector of int)
+0:104          'r005' ( temp 2-component vector of int)
+0:104          floatBitsToInt ( temp 2-component vector of int)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of float)
-0:105          'r007' ( temp 2-component vector of float)
-0:105          intBitsToFloat ( temp 2-component vector of float)
-0:105            'inU0' ( in 2-component vector of uint)
-0:107      Sequence
-0:107        move second child to first child ( temp 2-component vector of float)
-0:107          'r009' ( temp 2-component vector of float)
-0:107          arc tangent ( temp 2-component vector of float)
-0:107            'inF0' ( in 2-component vector of float)
+0:105        move second child to first child ( temp 2-component vector of uint)
+0:105          'r006' ( temp 2-component vector of uint)
+0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105            'inF0' ( in 2-component vector of float)
+0:106      Sequence
+0:106        move second child to first child ( temp 2-component vector of float)
+0:106          'r007' ( temp 2-component vector of float)
+0:106          intBitsToFloat ( temp 2-component vector of float)
+0:106            'inU0' ( in 2-component vector of uint)
 0:108      Sequence
 0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r010' ( temp 2-component vector of float)
+0:108          'r009' ( temp 2-component vector of float)
 0:108          arc tangent ( temp 2-component vector of float)
 0:108            'inF0' ( in 2-component vector of float)
-0:108            'inF1' ( in 2-component vector of float)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r011' ( temp 2-component vector of float)
-0:109          Ceiling ( temp 2-component vector of float)
+0:109          'r010' ( temp 2-component vector of float)
+0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
+0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r012' ( temp 2-component vector of float)
-0:110          clamp ( temp 2-component vector of float)
+0:110          'r011' ( temp 2-component vector of float)
+0:110          Ceiling ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
-0:110            'inF1' ( in 2-component vector of float)
-0:110            'inF2' ( in 2-component vector of float)
-0:111      Test condition and select ( temp void)
-0:111        Condition
-0:111        any ( temp bool)
-0:111          Compare Less Than ( temp 2-component vector of bool)
+0:111      Sequence
+0:111        move second child to first child ( temp 2-component vector of float)
+0:111          'r012' ( temp 2-component vector of float)
+0:111          clamp ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            Constant:
-0:111              0.000000
-0:111              0.000000
-0:111        true case
-0:111        Branch: Kill
+0:111            'inF1' ( in 2-component vector of float)
+0:111            'inF2' ( in 2-component vector of float)
 0:112      Test condition and select ( temp void)
 0:112        Condition
 0:112        any ( temp bool)
 0:112          Compare Less Than ( temp 2-component vector of bool)
-0:112            'inU0' ( in 2-component vector of uint)
+0:112            'inF0' ( in 2-component vector of float)
 0:112            Constant:
 0:112              0.000000
 0:112              0.000000
 0:112        true case
 0:112        Branch: Kill
-0:113      Sequence
-0:113        move second child to first child ( temp 2-component vector of float)
-0:113          'r013' ( temp 2-component vector of float)
-0:113          cosine ( temp 2-component vector of float)
-0:113            'inF0' ( in 2-component vector of float)
+0:113      Test condition and select ( temp void)
+0:113        Condition
+0:113        any ( temp bool)
+0:113          Compare Less Than ( temp 2-component vector of bool)
+0:113            'inU0' ( in 2-component vector of uint)
+0:113            Constant:
+0:113              0.000000
+0:113              0.000000
+0:113        true case
+0:113        Branch: Kill
 0:114      Sequence
 0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r015' ( temp 2-component vector of float)
-0:114          hyp. cosine ( temp 2-component vector of float)
+0:114          'r013' ( temp 2-component vector of float)
+0:114          cosine ( temp 2-component vector of float)
 0:114            'inF0' ( in 2-component vector of float)
 0:115      Sequence
-0:115        move second child to first child ( temp 2-component vector of int)
-0:115          'r016' ( temp 2-component vector of int)
+0:115        move second child to first child ( temp 2-component vector of float)
+0:115          'r015' ( temp 2-component vector of float)
+0:115          hyp. cosine ( temp 2-component vector of float)
+0:115            'inF0' ( in 2-component vector of float)
+0:116      Sequence
+0:116        move second child to first child ( temp 2-component vector of int)
+0:116          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of float)
-0:116          'r017' ( temp 2-component vector of float)
-0:116          dPdx ( temp 2-component vector of float)
-0:116            'inF0' ( in 2-component vector of float)
 0:117      Sequence
 0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r018' ( temp 2-component vector of float)
-0:117          dPdxCoarse ( temp 2-component vector of float)
+0:117          'r017' ( temp 2-component vector of float)
+0:117          dPdx ( temp 2-component vector of float)
 0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r019' ( temp 2-component vector of float)
-0:118          dPdxFine ( temp 2-component vector of float)
+0:118          'r018' ( temp 2-component vector of float)
+0:118          dPdxCoarse ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r020' ( temp 2-component vector of float)
-0:119          dPdy ( temp 2-component vector of float)
+0:119          'r019' ( temp 2-component vector of float)
+0:119          dPdxFine ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r021' ( temp 2-component vector of float)
-0:120          dPdyCoarse ( temp 2-component vector of float)
+0:120          'r020' ( temp 2-component vector of float)
+0:120          dPdy ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r022' ( temp 2-component vector of float)
-0:121          dPdyFine ( temp 2-component vector of float)
+0:121          'r021' ( temp 2-component vector of float)
+0:121          dPdyCoarse ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r023' ( temp 2-component vector of float)
-0:122          degrees ( temp 2-component vector of float)
+0:122          'r022' ( temp 2-component vector of float)
+0:122          dPdyFine ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
-0:126      Sequence
-0:126        move second child to first child ( temp float)
-0:126          'r026' ( temp float)
-0:126          distance ( temp float)
-0:126            'inF0' ( in 2-component vector of float)
-0:126            'inF1' ( in 2-component vector of float)
+0:123      Sequence
+0:123        move second child to first child ( temp 2-component vector of float)
+0:123          'r023' ( temp 2-component vector of float)
+0:123          degrees ( temp 2-component vector of float)
+0:123            'inF0' ( in 2-component vector of float)
 0:127      Sequence
 0:127        move second child to first child ( temp float)
-0:127          'r027' ( temp float)
-0:127          dot-product ( temp float)
+0:127          'r026' ( temp float)
+0:127          distance ( temp float)
 0:127            'inF0' ( in 2-component vector of float)
 0:127            'inF1' ( in 2-component vector of float)
-0:131      Sequence
-0:131        move second child to first child ( temp 2-component vector of float)
-0:131          'r028' ( temp 2-component vector of float)
-0:131          exp ( temp 2-component vector of float)
-0:131            'inF0' ( in 2-component vector of float)
+0:128      Sequence
+0:128        move second child to first child ( temp float)
+0:128          'r027' ( temp float)
+0:128          dot-product ( temp float)
+0:128            'inF0' ( in 2-component vector of float)
+0:128            'inF1' ( in 2-component vector of float)
 0:132      Sequence
 0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r029' ( temp 2-component vector of float)
-0:132          exp2 ( temp 2-component vector of float)
+0:132          'r028' ( temp 2-component vector of float)
+0:132          exp ( temp 2-component vector of float)
 0:132            'inF0' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r030' ( temp 2-component vector of float)
-0:133          face-forward ( temp 2-component vector of float)
+0:133          'r029' ( temp 2-component vector of float)
+0:133          exp2 ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
-0:133            'inF1' ( in 2-component vector of float)
-0:133            'inF2' ( in 2-component vector of float)
 0:134      Sequence
-0:134        move second child to first child ( temp 2-component vector of uint)
-0:134          'r031' ( temp 2-component vector of uint)
+0:134        move second child to first child ( temp 2-component vector of float)
+0:134          'r030' ( temp 2-component vector of float)
+0:134          face-forward ( temp 2-component vector of float)
+0:134            'inF0' ( in 2-component vector of float)
+0:134            'inF1' ( in 2-component vector of float)
+0:134            'inF2' ( in 2-component vector of float)
+0:135      Sequence
+0:135        move second child to first child ( temp 2-component vector of uint)
+0:135          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r032' ( temp 2-component vector of uint)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of float)
-0:136          'r033' ( temp 2-component vector of float)
-0:136          Floor ( temp 2-component vector of float)
-0:136            'inF0' ( in 2-component vector of float)
-0:138      Sequence
-0:138        move second child to first child ( temp 2-component vector of float)
-0:138          'r035' ( temp 2-component vector of float)
-0:138          mod ( temp 2-component vector of float)
-0:138            'inF0' ( in 2-component vector of float)
-0:138            'inF1' ( in 2-component vector of float)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of float)
+0:137          'r033' ( temp 2-component vector of float)
+0:137          Floor ( temp 2-component vector of float)
+0:137            'inF0' ( in 2-component vector of float)
 0:139      Sequence
 0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r036' ( temp 2-component vector of float)
-0:139          Fraction ( temp 2-component vector of float)
+0:139          'r035' ( temp 2-component vector of float)
+0:139          mod ( temp 2-component vector of float)
 0:139            'inF0' ( in 2-component vector of float)
+0:139            'inF1' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r038' ( temp 2-component vector of float)
-0:140          fwidth ( temp 2-component vector of float)
+0:140          'r036' ( temp 2-component vector of float)
+0:140          Fraction ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
 0:141      Sequence
-0:141        move second child to first child ( temp 2-component vector of bool)
-0:141          'r039' ( temp 2-component vector of bool)
-0:141          isinf ( temp 2-component vector of bool)
+0:141        move second child to first child ( temp 2-component vector of float)
+0:141          'r038' ( temp 2-component vector of float)
+0:141          fwidth ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
 0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r040' ( temp 2-component vector of bool)
-0:142          isnan ( temp 2-component vector of bool)
+0:142          'r039' ( temp 2-component vector of bool)
+0:142          isinf ( temp 2-component vector of bool)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
-0:143        move second child to first child ( temp 2-component vector of float)
-0:143          'r041' ( temp 2-component vector of float)
-0:143          ldexp ( temp 2-component vector of float)
+0:143        move second child to first child ( temp 2-component vector of bool)
+0:143          'r040' ( temp 2-component vector of bool)
+0:143          isnan ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
-0:143            'inF1' ( in 2-component vector of float)
 0:144      Sequence
 0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r039a' ( temp 2-component vector of float)
-0:144          mix ( temp 2-component vector of float)
+0:144          'r041' ( temp 2-component vector of float)
+0:144          ldexp ( temp 2-component vector of float)
 0:144            'inF0' ( in 2-component vector of float)
 0:144            'inF1' ( in 2-component vector of float)
-0:144            'inF2' ( in 2-component vector of float)
 0:145      Sequence
-0:145        move second child to first child ( temp float)
-0:145          'r042' ( temp float)
-0:145          length ( temp float)
+0:145        move second child to first child ( temp 2-component vector of float)
+0:145          'r039a' ( temp 2-component vector of float)
+0:145          mix ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
+0:145            'inF1' ( in 2-component vector of float)
+0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp 2-component vector of float)
-0:146          'r043' ( temp 2-component vector of float)
-0:146          log ( temp 2-component vector of float)
+0:146        move second child to first child ( temp float)
+0:146          'r042' ( temp float)
+0:146          length ( temp float)
 0:146            'inF0' ( in 2-component vector of float)
 0:147      Sequence
 0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r044' ( temp 2-component vector of float)
-0:147          vector-scale ( temp 2-component vector of float)
-0:147            log2 ( temp 2-component vector of float)
-0:147              'inF0' ( in 2-component vector of float)
-0:147            Constant:
-0:147              0.301030
+0:147          'r043' ( temp 2-component vector of float)
+0:147          log ( temp 2-component vector of float)
+0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r045' ( temp 2-component vector of float)
-0:148          log2 ( temp 2-component vector of float)
-0:148            'inF0' ( in 2-component vector of float)
+0:148          'r044' ( temp 2-component vector of float)
+0:148          vector-scale ( temp 2-component vector of float)
+0:148            log2 ( temp 2-component vector of float)
+0:148              'inF0' ( in 2-component vector of float)
+0:148            Constant:
+0:148              0.301030
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r046' ( temp 2-component vector of float)
-0:149          max ( temp 2-component vector of float)
+0:149          'r045' ( temp 2-component vector of float)
+0:149          log2 ( temp 2-component vector of float)
 0:149            'inF0' ( in 2-component vector of float)
-0:149            'inF1' ( in 2-component vector of float)
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r047' ( temp 2-component vector of float)
-0:150          min ( temp 2-component vector of float)
+0:150          'r046' ( temp 2-component vector of float)
+0:150          max ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
 0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r048' ( temp 2-component vector of float)
-0:151          normalize ( temp 2-component vector of float)
+0:151          'r047' ( temp 2-component vector of float)
+0:151          min ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
+0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r049' ( temp 2-component vector of float)
-0:152          pow ( temp 2-component vector of float)
+0:152          'r048' ( temp 2-component vector of float)
+0:152          normalize ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
-0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r050' ( temp 2-component vector of float)
-0:153          radians ( temp 2-component vector of float)
+0:153          'r049' ( temp 2-component vector of float)
+0:153          pow ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
+0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r051' ( temp 2-component vector of float)
-0:154          divide ( temp 2-component vector of float)
-0:154            Constant:
-0:154              1.000000
+0:154          'r050' ( temp 2-component vector of float)
+0:154          radians ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r052' ( temp 2-component vector of float)
-0:155          reflect ( temp 2-component vector of float)
+0:155          'r051' ( temp 2-component vector of float)
+0:155          divide ( temp 2-component vector of float)
+0:155            Constant:
+0:155              1.000000
 0:155            'inF0' ( in 2-component vector of float)
-0:155            'inF1' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r053' ( temp 2-component vector of float)
-0:156          refract ( temp 2-component vector of float)
+0:156          'r052' ( temp 2-component vector of float)
+0:156          reflect ( temp 2-component vector of float)
 0:156            'inF0' ( in 2-component vector of float)
 0:156            'inF1' ( in 2-component vector of float)
-0:156            Constant:
-0:156              2.000000
 0:157      Sequence
-0:157        move second child to first child ( temp 2-component vector of uint)
-0:157          'r054' ( temp 2-component vector of uint)
+0:157        move second child to first child ( temp 2-component vector of float)
+0:157          'r053' ( temp 2-component vector of float)
+0:157          refract ( temp 2-component vector of float)
+0:157            'inF0' ( in 2-component vector of float)
+0:157            'inF1' ( in 2-component vector of float)
+0:157            Constant:
+0:157              2.000000
+0:158      Sequence
+0:158        move second child to first child ( temp 2-component vector of uint)
+0:158          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of float)
-0:158          'r055' ( temp 2-component vector of float)
-0:158          roundEven ( temp 2-component vector of float)
-0:158            'inF0' ( in 2-component vector of float)
 0:159      Sequence
 0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r056' ( temp 2-component vector of float)
-0:159          inverse sqrt ( temp 2-component vector of float)
+0:159          'r055' ( temp 2-component vector of float)
+0:159          roundEven ( temp 2-component vector of float)
 0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r057' ( temp 2-component vector of float)
-0:160          clamp ( temp 2-component vector of float)
+0:160          'r056' ( temp 2-component vector of float)
+0:160          inverse sqrt ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
-0:160            Constant:
-0:160              0.000000
-0:160            Constant:
-0:160              1.000000
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r058' ( temp 2-component vector of float)
-0:161          Sign ( temp 2-component vector of float)
+0:161          'r057' ( temp 2-component vector of float)
+0:161          clamp ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
+0:161            Constant:
+0:161              0.000000
+0:161            Constant:
+0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r059' ( temp 2-component vector of float)
-0:162          sine ( temp 2-component vector of float)
+0:162          'r058' ( temp 2-component vector of float)
+0:162          Sign ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'inF1' ( in 2-component vector of float)
+0:163          'r059' ( temp 2-component vector of float)
 0:163          sine ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
-0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'inF2' ( in 2-component vector of float)
-0:163          cosine ( temp 2-component vector of float)
-0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'r060' ( temp 2-component vector of float)
-0:164          hyp. sine ( temp 2-component vector of float)
+0:164          'inF1' ( in 2-component vector of float)
+0:164          sine ( temp 2-component vector of float)
+0:164            'inF0' ( in 2-component vector of float)
+0:164        move second child to first child ( temp 2-component vector of float)
+0:164          'inF2' ( in 2-component vector of float)
+0:164          cosine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r061' ( temp 2-component vector of float)
-0:165          smoothstep ( temp 2-component vector of float)
+0:165          'r060' ( temp 2-component vector of float)
+0:165          hyp. sine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
-0:165            'inF1' ( in 2-component vector of float)
-0:165            'inF2' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r062' ( temp 2-component vector of float)
-0:166          sqrt ( temp 2-component vector of float)
+0:166          'r061' ( temp 2-component vector of float)
+0:166          smoothstep ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
+0:166            'inF1' ( in 2-component vector of float)
+0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r063' ( temp 2-component vector of float)
-0:167          step ( temp 2-component vector of float)
+0:167          'r062' ( temp 2-component vector of float)
+0:167          sqrt ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
-0:167            'inF1' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r064' ( temp 2-component vector of float)
-0:168          tangent ( temp 2-component vector of float)
+0:168          'r063' ( temp 2-component vector of float)
+0:168          step ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
+0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r065' ( temp 2-component vector of float)
-0:169          hyp. tangent ( temp 2-component vector of float)
+0:169          'r064' ( temp 2-component vector of float)
+0:169          tangent ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
-0:171      Sequence
-0:171        move second child to first child ( temp 2-component vector of float)
-0:171          'r066' ( temp 2-component vector of float)
-0:171          trunc ( temp 2-component vector of float)
-0:171            'inF0' ( in 2-component vector of float)
-0:174      Branch: Return with expression
+0:170      Sequence
+0:170        move second child to first child ( temp 2-component vector of float)
+0:170          'r065' ( temp 2-component vector of float)
+0:170          hyp. tangent ( temp 2-component vector of float)
+0:170            'inF0' ( in 2-component vector of float)
+0:172      Sequence
+0:172        move second child to first child ( temp 2-component vector of float)
+0:172          'r066' ( temp 2-component vector of float)
+0:172          trunc ( temp 2-component vector of float)
+0:172            'inF0' ( in 2-component vector of float)
+0:175      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:178  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:178    Function Parameters: 
-0:178      'inF0' ( in 3-component vector of float)
-0:178      'inF1' ( in 3-component vector of float)
-0:178      'inF2' ( in 3-component vector of float)
-0:178      'inU0' ( in 3-component vector of uint)
-0:178      'inU1' ( in 3-component vector of uint)
+0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:179    Function Parameters: 
+0:179      'inF0' ( in 3-component vector of float)
+0:179      'inF1' ( in 3-component vector of float)
+0:179      'inF2' ( in 3-component vector of float)
+0:179      'inU0' ( in 3-component vector of uint)
+0:179      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:181      Sequence
-0:181        move second child to first child ( temp bool)
-0:181          'r000' ( temp bool)
-0:181          all ( temp bool)
-0:181            Convert float to bool ( temp 3-component vector of bool)
-0:181              'inF0' ( in 3-component vector of float)
 0:182      Sequence
-0:182        move second child to first child ( temp 3-component vector of float)
-0:182          'r001' ( temp 3-component vector of float)
-0:182          Absolute value ( temp 3-component vector of float)
-0:182            'inF0' ( in 3-component vector of float)
+0:182        move second child to first child ( temp bool)
+0:182          'r000' ( temp bool)
+0:182          all ( temp bool)
+0:182            Convert float to bool ( temp 3-component vector of bool)
+0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
 0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r002' ( temp 3-component vector of float)
-0:183          arc cosine ( temp 3-component vector of float)
+0:183          'r001' ( temp 3-component vector of float)
+0:183          Absolute value ( temp 3-component vector of float)
 0:183            'inF0' ( in 3-component vector of float)
 0:184      Sequence
-0:184        move second child to first child ( temp bool)
-0:184          'r003' ( temp bool)
-0:184          any ( temp bool)
-0:184            Convert float to bool ( temp 3-component vector of bool)
-0:184              'inF0' ( in 3-component vector of float)
+0:184        move second child to first child ( temp 3-component vector of float)
+0:184          'r002' ( temp 3-component vector of float)
+0:184          arc cosine ( temp 3-component vector of float)
+0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp 3-component vector of float)
-0:185          'r004' ( temp 3-component vector of float)
-0:185          arc sine ( temp 3-component vector of float)
-0:185            'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp bool)
+0:185          'r003' ( temp bool)
+0:185          any ( temp bool)
+0:185            Convert float to bool ( temp 3-component vector of bool)
+0:185              'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of int)
-0:186          'r005' ( temp 3-component vector of int)
-0:186          floatBitsToInt ( temp 3-component vector of int)
+0:186        move second child to first child ( temp 3-component vector of float)
+0:186          'r004' ( temp 3-component vector of float)
+0:186          arc sine ( temp 3-component vector of float)
 0:186            'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of uint)
-0:187          'r006' ( temp 3-component vector of uint)
-0:187          floatBitsToUint ( temp 3-component vector of uint)
+0:187        move second child to first child ( temp 3-component vector of int)
+0:187          'r005' ( temp 3-component vector of int)
+0:187          floatBitsToInt ( temp 3-component vector of int)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of float)
-0:188          'r007' ( temp 3-component vector of float)
-0:188          intBitsToFloat ( temp 3-component vector of float)
-0:188            'inU0' ( in 3-component vector of uint)
-0:190      Sequence
-0:190        move second child to first child ( temp 3-component vector of float)
-0:190          'r009' ( temp 3-component vector of float)
-0:190          arc tangent ( temp 3-component vector of float)
-0:190            'inF0' ( in 3-component vector of float)
+0:188        move second child to first child ( temp 3-component vector of uint)
+0:188          'r006' ( temp 3-component vector of uint)
+0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188            'inF0' ( in 3-component vector of float)
+0:189      Sequence
+0:189        move second child to first child ( temp 3-component vector of float)
+0:189          'r007' ( temp 3-component vector of float)
+0:189          intBitsToFloat ( temp 3-component vector of float)
+0:189            'inU0' ( in 3-component vector of uint)
 0:191      Sequence
 0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r010' ( temp 3-component vector of float)
+0:191          'r009' ( temp 3-component vector of float)
 0:191          arc tangent ( temp 3-component vector of float)
 0:191            'inF0' ( in 3-component vector of float)
-0:191            'inF1' ( in 3-component vector of float)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r011' ( temp 3-component vector of float)
-0:192          Ceiling ( temp 3-component vector of float)
+0:192          'r010' ( temp 3-component vector of float)
+0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
+0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r012' ( temp 3-component vector of float)
-0:193          clamp ( temp 3-component vector of float)
+0:193          'r011' ( temp 3-component vector of float)
+0:193          Ceiling ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
-0:193            'inF1' ( in 3-component vector of float)
-0:193            'inF2' ( in 3-component vector of float)
-0:194      Test condition and select ( temp void)
-0:194        Condition
-0:194        any ( temp bool)
-0:194          Compare Less Than ( temp 3-component vector of bool)
+0:194      Sequence
+0:194        move second child to first child ( temp 3-component vector of float)
+0:194          'r012' ( temp 3-component vector of float)
+0:194          clamp ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            Constant:
-0:194              0.000000
-0:194              0.000000
-0:194              0.000000
-0:194        true case
-0:194        Branch: Kill
+0:194            'inF1' ( in 3-component vector of float)
+0:194            'inF2' ( in 3-component vector of float)
 0:195      Test condition and select ( temp void)
 0:195        Condition
 0:195        any ( temp bool)
 0:195          Compare Less Than ( temp 3-component vector of bool)
-0:195            'inU0' ( in 3-component vector of uint)
+0:195            'inF0' ( in 3-component vector of float)
 0:195            Constant:
 0:195              0.000000
 0:195              0.000000
 0:195              0.000000
 0:195        true case
 0:195        Branch: Kill
-0:196      Sequence
-0:196        move second child to first child ( temp 3-component vector of float)
-0:196          'r013' ( temp 3-component vector of float)
-0:196          cosine ( temp 3-component vector of float)
-0:196            'inF0' ( in 3-component vector of float)
+0:196      Test condition and select ( temp void)
+0:196        Condition
+0:196        any ( temp bool)
+0:196          Compare Less Than ( temp 3-component vector of bool)
+0:196            'inU0' ( in 3-component vector of uint)
+0:196            Constant:
+0:196              0.000000
+0:196              0.000000
+0:196              0.000000
+0:196        true case
+0:196        Branch: Kill
 0:197      Sequence
 0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r014' ( temp 3-component vector of float)
-0:197          hyp. cosine ( temp 3-component vector of float)
+0:197          'r013' ( temp 3-component vector of float)
+0:197          cosine ( temp 3-component vector of float)
 0:197            'inF0' ( in 3-component vector of float)
 0:198      Sequence
-0:198        move second child to first child ( temp 3-component vector of uint)
-0:198          'r015' ( temp 3-component vector of uint)
+0:198        move second child to first child ( temp 3-component vector of float)
+0:198          'r014' ( temp 3-component vector of float)
+0:198          hyp. cosine ( temp 3-component vector of float)
+0:198            'inF0' ( in 3-component vector of float)
+0:199      Sequence
+0:199        move second child to first child ( temp 3-component vector of uint)
+0:199          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of float)
-0:199          'r016' ( temp 3-component vector of float)
-0:199          cross-product ( temp 3-component vector of float)
-0:199            'inF0' ( in 3-component vector of float)
-0:199            'inF1' ( in 3-component vector of float)
 0:200      Sequence
 0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r017' ( temp 3-component vector of float)
-0:200          dPdx ( temp 3-component vector of float)
+0:200          'r016' ( temp 3-component vector of float)
+0:200          cross-product ( temp 3-component vector of float)
 0:200            'inF0' ( in 3-component vector of float)
+0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r018' ( temp 3-component vector of float)
-0:201          dPdxCoarse ( temp 3-component vector of float)
+0:201          'r017' ( temp 3-component vector of float)
+0:201          dPdx ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r019' ( temp 3-component vector of float)
-0:202          dPdxFine ( temp 3-component vector of float)
+0:202          'r018' ( temp 3-component vector of float)
+0:202          dPdxCoarse ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r020' ( temp 3-component vector of float)
-0:203          dPdy ( temp 3-component vector of float)
+0:203          'r019' ( temp 3-component vector of float)
+0:203          dPdxFine ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r021' ( temp 3-component vector of float)
-0:204          dPdyCoarse ( temp 3-component vector of float)
+0:204          'r020' ( temp 3-component vector of float)
+0:204          dPdy ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r022' ( temp 3-component vector of float)
-0:205          dPdyFine ( temp 3-component vector of float)
+0:205          'r021' ( temp 3-component vector of float)
+0:205          dPdyCoarse ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r023' ( temp 3-component vector of float)
-0:206          degrees ( temp 3-component vector of float)
+0:206          'r022' ( temp 3-component vector of float)
+0:206          dPdyFine ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
-0:207        move second child to first child ( temp float)
-0:207          'r024' ( temp float)
-0:207          distance ( temp float)
+0:207        move second child to first child ( temp 3-component vector of float)
+0:207          'r023' ( temp 3-component vector of float)
+0:207          degrees ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
-0:207            'inF1' ( in 3-component vector of float)
 0:208      Sequence
 0:208        move second child to first child ( temp float)
-0:208          'r025' ( temp float)
-0:208          dot-product ( temp float)
+0:208          'r024' ( temp float)
+0:208          distance ( temp float)
 0:208            'inF0' ( in 3-component vector of float)
 0:208            'inF1' ( in 3-component vector of float)
-0:212      Sequence
-0:212        move second child to first child ( temp 3-component vector of float)
-0:212          'r029' ( temp 3-component vector of float)
-0:212          exp ( temp 3-component vector of float)
-0:212            'inF0' ( in 3-component vector of float)
+0:209      Sequence
+0:209        move second child to first child ( temp float)
+0:209          'r025' ( temp float)
+0:209          dot-product ( temp float)
+0:209            'inF0' ( in 3-component vector of float)
+0:209            'inF1' ( in 3-component vector of float)
 0:213      Sequence
 0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r030' ( temp 3-component vector of float)
-0:213          exp2 ( temp 3-component vector of float)
+0:213          'r029' ( temp 3-component vector of float)
+0:213          exp ( temp 3-component vector of float)
 0:213            'inF0' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r031' ( temp 3-component vector of float)
-0:214          face-forward ( temp 3-component vector of float)
+0:214          'r030' ( temp 3-component vector of float)
+0:214          exp2 ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
-0:214            'inF1' ( in 3-component vector of float)
-0:214            'inF2' ( in 3-component vector of float)
 0:215      Sequence
-0:215        move second child to first child ( temp 3-component vector of uint)
-0:215          'r032' ( temp 3-component vector of uint)
+0:215        move second child to first child ( temp 3-component vector of float)
+0:215          'r031' ( temp 3-component vector of float)
+0:215          face-forward ( temp 3-component vector of float)
+0:215            'inF0' ( in 3-component vector of float)
+0:215            'inF1' ( in 3-component vector of float)
+0:215            'inF2' ( in 3-component vector of float)
+0:216      Sequence
+0:216        move second child to first child ( temp 3-component vector of uint)
+0:216          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r033' ( temp 3-component vector of uint)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of float)
-0:217          'r034' ( temp 3-component vector of float)
-0:217          Floor ( temp 3-component vector of float)
-0:217            'inF0' ( in 3-component vector of float)
-0:219      Sequence
-0:219        move second child to first child ( temp 3-component vector of float)
-0:219          'r036' ( temp 3-component vector of float)
-0:219          mod ( temp 3-component vector of float)
-0:219            'inF0' ( in 3-component vector of float)
-0:219            'inF1' ( in 3-component vector of float)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of float)
+0:218          'r034' ( temp 3-component vector of float)
+0:218          Floor ( temp 3-component vector of float)
+0:218            'inF0' ( in 3-component vector of float)
 0:220      Sequence
 0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r037' ( temp 3-component vector of float)
-0:220          Fraction ( temp 3-component vector of float)
+0:220          'r036' ( temp 3-component vector of float)
+0:220          mod ( temp 3-component vector of float)
 0:220            'inF0' ( in 3-component vector of float)
+0:220            'inF1' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r039' ( temp 3-component vector of float)
-0:221          fwidth ( temp 3-component vector of float)
+0:221          'r037' ( temp 3-component vector of float)
+0:221          Fraction ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
 0:222      Sequence
-0:222        move second child to first child ( temp 3-component vector of bool)
-0:222          'r040' ( temp 3-component vector of bool)
-0:222          isinf ( temp 3-component vector of bool)
+0:222        move second child to first child ( temp 3-component vector of float)
+0:222          'r039' ( temp 3-component vector of float)
+0:222          fwidth ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
 0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r041' ( temp 3-component vector of bool)
-0:223          isnan ( temp 3-component vector of bool)
+0:223          'r040' ( temp 3-component vector of bool)
+0:223          isinf ( temp 3-component vector of bool)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
-0:224        move second child to first child ( temp 3-component vector of float)
-0:224          'r042' ( temp 3-component vector of float)
-0:224          ldexp ( temp 3-component vector of float)
+0:224        move second child to first child ( temp 3-component vector of bool)
+0:224          'r041' ( temp 3-component vector of bool)
+0:224          isnan ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
-0:224            'inF1' ( in 3-component vector of float)
 0:225      Sequence
 0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r039a' ( temp 3-component vector of float)
-0:225          mix ( temp 3-component vector of float)
+0:225          'r042' ( temp 3-component vector of float)
+0:225          ldexp ( temp 3-component vector of float)
 0:225            'inF0' ( in 3-component vector of float)
 0:225            'inF1' ( in 3-component vector of float)
-0:225            'inF2' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039b' ( temp 3-component vector of float)
+0:226          'r039a' ( temp 3-component vector of float)
 0:226          mix ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            Constant:
-0:226              0.300000
+0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
-0:227        move second child to first child ( temp float)
-0:227          'r043' ( temp float)
-0:227          length ( temp float)
+0:227        move second child to first child ( temp 3-component vector of float)
+0:227          'r039b' ( temp 3-component vector of float)
+0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
+0:227            'inF1' ( in 3-component vector of float)
+0:227            Constant:
+0:227              0.300000
 0:228      Sequence
-0:228        move second child to first child ( temp 3-component vector of float)
-0:228          'r044' ( temp 3-component vector of float)
-0:228          log ( temp 3-component vector of float)
+0:228        move second child to first child ( temp float)
+0:228          'r043' ( temp float)
+0:228          length ( temp float)
 0:228            'inF0' ( in 3-component vector of float)
 0:229      Sequence
 0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r045' ( temp 3-component vector of float)
-0:229          vector-scale ( temp 3-component vector of float)
-0:229            log2 ( temp 3-component vector of float)
-0:229              'inF0' ( in 3-component vector of float)
-0:229            Constant:
-0:229              0.301030
+0:229          'r044' ( temp 3-component vector of float)
+0:229          log ( temp 3-component vector of float)
+0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r046' ( temp 3-component vector of float)
-0:230          log2 ( temp 3-component vector of float)
-0:230            'inF0' ( in 3-component vector of float)
+0:230          'r045' ( temp 3-component vector of float)
+0:230          vector-scale ( temp 3-component vector of float)
+0:230            log2 ( temp 3-component vector of float)
+0:230              'inF0' ( in 3-component vector of float)
+0:230            Constant:
+0:230              0.301030
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r047' ( temp 3-component vector of float)
-0:231          max ( temp 3-component vector of float)
+0:231          'r046' ( temp 3-component vector of float)
+0:231          log2 ( temp 3-component vector of float)
 0:231            'inF0' ( in 3-component vector of float)
-0:231            'inF1' ( in 3-component vector of float)
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r048' ( temp 3-component vector of float)
-0:232          min ( temp 3-component vector of float)
+0:232          'r047' ( temp 3-component vector of float)
+0:232          max ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
 0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r049' ( temp 3-component vector of float)
-0:233          normalize ( temp 3-component vector of float)
+0:233          'r048' ( temp 3-component vector of float)
+0:233          min ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
+0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r050' ( temp 3-component vector of float)
-0:234          pow ( temp 3-component vector of float)
+0:234          'r049' ( temp 3-component vector of float)
+0:234          normalize ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
-0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r051' ( temp 3-component vector of float)
-0:235          radians ( temp 3-component vector of float)
+0:235          'r050' ( temp 3-component vector of float)
+0:235          pow ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
+0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r052' ( temp 3-component vector of float)
-0:236          divide ( temp 3-component vector of float)
-0:236            Constant:
-0:236              1.000000
+0:236          'r051' ( temp 3-component vector of float)
+0:236          radians ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r053' ( temp 3-component vector of float)
-0:237          reflect ( temp 3-component vector of float)
+0:237          'r052' ( temp 3-component vector of float)
+0:237          divide ( temp 3-component vector of float)
+0:237            Constant:
+0:237              1.000000
 0:237            'inF0' ( in 3-component vector of float)
-0:237            'inF1' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r054' ( temp 3-component vector of float)
-0:238          refract ( temp 3-component vector of float)
+0:238          'r053' ( temp 3-component vector of float)
+0:238          reflect ( temp 3-component vector of float)
 0:238            'inF0' ( in 3-component vector of float)
 0:238            'inF1' ( in 3-component vector of float)
-0:238            Constant:
-0:238              2.000000
 0:239      Sequence
-0:239        move second child to first child ( temp 3-component vector of uint)
-0:239          'r055' ( temp 3-component vector of uint)
+0:239        move second child to first child ( temp 3-component vector of float)
+0:239          'r054' ( temp 3-component vector of float)
+0:239          refract ( temp 3-component vector of float)
+0:239            'inF0' ( in 3-component vector of float)
+0:239            'inF1' ( in 3-component vector of float)
+0:239            Constant:
+0:239              2.000000
+0:240      Sequence
+0:240        move second child to first child ( temp 3-component vector of uint)
+0:240          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of float)
-0:240          'r056' ( temp 3-component vector of float)
-0:240          roundEven ( temp 3-component vector of float)
-0:240            'inF0' ( in 3-component vector of float)
 0:241      Sequence
 0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r057' ( temp 3-component vector of float)
-0:241          inverse sqrt ( temp 3-component vector of float)
+0:241          'r056' ( temp 3-component vector of float)
+0:241          roundEven ( temp 3-component vector of float)
 0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r058' ( temp 3-component vector of float)
-0:242          clamp ( temp 3-component vector of float)
+0:242          'r057' ( temp 3-component vector of float)
+0:242          inverse sqrt ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
-0:242            Constant:
-0:242              0.000000
-0:242            Constant:
-0:242              1.000000
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r059' ( temp 3-component vector of float)
-0:243          Sign ( temp 3-component vector of float)
+0:243          'r058' ( temp 3-component vector of float)
+0:243          clamp ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
+0:243            Constant:
+0:243              0.000000
+0:243            Constant:
+0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r060' ( temp 3-component vector of float)
-0:244          sine ( temp 3-component vector of float)
+0:244          'r059' ( temp 3-component vector of float)
+0:244          Sign ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'inF1' ( in 3-component vector of float)
+0:245          'r060' ( temp 3-component vector of float)
 0:245          sine ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
-0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'inF2' ( in 3-component vector of float)
-0:245          cosine ( temp 3-component vector of float)
-0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'r061' ( temp 3-component vector of float)
-0:246          hyp. sine ( temp 3-component vector of float)
+0:246          'inF1' ( in 3-component vector of float)
+0:246          sine ( temp 3-component vector of float)
+0:246            'inF0' ( in 3-component vector of float)
+0:246        move second child to first child ( temp 3-component vector of float)
+0:246          'inF2' ( in 3-component vector of float)
+0:246          cosine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r062' ( temp 3-component vector of float)
-0:247          smoothstep ( temp 3-component vector of float)
+0:247          'r061' ( temp 3-component vector of float)
+0:247          hyp. sine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
-0:247            'inF1' ( in 3-component vector of float)
-0:247            'inF2' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r063' ( temp 3-component vector of float)
-0:248          sqrt ( temp 3-component vector of float)
+0:248          'r062' ( temp 3-component vector of float)
+0:248          smoothstep ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
+0:248            'inF1' ( in 3-component vector of float)
+0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r064' ( temp 3-component vector of float)
-0:249          step ( temp 3-component vector of float)
+0:249          'r063' ( temp 3-component vector of float)
+0:249          sqrt ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
-0:249            'inF1' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r065' ( temp 3-component vector of float)
-0:250          tangent ( temp 3-component vector of float)
+0:250          'r064' ( temp 3-component vector of float)
+0:250          step ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
+0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r066' ( temp 3-component vector of float)
-0:251          hyp. tangent ( temp 3-component vector of float)
+0:251          'r065' ( temp 3-component vector of float)
+0:251          tangent ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
-0:253      Sequence
-0:253        move second child to first child ( temp 3-component vector of float)
-0:253          'r067' ( temp 3-component vector of float)
-0:253          trunc ( temp 3-component vector of float)
-0:253            'inF0' ( in 3-component vector of float)
-0:256      Branch: Return with expression
+0:252      Sequence
+0:252        move second child to first child ( temp 3-component vector of float)
+0:252          'r066' ( temp 3-component vector of float)
+0:252          hyp. tangent ( temp 3-component vector of float)
+0:252            'inF0' ( in 3-component vector of float)
+0:254      Sequence
+0:254        move second child to first child ( temp 3-component vector of float)
+0:254          'r067' ( temp 3-component vector of float)
+0:254          trunc ( temp 3-component vector of float)
+0:254            'inF0' ( in 3-component vector of float)
+0:257      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:260  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:260    Function Parameters: 
-0:260      'inF0' ( in 4-component vector of float)
-0:260      'inF1' ( in 4-component vector of float)
-0:260      'inF2' ( in 4-component vector of float)
-0:260      'inU0' ( in 4-component vector of uint)
-0:260      'inU1' ( in 4-component vector of uint)
+0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:261    Function Parameters: 
+0:261      'inF0' ( in 4-component vector of float)
+0:261      'inF1' ( in 4-component vector of float)
+0:261      'inF2' ( in 4-component vector of float)
+0:261      'inU0' ( in 4-component vector of uint)
+0:261      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:263      Sequence
-0:263        move second child to first child ( temp bool)
-0:263          'r000' ( temp bool)
-0:263          all ( temp bool)
-0:263            Convert float to bool ( temp 4-component vector of bool)
-0:263              'inF0' ( in 4-component vector of float)
 0:264      Sequence
-0:264        move second child to first child ( temp 4-component vector of float)
-0:264          'r001' ( temp 4-component vector of float)
-0:264          Absolute value ( temp 4-component vector of float)
-0:264            'inF0' ( in 4-component vector of float)
+0:264        move second child to first child ( temp bool)
+0:264          'r000' ( temp bool)
+0:264          all ( temp bool)
+0:264            Convert float to bool ( temp 4-component vector of bool)
+0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
 0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r002' ( temp 4-component vector of float)
-0:265          arc cosine ( temp 4-component vector of float)
+0:265          'r001' ( temp 4-component vector of float)
+0:265          Absolute value ( temp 4-component vector of float)
 0:265            'inF0' ( in 4-component vector of float)
 0:266      Sequence
-0:266        move second child to first child ( temp bool)
-0:266          'r003' ( temp bool)
-0:266          any ( temp bool)
-0:266            Convert float to bool ( temp 4-component vector of bool)
-0:266              'inF0' ( in 4-component vector of float)
+0:266        move second child to first child ( temp 4-component vector of float)
+0:266          'r002' ( temp 4-component vector of float)
+0:266          arc cosine ( temp 4-component vector of float)
+0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp 4-component vector of float)
-0:267          'r004' ( temp 4-component vector of float)
-0:267          arc sine ( temp 4-component vector of float)
-0:267            'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp bool)
+0:267          'r003' ( temp bool)
+0:267          any ( temp bool)
+0:267            Convert float to bool ( temp 4-component vector of bool)
+0:267              'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of int)
-0:268          'r005' ( temp 4-component vector of int)
-0:268          floatBitsToInt ( temp 4-component vector of int)
+0:268        move second child to first child ( temp 4-component vector of float)
+0:268          'r004' ( temp 4-component vector of float)
+0:268          arc sine ( temp 4-component vector of float)
 0:268            'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of uint)
-0:269          'r006' ( temp 4-component vector of uint)
-0:269          floatBitsToUint ( temp 4-component vector of uint)
+0:269        move second child to first child ( temp 4-component vector of int)
+0:269          'r005' ( temp 4-component vector of int)
+0:269          floatBitsToInt ( temp 4-component vector of int)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of float)
-0:270          'r007' ( temp 4-component vector of float)
-0:270          intBitsToFloat ( temp 4-component vector of float)
-0:270            'inU0' ( in 4-component vector of uint)
-0:272      Sequence
-0:272        move second child to first child ( temp 4-component vector of float)
-0:272          'r009' ( temp 4-component vector of float)
-0:272          arc tangent ( temp 4-component vector of float)
-0:272            'inF0' ( in 4-component vector of float)
+0:270        move second child to first child ( temp 4-component vector of uint)
+0:270          'r006' ( temp 4-component vector of uint)
+0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270            'inF0' ( in 4-component vector of float)
+0:271      Sequence
+0:271        move second child to first child ( temp 4-component vector of float)
+0:271          'r007' ( temp 4-component vector of float)
+0:271          intBitsToFloat ( temp 4-component vector of float)
+0:271            'inU0' ( in 4-component vector of uint)
 0:273      Sequence
 0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r010' ( temp 4-component vector of float)
+0:273          'r009' ( temp 4-component vector of float)
 0:273          arc tangent ( temp 4-component vector of float)
 0:273            'inF0' ( in 4-component vector of float)
-0:273            'inF1' ( in 4-component vector of float)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r011' ( temp 4-component vector of float)
-0:274          Ceiling ( temp 4-component vector of float)
+0:274          'r010' ( temp 4-component vector of float)
+0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
+0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r012' ( temp 4-component vector of float)
-0:275          clamp ( temp 4-component vector of float)
+0:275          'r011' ( temp 4-component vector of float)
+0:275          Ceiling ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
-0:275            'inF1' ( in 4-component vector of float)
-0:275            'inF2' ( in 4-component vector of float)
-0:276      Test condition and select ( temp void)
-0:276        Condition
-0:276        any ( temp bool)
-0:276          Compare Less Than ( temp 4-component vector of bool)
+0:276      Sequence
+0:276        move second child to first child ( temp 4-component vector of float)
+0:276          'r012' ( temp 4-component vector of float)
+0:276          clamp ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            Constant:
-0:276              0.000000
-0:276              0.000000
-0:276              0.000000
-0:276              0.000000
-0:276        true case
-0:276        Branch: Kill
+0:276            'inF1' ( in 4-component vector of float)
+0:276            'inF2' ( in 4-component vector of float)
 0:277      Test condition and select ( temp void)
 0:277        Condition
 0:277        any ( temp bool)
 0:277          Compare Less Than ( temp 4-component vector of bool)
-0:277            'inU0' ( in 4-component vector of uint)
+0:277            'inF0' ( in 4-component vector of float)
 0:277            Constant:
 0:277              0.000000
 0:277              0.000000
@@ -4071,905 +4071,917 @@
 0:277              0.000000
 0:277        true case
 0:277        Branch: Kill
-0:278      Sequence
-0:278        move second child to first child ( temp 4-component vector of float)
-0:278          'r013' ( temp 4-component vector of float)
-0:278          cosine ( temp 4-component vector of float)
-0:278            'inF0' ( in 4-component vector of float)
+0:278      Test condition and select ( temp void)
+0:278        Condition
+0:278        any ( temp bool)
+0:278          Compare Less Than ( temp 4-component vector of bool)
+0:278            'inU0' ( in 4-component vector of uint)
+0:278            Constant:
+0:278              0.000000
+0:278              0.000000
+0:278              0.000000
+0:278              0.000000
+0:278        true case
+0:278        Branch: Kill
 0:279      Sequence
 0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r014' ( temp 4-component vector of float)
-0:279          hyp. cosine ( temp 4-component vector of float)
+0:279          'r013' ( temp 4-component vector of float)
+0:279          cosine ( temp 4-component vector of float)
 0:279            'inF0' ( in 4-component vector of float)
 0:280      Sequence
-0:280        move second child to first child ( temp 4-component vector of uint)
-0:280          'r015' ( temp 4-component vector of uint)
+0:280        move second child to first child ( temp 4-component vector of float)
+0:280          'r014' ( temp 4-component vector of float)
+0:280          hyp. cosine ( temp 4-component vector of float)
+0:280            'inF0' ( in 4-component vector of float)
+0:281      Sequence
+0:281        move second child to first child ( temp 4-component vector of uint)
+0:281          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of float)
-0:281          'r016' ( temp 4-component vector of float)
-0:281          dPdx ( temp 4-component vector of float)
-0:281            'inF0' ( in 4-component vector of float)
 0:282      Sequence
 0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r017' ( temp 4-component vector of float)
-0:282          dPdxCoarse ( temp 4-component vector of float)
+0:282          'r016' ( temp 4-component vector of float)
+0:282          dPdx ( temp 4-component vector of float)
 0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r018' ( temp 4-component vector of float)
-0:283          dPdxFine ( temp 4-component vector of float)
+0:283          'r017' ( temp 4-component vector of float)
+0:283          dPdxCoarse ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r019' ( temp 4-component vector of float)
-0:284          dPdy ( temp 4-component vector of float)
+0:284          'r018' ( temp 4-component vector of float)
+0:284          dPdxFine ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r020' ( temp 4-component vector of float)
-0:285          dPdyCoarse ( temp 4-component vector of float)
+0:285          'r019' ( temp 4-component vector of float)
+0:285          dPdy ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r021' ( temp 4-component vector of float)
-0:286          dPdyFine ( temp 4-component vector of float)
+0:286          'r020' ( temp 4-component vector of float)
+0:286          dPdyCoarse ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r022' ( temp 4-component vector of float)
-0:287          degrees ( temp 4-component vector of float)
+0:287          'r021' ( temp 4-component vector of float)
+0:287          dPdyFine ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
-0:288        move second child to first child ( temp float)
-0:288          'r023' ( temp float)
-0:288          distance ( temp float)
+0:288        move second child to first child ( temp 4-component vector of float)
+0:288          'r022' ( temp 4-component vector of float)
+0:288          degrees ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
-0:288            'inF1' ( in 4-component vector of float)
 0:289      Sequence
 0:289        move second child to first child ( temp float)
-0:289          'r024' ( temp float)
-0:289          dot-product ( temp float)
+0:289          'r023' ( temp float)
+0:289          distance ( temp float)
 0:289            'inF0' ( in 4-component vector of float)
 0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
-0:290        move second child to first child ( temp 4-component vector of float)
-0:290          'r025' ( temp 4-component vector of float)
-0:290          Construct vec4 ( temp 4-component vector of float)
-0:290            Constant:
-0:290              1.000000
-0:290            component-wise multiply ( temp float)
-0:290              direct index ( temp float)
-0:290                'inF0' ( in 4-component vector of float)
-0:290                Constant:
-0:290                  1 (const int)
-0:290              direct index ( temp float)
-0:290                'inF1' ( in 4-component vector of float)
-0:290                Constant:
-0:290                  1 (const int)
-0:290            direct index ( temp float)
-0:290              'inF0' ( in 4-component vector of float)
-0:290              Constant:
-0:290                2 (const int)
-0:290            direct index ( temp float)
-0:290              'inF1' ( in 4-component vector of float)
-0:290              Constant:
-0:290                3 (const int)
-0:294      Sequence
-0:294        move second child to first child ( temp 4-component vector of float)
-0:294          'r029' ( temp 4-component vector of float)
-0:294          exp ( temp 4-component vector of float)
-0:294            'inF0' ( in 4-component vector of float)
+0:290        move second child to first child ( temp float)
+0:290          'r024' ( temp float)
+0:290          dot-product ( temp float)
+0:290            'inF0' ( in 4-component vector of float)
+0:290            'inF1' ( in 4-component vector of float)
+0:291      Sequence
+0:291        move second child to first child ( temp 4-component vector of float)
+0:291          'r025' ( temp 4-component vector of float)
+0:291          Construct vec4 ( temp 4-component vector of float)
+0:291            Constant:
+0:291              1.000000
+0:291            component-wise multiply ( temp float)
+0:291              direct index ( temp float)
+0:291                'inF0' ( in 4-component vector of float)
+0:291                Constant:
+0:291                  1 (const int)
+0:291              direct index ( temp float)
+0:291                'inF1' ( in 4-component vector of float)
+0:291                Constant:
+0:291                  1 (const int)
+0:291            direct index ( temp float)
+0:291              'inF0' ( in 4-component vector of float)
+0:291              Constant:
+0:291                2 (const int)
+0:291            direct index ( temp float)
+0:291              'inF1' ( in 4-component vector of float)
+0:291              Constant:
+0:291                3 (const int)
 0:295      Sequence
 0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r030' ( temp 4-component vector of float)
-0:295          exp2 ( temp 4-component vector of float)
+0:295          'r029' ( temp 4-component vector of float)
+0:295          exp ( temp 4-component vector of float)
 0:295            'inF0' ( in 4-component vector of float)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r031' ( temp 4-component vector of float)
-0:296          face-forward ( temp 4-component vector of float)
+0:296          'r030' ( temp 4-component vector of float)
+0:296          exp2 ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
-0:296            'inF1' ( in 4-component vector of float)
-0:296            'inF2' ( in 4-component vector of float)
 0:297      Sequence
-0:297        move second child to first child ( temp 4-component vector of uint)
-0:297          'r032' ( temp 4-component vector of uint)
+0:297        move second child to first child ( temp 4-component vector of float)
+0:297          'r031' ( temp 4-component vector of float)
+0:297          face-forward ( temp 4-component vector of float)
+0:297            'inF0' ( in 4-component vector of float)
+0:297            'inF1' ( in 4-component vector of float)
+0:297            'inF2' ( in 4-component vector of float)
+0:298      Sequence
+0:298        move second child to first child ( temp 4-component vector of uint)
+0:298          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r033' ( temp 4-component vector of uint)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of float)
-0:299          'r034' ( temp 4-component vector of float)
-0:299          Floor ( temp 4-component vector of float)
-0:299            'inF0' ( in 4-component vector of float)
-0:301      Sequence
-0:301        move second child to first child ( temp 4-component vector of float)
-0:301          'r036' ( temp 4-component vector of float)
-0:301          mod ( temp 4-component vector of float)
-0:301            'inF0' ( in 4-component vector of float)
-0:301            'inF1' ( in 4-component vector of float)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of float)
+0:300          'r034' ( temp 4-component vector of float)
+0:300          Floor ( temp 4-component vector of float)
+0:300            'inF0' ( in 4-component vector of float)
 0:302      Sequence
 0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r037' ( temp 4-component vector of float)
-0:302          Fraction ( temp 4-component vector of float)
+0:302          'r036' ( temp 4-component vector of float)
+0:302          mod ( temp 4-component vector of float)
 0:302            'inF0' ( in 4-component vector of float)
+0:302            'inF1' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r039' ( temp 4-component vector of float)
-0:303          fwidth ( temp 4-component vector of float)
+0:303          'r037' ( temp 4-component vector of float)
+0:303          Fraction ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
 0:304      Sequence
-0:304        move second child to first child ( temp 4-component vector of bool)
-0:304          'r040' ( temp 4-component vector of bool)
-0:304          isinf ( temp 4-component vector of bool)
+0:304        move second child to first child ( temp 4-component vector of float)
+0:304          'r039' ( temp 4-component vector of float)
+0:304          fwidth ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
 0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r041' ( temp 4-component vector of bool)
-0:305          isnan ( temp 4-component vector of bool)
+0:305          'r040' ( temp 4-component vector of bool)
+0:305          isinf ( temp 4-component vector of bool)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
-0:306        move second child to first child ( temp 4-component vector of float)
-0:306          'r042' ( temp 4-component vector of float)
-0:306          ldexp ( temp 4-component vector of float)
+0:306        move second child to first child ( temp 4-component vector of bool)
+0:306          'r041' ( temp 4-component vector of bool)
+0:306          isnan ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
-0:306            'inF1' ( in 4-component vector of float)
 0:307      Sequence
 0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r039a' ( temp 4-component vector of float)
-0:307          mix ( temp 4-component vector of float)
+0:307          'r042' ( temp 4-component vector of float)
+0:307          ldexp ( temp 4-component vector of float)
 0:307            'inF0' ( in 4-component vector of float)
 0:307            'inF1' ( in 4-component vector of float)
-0:307            'inF2' ( in 4-component vector of float)
 0:308      Sequence
-0:308        move second child to first child ( temp float)
-0:308          'r043' ( temp float)
-0:308          length ( temp float)
+0:308        move second child to first child ( temp 4-component vector of float)
+0:308          'r039a' ( temp 4-component vector of float)
+0:308          mix ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
+0:308            'inF1' ( in 4-component vector of float)
+0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp 4-component vector of float)
-0:309          'r044' ( temp 4-component vector of float)
-0:309          log ( temp 4-component vector of float)
+0:309        move second child to first child ( temp float)
+0:309          'r043' ( temp float)
+0:309          length ( temp float)
 0:309            'inF0' ( in 4-component vector of float)
 0:310      Sequence
 0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r045' ( temp 4-component vector of float)
-0:310          vector-scale ( temp 4-component vector of float)
-0:310            log2 ( temp 4-component vector of float)
-0:310              'inF0' ( in 4-component vector of float)
-0:310            Constant:
-0:310              0.301030
+0:310          'r044' ( temp 4-component vector of float)
+0:310          log ( temp 4-component vector of float)
+0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r046' ( temp 4-component vector of float)
-0:311          log2 ( temp 4-component vector of float)
-0:311            'inF0' ( in 4-component vector of float)
+0:311          'r045' ( temp 4-component vector of float)
+0:311          vector-scale ( temp 4-component vector of float)
+0:311            log2 ( temp 4-component vector of float)
+0:311              'inF0' ( in 4-component vector of float)
+0:311            Constant:
+0:311              0.301030
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r047' ( temp 4-component vector of float)
-0:312          max ( temp 4-component vector of float)
+0:312          'r046' ( temp 4-component vector of float)
+0:312          log2 ( temp 4-component vector of float)
 0:312            'inF0' ( in 4-component vector of float)
-0:312            'inF1' ( in 4-component vector of float)
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r048' ( temp 4-component vector of float)
-0:313          min ( temp 4-component vector of float)
+0:313          'r047' ( temp 4-component vector of float)
+0:313          max ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
 0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r049' ( temp 4-component vector of float)
-0:314          normalize ( temp 4-component vector of float)
+0:314          'r048' ( temp 4-component vector of float)
+0:314          min ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
+0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r050' ( temp 4-component vector of float)
-0:315          pow ( temp 4-component vector of float)
+0:315          'r049' ( temp 4-component vector of float)
+0:315          normalize ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
-0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r051' ( temp 4-component vector of float)
-0:316          radians ( temp 4-component vector of float)
+0:316          'r050' ( temp 4-component vector of float)
+0:316          pow ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
+0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r052' ( temp 4-component vector of float)
-0:317          divide ( temp 4-component vector of float)
-0:317            Constant:
-0:317              1.000000
+0:317          'r051' ( temp 4-component vector of float)
+0:317          radians ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r053' ( temp 4-component vector of float)
-0:318          reflect ( temp 4-component vector of float)
+0:318          'r052' ( temp 4-component vector of float)
+0:318          divide ( temp 4-component vector of float)
+0:318            Constant:
+0:318              1.000000
 0:318            'inF0' ( in 4-component vector of float)
-0:318            'inF1' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r054' ( temp 4-component vector of float)
-0:319          refract ( temp 4-component vector of float)
+0:319          'r053' ( temp 4-component vector of float)
+0:319          reflect ( temp 4-component vector of float)
 0:319            'inF0' ( in 4-component vector of float)
 0:319            'inF1' ( in 4-component vector of float)
-0:319            Constant:
-0:319              2.000000
 0:320      Sequence
-0:320        move second child to first child ( temp 4-component vector of uint)
-0:320          'r055' ( temp 4-component vector of uint)
+0:320        move second child to first child ( temp 4-component vector of float)
+0:320          'r054' ( temp 4-component vector of float)
+0:320          refract ( temp 4-component vector of float)
+0:320            'inF0' ( in 4-component vector of float)
+0:320            'inF1' ( in 4-component vector of float)
+0:320            Constant:
+0:320              2.000000
+0:321      Sequence
+0:321        move second child to first child ( temp 4-component vector of uint)
+0:321          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of float)
-0:321          'r056' ( temp 4-component vector of float)
-0:321          roundEven ( temp 4-component vector of float)
-0:321            'inF0' ( in 4-component vector of float)
 0:322      Sequence
 0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r057' ( temp 4-component vector of float)
-0:322          inverse sqrt ( temp 4-component vector of float)
+0:322          'r056' ( temp 4-component vector of float)
+0:322          roundEven ( temp 4-component vector of float)
 0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r058' ( temp 4-component vector of float)
-0:323          clamp ( temp 4-component vector of float)
+0:323          'r057' ( temp 4-component vector of float)
+0:323          inverse sqrt ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
-0:323            Constant:
-0:323              0.000000
-0:323            Constant:
-0:323              1.000000
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r059' ( temp 4-component vector of float)
-0:324          Sign ( temp 4-component vector of float)
+0:324          'r058' ( temp 4-component vector of float)
+0:324          clamp ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
+0:324            Constant:
+0:324              0.000000
+0:324            Constant:
+0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r060' ( temp 4-component vector of float)
-0:325          sine ( temp 4-component vector of float)
+0:325          'r059' ( temp 4-component vector of float)
+0:325          Sign ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'inF1' ( in 4-component vector of float)
+0:326          'r060' ( temp 4-component vector of float)
 0:326          sine ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
-0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'inF2' ( in 4-component vector of float)
-0:326          cosine ( temp 4-component vector of float)
-0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'r061' ( temp 4-component vector of float)
-0:327          hyp. sine ( temp 4-component vector of float)
+0:327          'inF1' ( in 4-component vector of float)
+0:327          sine ( temp 4-component vector of float)
+0:327            'inF0' ( in 4-component vector of float)
+0:327        move second child to first child ( temp 4-component vector of float)
+0:327          'inF2' ( in 4-component vector of float)
+0:327          cosine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r062' ( temp 4-component vector of float)
-0:328          smoothstep ( temp 4-component vector of float)
+0:328          'r061' ( temp 4-component vector of float)
+0:328          hyp. sine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
-0:328            'inF1' ( in 4-component vector of float)
-0:328            'inF2' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r063' ( temp 4-component vector of float)
-0:329          sqrt ( temp 4-component vector of float)
+0:329          'r062' ( temp 4-component vector of float)
+0:329          smoothstep ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
+0:329            'inF1' ( in 4-component vector of float)
+0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r064' ( temp 4-component vector of float)
-0:330          step ( temp 4-component vector of float)
+0:330          'r063' ( temp 4-component vector of float)
+0:330          sqrt ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
-0:330            'inF1' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r065' ( temp 4-component vector of float)
-0:331          tangent ( temp 4-component vector of float)
+0:331          'r064' ( temp 4-component vector of float)
+0:331          step ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
+0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r066' ( temp 4-component vector of float)
-0:332          hyp. tangent ( temp 4-component vector of float)
+0:332          'r065' ( temp 4-component vector of float)
+0:332          tangent ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
-0:334      Sequence
-0:334        move second child to first child ( temp 4-component vector of float)
-0:334          'r067' ( temp 4-component vector of float)
-0:334          trunc ( temp 4-component vector of float)
-0:334            'inF0' ( in 4-component vector of float)
-0:337      Branch: Return with expression
+0:333      Sequence
+0:333        move second child to first child ( temp 4-component vector of float)
+0:333          'r066' ( temp 4-component vector of float)
+0:333          hyp. tangent ( temp 4-component vector of float)
+0:333            'inF0' ( in 4-component vector of float)
+0:335      Sequence
+0:335        move second child to first child ( temp 4-component vector of float)
+0:335          'r067' ( temp 4-component vector of float)
+0:335          trunc ( temp 4-component vector of float)
+0:335            'inF0' ( in 4-component vector of float)
+0:338      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:400  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:400    Function Parameters: 
-0:400      'inF0' ( in 2X2 matrix of float)
-0:400      'inF1' ( in 2X2 matrix of float)
-0:400      'inF2' ( in 2X2 matrix of float)
+0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:401    Function Parameters: 
+0:401      'inF0' ( in 2X2 matrix of float)
+0:401      'inF1' ( in 2X2 matrix of float)
+0:401      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:402      Sequence
-0:402        move second child to first child ( temp bool)
-0:402          'r000' ( temp bool)
-0:402          all ( temp bool)
-0:402            Convert float to bool ( temp 2X2 matrix of bool)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r001' ( temp 2X2 matrix of float)
-0:402          Absolute value ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      arc cosine ( temp 2X2 matrix of float)
-0:402        'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp bool)
-0:402          'r003' ( temp bool)
-0:402          any ( temp bool)
-0:402            Convert float to bool ( temp 2X2 matrix of bool)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r004' ( temp 2X2 matrix of float)
-0:402          arc sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r005' ( temp 2X2 matrix of float)
-0:402          arc tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r006' ( temp 2X2 matrix of float)
-0:402          arc tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r007' ( temp 2X2 matrix of float)
-0:402          Ceiling ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Test condition and select ( temp void)
-0:402        Condition
-0:402        any ( temp bool)
-0:402          Compare Less Than ( temp 2X2 matrix of bool)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402              0.000000
-0:402        true case
-0:402        Branch: Kill
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r008' ( temp 2X2 matrix of float)
-0:402          clamp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r009' ( temp 2X2 matrix of float)
-0:402          cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r010' ( temp 2X2 matrix of float)
-0:402          hyp. cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r011' ( temp 2X2 matrix of float)
-0:402          dPdx ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r012' ( temp 2X2 matrix of float)
-0:402          dPdxCoarse ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r013' ( temp 2X2 matrix of float)
-0:402          dPdxFine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r014' ( temp 2X2 matrix of float)
-0:402          dPdy ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r015' ( temp 2X2 matrix of float)
-0:402          dPdyCoarse ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r016' ( temp 2X2 matrix of float)
-0:402          dPdyFine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r017' ( temp 2X2 matrix of float)
-0:402          degrees ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp float)
-0:402          'r018' ( temp float)
-0:402          determinant ( temp float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r019' ( temp 2X2 matrix of float)
-0:402          exp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'R020' ( temp 2X2 matrix of float)
-0:402          exp2 ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r021' ( temp 2X2 matrix of float)
-0:402          Floor ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r022' ( temp 2X2 matrix of float)
-0:402          mod ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r023' ( temp 2X2 matrix of float)
-0:402          Fraction ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r025' ( temp 2X2 matrix of float)
-0:402          fwidth ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r026' ( temp 2X2 matrix of float)
-0:402          ldexp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r026a' ( temp 2X2 matrix of float)
-0:402          mix ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r027' ( temp 2X2 matrix of float)
-0:402          log ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r028' ( temp 2X2 matrix of float)
-0:402          matrix-scale ( temp 2X2 matrix of float)
-0:402            log2 ( temp 2X2 matrix of float)
-0:402              'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.301030
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r029' ( temp 2X2 matrix of float)
-0:402          log2 ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r030' ( temp 2X2 matrix of float)
-0:402          max ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r031' ( temp 2X2 matrix of float)
-0:402          min ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r032' ( temp 2X2 matrix of float)
-0:402          pow ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r033' ( temp 2X2 matrix of float)
-0:402          radians ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r034' ( temp 2X2 matrix of float)
-0:402          roundEven ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r035' ( temp 2X2 matrix of float)
-0:402          inverse sqrt ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r036' ( temp 2X2 matrix of float)
-0:402          clamp ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            Constant:
-0:402              0.000000
-0:402            Constant:
-0:402              1.000000
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r037' ( temp 2X2 matrix of float)
-0:402          Sign ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r038' ( temp 2X2 matrix of float)
-0:402          sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'inF1' ( in 2X2 matrix of float)
-0:402          sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'inF2' ( in 2X2 matrix of float)
-0:402          cosine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r039' ( temp 2X2 matrix of float)
-0:402          hyp. sine ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r049' ( temp 2X2 matrix of float)
-0:402          smoothstep ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402            'inF2' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r041' ( temp 2X2 matrix of float)
-0:402          sqrt ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r042' ( temp 2X2 matrix of float)
-0:402          step ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402            'inF1' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r043' ( temp 2X2 matrix of float)
-0:402          tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r044' ( temp 2X2 matrix of float)
-0:402          hyp. tangent ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:402      transpose ( temp 2X2 matrix of float)
-0:402        'inF0' ( in 2X2 matrix of float)
-0:402      Sequence
-0:402        move second child to first child ( temp 2X2 matrix of float)
-0:402          'r046' ( temp 2X2 matrix of float)
-0:402          trunc ( temp 2X2 matrix of float)
-0:402            'inF0' ( in 2X2 matrix of float)
-0:405      Branch: Return with expression
+0:403      Sequence
+0:403        move second child to first child ( temp bool)
+0:403          'r000' ( temp bool)
+0:403          all ( temp bool)
+0:403            Convert float to bool ( temp 2X2 matrix of bool)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r001' ( temp 2X2 matrix of float)
+0:403          Absolute value ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      arc cosine ( temp 2X2 matrix of float)
+0:403        'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp bool)
+0:403          'r003' ( temp bool)
+0:403          any ( temp bool)
+0:403            Convert float to bool ( temp 2X2 matrix of bool)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r004' ( temp 2X2 matrix of float)
+0:403          arc sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r005' ( temp 2X2 matrix of float)
+0:403          arc tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r006' ( temp 2X2 matrix of float)
+0:403          arc tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r007' ( temp 2X2 matrix of float)
+0:403          Ceiling ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Test condition and select ( temp void)
+0:403        Condition
+0:403        any ( temp bool)
+0:403          Compare Less Than ( temp 2X2 matrix of bool)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403              0.000000
+0:403        true case
+0:403        Branch: Kill
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r008' ( temp 2X2 matrix of float)
+0:403          clamp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r009' ( temp 2X2 matrix of float)
+0:403          cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r010' ( temp 2X2 matrix of float)
+0:403          hyp. cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r011' ( temp 2X2 matrix of float)
+0:403          dPdx ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r012' ( temp 2X2 matrix of float)
+0:403          dPdxCoarse ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r013' ( temp 2X2 matrix of float)
+0:403          dPdxFine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r014' ( temp 2X2 matrix of float)
+0:403          dPdy ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r015' ( temp 2X2 matrix of float)
+0:403          dPdyCoarse ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r016' ( temp 2X2 matrix of float)
+0:403          dPdyFine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r017' ( temp 2X2 matrix of float)
+0:403          degrees ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp float)
+0:403          'r018' ( temp float)
+0:403          determinant ( temp float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r019' ( temp 2X2 matrix of float)
+0:403          exp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'R020' ( temp 2X2 matrix of float)
+0:403          exp2 ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r021' ( temp 2X2 matrix of float)
+0:403          Floor ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r022' ( temp 2X2 matrix of float)
+0:403          mod ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r023' ( temp 2X2 matrix of float)
+0:403          Fraction ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r025' ( temp 2X2 matrix of float)
+0:403          fwidth ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r026' ( temp 2X2 matrix of float)
+0:403          ldexp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r026a' ( temp 2X2 matrix of float)
+0:403          mix ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r027' ( temp 2X2 matrix of float)
+0:403          log ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r028' ( temp 2X2 matrix of float)
+0:403          matrix-scale ( temp 2X2 matrix of float)
+0:403            log2 ( temp 2X2 matrix of float)
+0:403              'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.301030
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r029' ( temp 2X2 matrix of float)
+0:403          log2 ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r030' ( temp 2X2 matrix of float)
+0:403          max ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r031' ( temp 2X2 matrix of float)
+0:403          min ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r032' ( temp 2X2 matrix of float)
+0:403          pow ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r033' ( temp 2X2 matrix of float)
+0:403          radians ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r034' ( temp 2X2 matrix of float)
+0:403          roundEven ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r035' ( temp 2X2 matrix of float)
+0:403          inverse sqrt ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r036' ( temp 2X2 matrix of float)
+0:403          clamp ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            Constant:
+0:403              0.000000
+0:403            Constant:
+0:403              1.000000
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r037' ( temp 2X2 matrix of float)
+0:403          Sign ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r038' ( temp 2X2 matrix of float)
+0:403          sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'inF1' ( in 2X2 matrix of float)
+0:403          sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'inF2' ( in 2X2 matrix of float)
+0:403          cosine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r039' ( temp 2X2 matrix of float)
+0:403          hyp. sine ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r049' ( temp 2X2 matrix of float)
+0:403          smoothstep ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403            'inF2' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r041' ( temp 2X2 matrix of float)
+0:403          sqrt ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r042' ( temp 2X2 matrix of float)
+0:403          step ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403            'inF1' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r043' ( temp 2X2 matrix of float)
+0:403          tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r044' ( temp 2X2 matrix of float)
+0:403          hyp. tangent ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:403      transpose ( temp 2X2 matrix of float)
+0:403        'inF0' ( in 2X2 matrix of float)
+0:403      Sequence
+0:403        move second child to first child ( temp 2X2 matrix of float)
+0:403          'r046' ( temp 2X2 matrix of float)
+0:403          trunc ( temp 2X2 matrix of float)
+0:403            'inF0' ( in 2X2 matrix of float)
+0:406      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:409  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:409    Function Parameters: 
-0:409      'inF0' ( in 3X3 matrix of float)
-0:409      'inF1' ( in 3X3 matrix of float)
-0:409      'inF2' ( in 3X3 matrix of float)
+0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:410    Function Parameters: 
+0:410      'inF0' ( in 3X3 matrix of float)
+0:410      'inF1' ( in 3X3 matrix of float)
+0:410      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:411      Sequence
-0:411        move second child to first child ( temp bool)
-0:411          'r000' ( temp bool)
-0:411          all ( temp bool)
-0:411            Convert float to bool ( temp 3X3 matrix of bool)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r001' ( temp 3X3 matrix of float)
-0:411          Absolute value ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      arc cosine ( temp 3X3 matrix of float)
-0:411        'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp bool)
-0:411          'r003' ( temp bool)
-0:411          any ( temp bool)
-0:411            Convert float to bool ( temp 3X3 matrix of bool)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r004' ( temp 3X3 matrix of float)
-0:411          arc sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r005' ( temp 3X3 matrix of float)
-0:411          arc tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r006' ( temp 3X3 matrix of float)
-0:411          arc tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r007' ( temp 3X3 matrix of float)
-0:411          Ceiling ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Test condition and select ( temp void)
-0:411        Condition
-0:411        any ( temp bool)
-0:411          Compare Less Than ( temp 3X3 matrix of bool)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411              0.000000
-0:411        true case
-0:411        Branch: Kill
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r008' ( temp 3X3 matrix of float)
-0:411          clamp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r009' ( temp 3X3 matrix of float)
-0:411          cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r010' ( temp 3X3 matrix of float)
-0:411          hyp. cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r011' ( temp 3X3 matrix of float)
-0:411          dPdx ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r012' ( temp 3X3 matrix of float)
-0:411          dPdxCoarse ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r013' ( temp 3X3 matrix of float)
-0:411          dPdxFine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r014' ( temp 3X3 matrix of float)
-0:411          dPdy ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r015' ( temp 3X3 matrix of float)
-0:411          dPdyCoarse ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r016' ( temp 3X3 matrix of float)
-0:411          dPdyFine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r017' ( temp 3X3 matrix of float)
-0:411          degrees ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp float)
-0:411          'r018' ( temp float)
-0:411          determinant ( temp float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r019' ( temp 3X3 matrix of float)
-0:411          exp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'R020' ( temp 3X3 matrix of float)
-0:411          exp2 ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r021' ( temp 3X3 matrix of float)
-0:411          Floor ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r022' ( temp 3X3 matrix of float)
-0:411          mod ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r023' ( temp 3X3 matrix of float)
-0:411          Fraction ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r025' ( temp 3X3 matrix of float)
-0:411          fwidth ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r026' ( temp 3X3 matrix of float)
-0:411          ldexp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r026a' ( temp 3X3 matrix of float)
-0:411          mix ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r027' ( temp 3X3 matrix of float)
-0:411          log ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r028' ( temp 3X3 matrix of float)
-0:411          matrix-scale ( temp 3X3 matrix of float)
-0:411            log2 ( temp 3X3 matrix of float)
-0:411              'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.301030
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r029' ( temp 3X3 matrix of float)
-0:411          log2 ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r030' ( temp 3X3 matrix of float)
-0:411          max ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r031' ( temp 3X3 matrix of float)
-0:411          min ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r032' ( temp 3X3 matrix of float)
-0:411          pow ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r033' ( temp 3X3 matrix of float)
-0:411          radians ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r034' ( temp 3X3 matrix of float)
-0:411          roundEven ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r035' ( temp 3X3 matrix of float)
-0:411          inverse sqrt ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r036' ( temp 3X3 matrix of float)
-0:411          clamp ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            Constant:
-0:411              0.000000
-0:411            Constant:
-0:411              1.000000
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r037' ( temp 3X3 matrix of float)
-0:411          Sign ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r038' ( temp 3X3 matrix of float)
-0:411          sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'inF1' ( in 3X3 matrix of float)
-0:411          sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'inF2' ( in 3X3 matrix of float)
-0:411          cosine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r039' ( temp 3X3 matrix of float)
-0:411          hyp. sine ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r049' ( temp 3X3 matrix of float)
-0:411          smoothstep ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411            'inF2' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r041' ( temp 3X3 matrix of float)
-0:411          sqrt ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r042' ( temp 3X3 matrix of float)
-0:411          step ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411            'inF1' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r043' ( temp 3X3 matrix of float)
-0:411          tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r044' ( temp 3X3 matrix of float)
-0:411          hyp. tangent ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:411      transpose ( temp 3X3 matrix of float)
-0:411        'inF0' ( in 3X3 matrix of float)
-0:411      Sequence
-0:411        move second child to first child ( temp 3X3 matrix of float)
-0:411          'r046' ( temp 3X3 matrix of float)
-0:411          trunc ( temp 3X3 matrix of float)
-0:411            'inF0' ( in 3X3 matrix of float)
-0:414      Branch: Return with expression
+0:412      Sequence
+0:412        move second child to first child ( temp bool)
+0:412          'r000' ( temp bool)
+0:412          all ( temp bool)
+0:412            Convert float to bool ( temp 3X3 matrix of bool)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r001' ( temp 3X3 matrix of float)
+0:412          Absolute value ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      arc cosine ( temp 3X3 matrix of float)
+0:412        'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp bool)
+0:412          'r003' ( temp bool)
+0:412          any ( temp bool)
+0:412            Convert float to bool ( temp 3X3 matrix of bool)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r004' ( temp 3X3 matrix of float)
+0:412          arc sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r005' ( temp 3X3 matrix of float)
+0:412          arc tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r006' ( temp 3X3 matrix of float)
+0:412          arc tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r007' ( temp 3X3 matrix of float)
+0:412          Ceiling ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Test condition and select ( temp void)
+0:412        Condition
+0:412        any ( temp bool)
+0:412          Compare Less Than ( temp 3X3 matrix of bool)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412              0.000000
+0:412        true case
+0:412        Branch: Kill
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r008' ( temp 3X3 matrix of float)
+0:412          clamp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r009' ( temp 3X3 matrix of float)
+0:412          cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r010' ( temp 3X3 matrix of float)
+0:412          hyp. cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r011' ( temp 3X3 matrix of float)
+0:412          dPdx ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r012' ( temp 3X3 matrix of float)
+0:412          dPdxCoarse ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r013' ( temp 3X3 matrix of float)
+0:412          dPdxFine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r014' ( temp 3X3 matrix of float)
+0:412          dPdy ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r015' ( temp 3X3 matrix of float)
+0:412          dPdyCoarse ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r016' ( temp 3X3 matrix of float)
+0:412          dPdyFine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r017' ( temp 3X3 matrix of float)
+0:412          degrees ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp float)
+0:412          'r018' ( temp float)
+0:412          determinant ( temp float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r019' ( temp 3X3 matrix of float)
+0:412          exp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'R020' ( temp 3X3 matrix of float)
+0:412          exp2 ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r021' ( temp 3X3 matrix of float)
+0:412          Floor ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r022' ( temp 3X3 matrix of float)
+0:412          mod ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r023' ( temp 3X3 matrix of float)
+0:412          Fraction ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r025' ( temp 3X3 matrix of float)
+0:412          fwidth ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r026' ( temp 3X3 matrix of float)
+0:412          ldexp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r026a' ( temp 3X3 matrix of float)
+0:412          mix ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r027' ( temp 3X3 matrix of float)
+0:412          log ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r028' ( temp 3X3 matrix of float)
+0:412          matrix-scale ( temp 3X3 matrix of float)
+0:412            log2 ( temp 3X3 matrix of float)
+0:412              'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.301030
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r029' ( temp 3X3 matrix of float)
+0:412          log2 ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r030' ( temp 3X3 matrix of float)
+0:412          max ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r031' ( temp 3X3 matrix of float)
+0:412          min ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r032' ( temp 3X3 matrix of float)
+0:412          pow ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r033' ( temp 3X3 matrix of float)
+0:412          radians ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r034' ( temp 3X3 matrix of float)
+0:412          roundEven ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r035' ( temp 3X3 matrix of float)
+0:412          inverse sqrt ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r036' ( temp 3X3 matrix of float)
+0:412          clamp ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            Constant:
+0:412              0.000000
+0:412            Constant:
+0:412              1.000000
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r037' ( temp 3X3 matrix of float)
+0:412          Sign ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r038' ( temp 3X3 matrix of float)
+0:412          sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'inF1' ( in 3X3 matrix of float)
+0:412          sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'inF2' ( in 3X3 matrix of float)
+0:412          cosine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r039' ( temp 3X3 matrix of float)
+0:412          hyp. sine ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r049' ( temp 3X3 matrix of float)
+0:412          smoothstep ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412            'inF2' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r041' ( temp 3X3 matrix of float)
+0:412          sqrt ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r042' ( temp 3X3 matrix of float)
+0:412          step ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412            'inF1' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r043' ( temp 3X3 matrix of float)
+0:412          tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r044' ( temp 3X3 matrix of float)
+0:412          hyp. tangent ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:412      transpose ( temp 3X3 matrix of float)
+0:412        'inF0' ( in 3X3 matrix of float)
+0:412      Sequence
+0:412        move second child to first child ( temp 3X3 matrix of float)
+0:412          'r046' ( temp 3X3 matrix of float)
+0:412          trunc ( temp 3X3 matrix of float)
+0:412            'inF0' ( in 3X3 matrix of float)
+0:415      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -4980,297 +4992,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:418  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:418    Function Parameters: 
-0:418      'inF0' ( in 4X4 matrix of float)
-0:418      'inF1' ( in 4X4 matrix of float)
-0:418      'inF2' ( in 4X4 matrix of float)
+0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:419    Function Parameters: 
+0:419      'inF0' ( in 4X4 matrix of float)
+0:419      'inF1' ( in 4X4 matrix of float)
+0:419      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:420      Sequence
-0:420        move second child to first child ( temp bool)
-0:420          'r000' ( temp bool)
-0:420          all ( temp bool)
-0:420            Convert float to bool ( temp 4X4 matrix of bool)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r001' ( temp 4X4 matrix of float)
-0:420          Absolute value ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      arc cosine ( temp 4X4 matrix of float)
-0:420        'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp bool)
-0:420          'r003' ( temp bool)
-0:420          any ( temp bool)
-0:420            Convert float to bool ( temp 4X4 matrix of bool)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r004' ( temp 4X4 matrix of float)
-0:420          arc sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r005' ( temp 4X4 matrix of float)
-0:420          arc tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r006' ( temp 4X4 matrix of float)
-0:420          arc tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r007' ( temp 4X4 matrix of float)
-0:420          Ceiling ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Test condition and select ( temp void)
-0:420        Condition
-0:420        any ( temp bool)
-0:420          Compare Less Than ( temp 4X4 matrix of bool)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420              0.000000
-0:420        true case
-0:420        Branch: Kill
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r008' ( temp 4X4 matrix of float)
-0:420          clamp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r009' ( temp 4X4 matrix of float)
-0:420          cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r010' ( temp 4X4 matrix of float)
-0:420          hyp. cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r011' ( temp 4X4 matrix of float)
-0:420          dPdx ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r012' ( temp 4X4 matrix of float)
-0:420          dPdxCoarse ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r013' ( temp 4X4 matrix of float)
-0:420          dPdxFine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r014' ( temp 4X4 matrix of float)
-0:420          dPdy ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r015' ( temp 4X4 matrix of float)
-0:420          dPdyCoarse ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r016' ( temp 4X4 matrix of float)
-0:420          dPdyFine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r017' ( temp 4X4 matrix of float)
-0:420          degrees ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp float)
-0:420          'r018' ( temp float)
-0:420          determinant ( temp float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r019' ( temp 4X4 matrix of float)
-0:420          exp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'R020' ( temp 4X4 matrix of float)
-0:420          exp2 ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r021' ( temp 4X4 matrix of float)
-0:420          Floor ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r022' ( temp 4X4 matrix of float)
-0:420          mod ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r023' ( temp 4X4 matrix of float)
-0:420          Fraction ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r025' ( temp 4X4 matrix of float)
-0:420          fwidth ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r026' ( temp 4X4 matrix of float)
-0:420          ldexp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r026a' ( temp 4X4 matrix of float)
-0:420          mix ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r027' ( temp 4X4 matrix of float)
-0:420          log ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r028' ( temp 4X4 matrix of float)
-0:420          matrix-scale ( temp 4X4 matrix of float)
-0:420            log2 ( temp 4X4 matrix of float)
-0:420              'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.301030
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r029' ( temp 4X4 matrix of float)
-0:420          log2 ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r030' ( temp 4X4 matrix of float)
-0:420          max ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r031' ( temp 4X4 matrix of float)
-0:420          min ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r032' ( temp 4X4 matrix of float)
-0:420          pow ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r033' ( temp 4X4 matrix of float)
-0:420          radians ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r034' ( temp 4X4 matrix of float)
-0:420          roundEven ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r035' ( temp 4X4 matrix of float)
-0:420          inverse sqrt ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r036' ( temp 4X4 matrix of float)
-0:420          clamp ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            Constant:
-0:420              0.000000
-0:420            Constant:
-0:420              1.000000
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r037' ( temp 4X4 matrix of float)
-0:420          Sign ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r038' ( temp 4X4 matrix of float)
-0:420          sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'inF1' ( in 4X4 matrix of float)
-0:420          sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'inF2' ( in 4X4 matrix of float)
-0:420          cosine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r039' ( temp 4X4 matrix of float)
-0:420          hyp. sine ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r049' ( temp 4X4 matrix of float)
-0:420          smoothstep ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420            'inF2' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r041' ( temp 4X4 matrix of float)
-0:420          sqrt ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r042' ( temp 4X4 matrix of float)
-0:420          step ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420            'inF1' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r043' ( temp 4X4 matrix of float)
-0:420          tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r044' ( temp 4X4 matrix of float)
-0:420          hyp. tangent ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:420      transpose ( temp 4X4 matrix of float)
-0:420        'inF0' ( in 4X4 matrix of float)
-0:420      Sequence
-0:420        move second child to first child ( temp 4X4 matrix of float)
-0:420          'r046' ( temp 4X4 matrix of float)
-0:420          trunc ( temp 4X4 matrix of float)
-0:420            'inF0' ( in 4X4 matrix of float)
-0:423      Branch: Return with expression
+0:421      Sequence
+0:421        move second child to first child ( temp bool)
+0:421          'r000' ( temp bool)
+0:421          all ( temp bool)
+0:421            Convert float to bool ( temp 4X4 matrix of bool)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r001' ( temp 4X4 matrix of float)
+0:421          Absolute value ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      arc cosine ( temp 4X4 matrix of float)
+0:421        'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp bool)
+0:421          'r003' ( temp bool)
+0:421          any ( temp bool)
+0:421            Convert float to bool ( temp 4X4 matrix of bool)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r004' ( temp 4X4 matrix of float)
+0:421          arc sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r005' ( temp 4X4 matrix of float)
+0:421          arc tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r006' ( temp 4X4 matrix of float)
+0:421          arc tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r007' ( temp 4X4 matrix of float)
+0:421          Ceiling ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Test condition and select ( temp void)
+0:421        Condition
+0:421        any ( temp bool)
+0:421          Compare Less Than ( temp 4X4 matrix of bool)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421              0.000000
+0:421        true case
+0:421        Branch: Kill
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r008' ( temp 4X4 matrix of float)
+0:421          clamp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r009' ( temp 4X4 matrix of float)
+0:421          cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r010' ( temp 4X4 matrix of float)
+0:421          hyp. cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r011' ( temp 4X4 matrix of float)
+0:421          dPdx ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r012' ( temp 4X4 matrix of float)
+0:421          dPdxCoarse ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r013' ( temp 4X4 matrix of float)
+0:421          dPdxFine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r014' ( temp 4X4 matrix of float)
+0:421          dPdy ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r015' ( temp 4X4 matrix of float)
+0:421          dPdyCoarse ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r016' ( temp 4X4 matrix of float)
+0:421          dPdyFine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r017' ( temp 4X4 matrix of float)
+0:421          degrees ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp float)
+0:421          'r018' ( temp float)
+0:421          determinant ( temp float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r019' ( temp 4X4 matrix of float)
+0:421          exp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'R020' ( temp 4X4 matrix of float)
+0:421          exp2 ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r021' ( temp 4X4 matrix of float)
+0:421          Floor ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r022' ( temp 4X4 matrix of float)
+0:421          mod ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r023' ( temp 4X4 matrix of float)
+0:421          Fraction ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r025' ( temp 4X4 matrix of float)
+0:421          fwidth ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r026' ( temp 4X4 matrix of float)
+0:421          ldexp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r026a' ( temp 4X4 matrix of float)
+0:421          mix ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r027' ( temp 4X4 matrix of float)
+0:421          log ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r028' ( temp 4X4 matrix of float)
+0:421          matrix-scale ( temp 4X4 matrix of float)
+0:421            log2 ( temp 4X4 matrix of float)
+0:421              'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.301030
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r029' ( temp 4X4 matrix of float)
+0:421          log2 ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r030' ( temp 4X4 matrix of float)
+0:421          max ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r031' ( temp 4X4 matrix of float)
+0:421          min ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r032' ( temp 4X4 matrix of float)
+0:421          pow ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r033' ( temp 4X4 matrix of float)
+0:421          radians ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r034' ( temp 4X4 matrix of float)
+0:421          roundEven ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r035' ( temp 4X4 matrix of float)
+0:421          inverse sqrt ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r036' ( temp 4X4 matrix of float)
+0:421          clamp ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            Constant:
+0:421              0.000000
+0:421            Constant:
+0:421              1.000000
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r037' ( temp 4X4 matrix of float)
+0:421          Sign ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r038' ( temp 4X4 matrix of float)
+0:421          sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'inF1' ( in 4X4 matrix of float)
+0:421          sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'inF2' ( in 4X4 matrix of float)
+0:421          cosine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r039' ( temp 4X4 matrix of float)
+0:421          hyp. sine ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r049' ( temp 4X4 matrix of float)
+0:421          smoothstep ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421            'inF2' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r041' ( temp 4X4 matrix of float)
+0:421          sqrt ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r042' ( temp 4X4 matrix of float)
+0:421          step ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421            'inF1' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r043' ( temp 4X4 matrix of float)
+0:421          tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r044' ( temp 4X4 matrix of float)
+0:421          hyp. tangent ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:421      transpose ( temp 4X4 matrix of float)
+0:421        'inF0' ( in 4X4 matrix of float)
+0:421      Sequence
+0:421        move second child to first child ( temp 4X4 matrix of float)
+0:421          'r046' ( temp 4X4 matrix of float)
+0:421          trunc ( temp 4X4 matrix of float)
+0:421            'inF0' ( in 4X4 matrix of float)
+0:424      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -5288,334 +5300,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:441  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:441    Function Parameters: 
-0:441      'inF0' ( in float)
-0:441      'inF1' ( in float)
-0:441      'inFV0' ( in 2-component vector of float)
-0:441      'inFV1' ( in 2-component vector of float)
-0:441      'inFM0' ( in 2X2 matrix of float)
-0:441      'inFM1' ( in 2X2 matrix of float)
+0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:442    Function Parameters: 
+0:442      'inF0' ( in float)
+0:442      'inF1' ( in float)
+0:442      'inFV0' ( in 2-component vector of float)
+0:442      'inFV1' ( in 2-component vector of float)
+0:442      'inFM0' ( in 2X2 matrix of float)
+0:442      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:442      Sequence
-0:442        move second child to first child ( temp float)
-0:442          'r0' ( temp float)
-0:442          component-wise multiply ( temp float)
-0:442            'inF1' ( in float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r1' ( temp 2-component vector of float)
-0:442          vector-scale ( temp 2-component vector of float)
-0:442            'inF0' ( in float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r2' ( temp 2-component vector of float)
-0:442          vector-scale ( temp 2-component vector of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp float)
-0:442          'r3' ( temp float)
-0:442          dot-product ( temp float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inFV1' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r4' ( temp 2-component vector of float)
-0:442          vector-times-matrix ( temp 2-component vector of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2-component vector of float)
-0:442          'r5' ( temp 2-component vector of float)
-0:442          matrix-times-vector ( temp 2-component vector of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442            'inFV0' ( in 2-component vector of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r6' ( temp 2X2 matrix of float)
-0:442          matrix-scale ( temp 2X2 matrix of float)
-0:442            'inF0' ( in float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r7' ( temp 2X2 matrix of float)
-0:442          matrix-scale ( temp 2X2 matrix of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:442            'inF0' ( in float)
-0:442      Sequence
-0:442        move second child to first child ( temp 2X2 matrix of float)
-0:442          'r8' ( temp 2X2 matrix of float)
-0:442          matrix-multiply ( temp 2X2 matrix of float)
-0:442            'inFM1' ( in 2X2 matrix of float)
-0:442            'inFM0' ( in 2X2 matrix of float)
-0:448  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:448    Function Parameters: 
-0:448      'inF0' ( in float)
-0:448      'inF1' ( in float)
-0:448      'inFV0' ( in 3-component vector of float)
-0:448      'inFV1' ( in 3-component vector of float)
-0:448      'inFM0' ( in 3X3 matrix of float)
-0:448      'inFM1' ( in 3X3 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp float)
+0:443          'r0' ( temp float)
+0:443          component-wise multiply ( temp float)
+0:443            'inF1' ( in float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r1' ( temp 2-component vector of float)
+0:443          vector-scale ( temp 2-component vector of float)
+0:443            'inF0' ( in float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r2' ( temp 2-component vector of float)
+0:443          vector-scale ( temp 2-component vector of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp float)
+0:443          'r3' ( temp float)
+0:443          dot-product ( temp float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inFV1' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r4' ( temp 2-component vector of float)
+0:443          vector-times-matrix ( temp 2-component vector of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2-component vector of float)
+0:443          'r5' ( temp 2-component vector of float)
+0:443          matrix-times-vector ( temp 2-component vector of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443            'inFV0' ( in 2-component vector of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r6' ( temp 2X2 matrix of float)
+0:443          matrix-scale ( temp 2X2 matrix of float)
+0:443            'inF0' ( in float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r7' ( temp 2X2 matrix of float)
+0:443          matrix-scale ( temp 2X2 matrix of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:443            'inF0' ( in float)
+0:443      Sequence
+0:443        move second child to first child ( temp 2X2 matrix of float)
+0:443          'r8' ( temp 2X2 matrix of float)
+0:443          matrix-multiply ( temp 2X2 matrix of float)
+0:443            'inFM1' ( in 2X2 matrix of float)
+0:443            'inFM0' ( in 2X2 matrix of float)
+0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:449    Function Parameters: 
+0:449      'inF0' ( in float)
+0:449      'inF1' ( in float)
+0:449      'inFV0' ( in 3-component vector of float)
+0:449      'inFV1' ( in 3-component vector of float)
+0:449      'inFM0' ( in 3X3 matrix of float)
+0:449      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:449      Sequence
-0:449        move second child to first child ( temp float)
-0:449          'r0' ( temp float)
-0:449          component-wise multiply ( temp float)
-0:449            'inF1' ( in float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r1' ( temp 3-component vector of float)
-0:449          vector-scale ( temp 3-component vector of float)
-0:449            'inF0' ( in float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r2' ( temp 3-component vector of float)
-0:449          vector-scale ( temp 3-component vector of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp float)
-0:449          'r3' ( temp float)
-0:449          dot-product ( temp float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inFV1' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r4' ( temp 3-component vector of float)
-0:449          vector-times-matrix ( temp 3-component vector of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3-component vector of float)
-0:449          'r5' ( temp 3-component vector of float)
-0:449          matrix-times-vector ( temp 3-component vector of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449            'inFV0' ( in 3-component vector of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r6' ( temp 3X3 matrix of float)
-0:449          matrix-scale ( temp 3X3 matrix of float)
-0:449            'inF0' ( in float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r7' ( temp 3X3 matrix of float)
-0:449          matrix-scale ( temp 3X3 matrix of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:449            'inF0' ( in float)
-0:449      Sequence
-0:449        move second child to first child ( temp 3X3 matrix of float)
-0:449          'r8' ( temp 3X3 matrix of float)
-0:449          matrix-multiply ( temp 3X3 matrix of float)
-0:449            'inFM1' ( in 3X3 matrix of float)
-0:449            'inFM0' ( in 3X3 matrix of float)
-0:455  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:455    Function Parameters: 
-0:455      'inF0' ( in float)
-0:455      'inF1' ( in float)
-0:455      'inFV0' ( in 4-component vector of float)
-0:455      'inFV1' ( in 4-component vector of float)
-0:455      'inFM0' ( in 4X4 matrix of float)
-0:455      'inFM1' ( in 4X4 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp float)
+0:450          'r0' ( temp float)
+0:450          component-wise multiply ( temp float)
+0:450            'inF1' ( in float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r1' ( temp 3-component vector of float)
+0:450          vector-scale ( temp 3-component vector of float)
+0:450            'inF0' ( in float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r2' ( temp 3-component vector of float)
+0:450          vector-scale ( temp 3-component vector of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp float)
+0:450          'r3' ( temp float)
+0:450          dot-product ( temp float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inFV1' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r4' ( temp 3-component vector of float)
+0:450          vector-times-matrix ( temp 3-component vector of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3-component vector of float)
+0:450          'r5' ( temp 3-component vector of float)
+0:450          matrix-times-vector ( temp 3-component vector of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450            'inFV0' ( in 3-component vector of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r6' ( temp 3X3 matrix of float)
+0:450          matrix-scale ( temp 3X3 matrix of float)
+0:450            'inF0' ( in float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r7' ( temp 3X3 matrix of float)
+0:450          matrix-scale ( temp 3X3 matrix of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:450            'inF0' ( in float)
+0:450      Sequence
+0:450        move second child to first child ( temp 3X3 matrix of float)
+0:450          'r8' ( temp 3X3 matrix of float)
+0:450          matrix-multiply ( temp 3X3 matrix of float)
+0:450            'inFM1' ( in 3X3 matrix of float)
+0:450            'inFM0' ( in 3X3 matrix of float)
+0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:456    Function Parameters: 
+0:456      'inF0' ( in float)
+0:456      'inF1' ( in float)
+0:456      'inFV0' ( in 4-component vector of float)
+0:456      'inFV1' ( in 4-component vector of float)
+0:456      'inFM0' ( in 4X4 matrix of float)
+0:456      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:456      Sequence
-0:456        move second child to first child ( temp float)
-0:456          'r0' ( temp float)
-0:456          component-wise multiply ( temp float)
-0:456            'inF1' ( in float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r1' ( temp 4-component vector of float)
-0:456          vector-scale ( temp 4-component vector of float)
-0:456            'inF0' ( in float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r2' ( temp 4-component vector of float)
-0:456          vector-scale ( temp 4-component vector of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp float)
-0:456          'r3' ( temp float)
-0:456          dot-product ( temp float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inFV1' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r4' ( temp 4-component vector of float)
-0:456          vector-times-matrix ( temp 4-component vector of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4-component vector of float)
-0:456          'r5' ( temp 4-component vector of float)
-0:456          matrix-times-vector ( temp 4-component vector of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456            'inFV0' ( in 4-component vector of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r6' ( temp 4X4 matrix of float)
-0:456          matrix-scale ( temp 4X4 matrix of float)
-0:456            'inF0' ( in float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r7' ( temp 4X4 matrix of float)
-0:456          matrix-scale ( temp 4X4 matrix of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:456            'inF0' ( in float)
-0:456      Sequence
-0:456        move second child to first child ( temp 4X4 matrix of float)
-0:456          'r8' ( temp 4X4 matrix of float)
-0:456          matrix-multiply ( temp 4X4 matrix of float)
-0:456            'inFM1' ( in 4X4 matrix of float)
-0:456            'inFM0' ( in 4X4 matrix of float)
-0:465  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:465    Function Parameters: 
-0:465      'inF0' ( in float)
-0:465      'inF1' ( in float)
-0:465      'inFV2' ( in 2-component vector of float)
-0:465      'inFV3' ( in 3-component vector of float)
-0:465      'inFM2x3' ( in 2X3 matrix of float)
-0:465      'inFM3x2' ( in 3X2 matrix of float)
-0:465      'inFM3x3' ( in 3X3 matrix of float)
-0:465      'inFM3x4' ( in 3X4 matrix of float)
-0:465      'inFM2x4' ( in 2X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp float)
+0:457          'r0' ( temp float)
+0:457          component-wise multiply ( temp float)
+0:457            'inF1' ( in float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r1' ( temp 4-component vector of float)
+0:457          vector-scale ( temp 4-component vector of float)
+0:457            'inF0' ( in float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r2' ( temp 4-component vector of float)
+0:457          vector-scale ( temp 4-component vector of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp float)
+0:457          'r3' ( temp float)
+0:457          dot-product ( temp float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inFV1' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r4' ( temp 4-component vector of float)
+0:457          vector-times-matrix ( temp 4-component vector of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4-component vector of float)
+0:457          'r5' ( temp 4-component vector of float)
+0:457          matrix-times-vector ( temp 4-component vector of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457            'inFV0' ( in 4-component vector of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r6' ( temp 4X4 matrix of float)
+0:457          matrix-scale ( temp 4X4 matrix of float)
+0:457            'inF0' ( in float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r7' ( temp 4X4 matrix of float)
+0:457          matrix-scale ( temp 4X4 matrix of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:457            'inF0' ( in float)
+0:457      Sequence
+0:457        move second child to first child ( temp 4X4 matrix of float)
+0:457          'r8' ( temp 4X4 matrix of float)
+0:457          matrix-multiply ( temp 4X4 matrix of float)
+0:457            'inFM1' ( in 4X4 matrix of float)
+0:457            'inFM0' ( in 4X4 matrix of float)
+0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:466    Function Parameters: 
+0:466      'inF0' ( in float)
+0:466      'inF1' ( in float)
+0:466      'inFV2' ( in 2-component vector of float)
+0:466      'inFV3' ( in 3-component vector of float)
+0:466      'inFM2x3' ( in 2X3 matrix of float)
+0:466      'inFM3x2' ( in 3X2 matrix of float)
+0:466      'inFM3x3' ( in 3X3 matrix of float)
+0:466      'inFM3x4' ( in 3X4 matrix of float)
+0:466      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:466      Sequence
-0:466        move second child to first child ( temp float)
-0:466          'r00' ( temp float)
-0:466          component-wise multiply ( temp float)
-0:466            'inF1' ( in float)
-0:466            'inF0' ( in float)
 0:467      Sequence
-0:467        move second child to first child ( temp 2-component vector of float)
-0:467          'r01' ( temp 2-component vector of float)
-0:467          vector-scale ( temp 2-component vector of float)
+0:467        move second child to first child ( temp float)
+0:467          'r00' ( temp float)
+0:467          component-wise multiply ( temp float)
+0:467            'inF1' ( in float)
 0:467            'inF0' ( in float)
-0:467            'inFV2' ( in 2-component vector of float)
 0:468      Sequence
-0:468        move second child to first child ( temp 3-component vector of float)
-0:468          'r02' ( temp 3-component vector of float)
-0:468          vector-scale ( temp 3-component vector of float)
+0:468        move second child to first child ( temp 2-component vector of float)
+0:468          'r01' ( temp 2-component vector of float)
+0:468          vector-scale ( temp 2-component vector of float)
 0:468            'inF0' ( in float)
-0:468            'inFV3' ( in 3-component vector of float)
+0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 2-component vector of float)
-0:469          'r03' ( temp 2-component vector of float)
-0:469          vector-scale ( temp 2-component vector of float)
-0:469            'inFV2' ( in 2-component vector of float)
+0:469        move second child to first child ( temp 3-component vector of float)
+0:469          'r02' ( temp 3-component vector of float)
+0:469          vector-scale ( temp 3-component vector of float)
 0:469            'inF0' ( in float)
+0:469            'inFV3' ( in 3-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 3-component vector of float)
-0:470          'r04' ( temp 3-component vector of float)
-0:470          vector-scale ( temp 3-component vector of float)
-0:470            'inFV3' ( in 3-component vector of float)
+0:470        move second child to first child ( temp 2-component vector of float)
+0:470          'r03' ( temp 2-component vector of float)
+0:470          vector-scale ( temp 2-component vector of float)
+0:470            'inFV2' ( in 2-component vector of float)
 0:470            'inF0' ( in float)
 0:471      Sequence
-0:471        move second child to first child ( temp float)
-0:471          'r05' ( temp float)
-0:471          dot-product ( temp float)
-0:471            'inFV2' ( in 2-component vector of float)
-0:471            'inFV2' ( in 2-component vector of float)
+0:471        move second child to first child ( temp 3-component vector of float)
+0:471          'r04' ( temp 3-component vector of float)
+0:471          vector-scale ( temp 3-component vector of float)
+0:471            'inFV3' ( in 3-component vector of float)
+0:471            'inF0' ( in float)
 0:472      Sequence
 0:472        move second child to first child ( temp float)
-0:472          'r06' ( temp float)
+0:472          'r05' ( temp float)
 0:472          dot-product ( temp float)
-0:472            'inFV3' ( in 3-component vector of float)
-0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inFV2' ( in 2-component vector of float)
+0:472            'inFV2' ( in 2-component vector of float)
 0:473      Sequence
-0:473        move second child to first child ( temp 3-component vector of float)
-0:473          'r07' ( temp 3-component vector of float)
-0:473          matrix-times-vector ( temp 3-component vector of float)
-0:473            'inFM2x3' ( in 2X3 matrix of float)
-0:473            'inFV2' ( in 2-component vector of float)
+0:473        move second child to first child ( temp float)
+0:473          'r06' ( temp float)
+0:473          dot-product ( temp float)
+0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV3' ( in 3-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 2-component vector of float)
-0:474          'r08' ( temp 2-component vector of float)
-0:474          matrix-times-vector ( temp 2-component vector of float)
-0:474            'inFM3x2' ( in 3X2 matrix of float)
-0:474            'inFV3' ( in 3-component vector of float)
+0:474        move second child to first child ( temp 3-component vector of float)
+0:474          'r07' ( temp 3-component vector of float)
+0:474          matrix-times-vector ( temp 3-component vector of float)
+0:474            'inFM2x3' ( in 2X3 matrix of float)
+0:474            'inFV2' ( in 2-component vector of float)
 0:475      Sequence
 0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r09' ( temp 2-component vector of float)
-0:475          vector-times-matrix ( temp 2-component vector of float)
+0:475          'r08' ( temp 2-component vector of float)
+0:475          matrix-times-vector ( temp 2-component vector of float)
+0:475            'inFM3x2' ( in 3X2 matrix of float)
 0:475            'inFV3' ( in 3-component vector of float)
-0:475            'inFM2x3' ( in 2X3 matrix of float)
 0:476      Sequence
-0:476        move second child to first child ( temp 3-component vector of float)
-0:476          'r10' ( temp 3-component vector of float)
-0:476          vector-times-matrix ( temp 3-component vector of float)
-0:476            'inFV2' ( in 2-component vector of float)
-0:476            'inFM3x2' ( in 3X2 matrix of float)
+0:476        move second child to first child ( temp 2-component vector of float)
+0:476          'r09' ( temp 2-component vector of float)
+0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476            'inFV3' ( in 3-component vector of float)
+0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 2X3 matrix of float)
-0:477          'r11' ( temp 2X3 matrix of float)
-0:477          matrix-scale ( temp 2X3 matrix of float)
-0:477            'inF0' ( in float)
-0:477            'inFM2x3' ( in 2X3 matrix of float)
+0:477        move second child to first child ( temp 3-component vector of float)
+0:477          'r10' ( temp 3-component vector of float)
+0:477          vector-times-matrix ( temp 3-component vector of float)
+0:477            'inFV2' ( in 2-component vector of float)
+0:477            'inFM3x2' ( in 3X2 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 3X2 matrix of float)
-0:478          'r12' ( temp 3X2 matrix of float)
-0:478          matrix-scale ( temp 3X2 matrix of float)
+0:478        move second child to first child ( temp 2X3 matrix of float)
+0:478          'r11' ( temp 2X3 matrix of float)
+0:478          matrix-scale ( temp 2X3 matrix of float)
 0:478            'inF0' ( in float)
-0:478            'inFM3x2' ( in 3X2 matrix of float)
+0:478            'inFM2x3' ( in 2X3 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 2X2 matrix of float)
-0:479          'r13' ( temp 2X2 matrix of float)
-0:479          matrix-multiply ( temp 2X2 matrix of float)
+0:479        move second child to first child ( temp 3X2 matrix of float)
+0:479          'r12' ( temp 3X2 matrix of float)
+0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479            'inF0' ( in float)
 0:479            'inFM3x2' ( in 3X2 matrix of float)
-0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X3 matrix of float)
-0:480          'r14' ( temp 2X3 matrix of float)
-0:480          matrix-multiply ( temp 2X3 matrix of float)
-0:480            'inFM3x3' ( in 3X3 matrix of float)
+0:480        move second child to first child ( temp 2X2 matrix of float)
+0:480          'r13' ( temp 2X2 matrix of float)
+0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480            'inFM3x2' ( in 3X2 matrix of float)
 0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X4 matrix of float)
-0:481          'r15' ( temp 2X4 matrix of float)
-0:481          matrix-multiply ( temp 2X4 matrix of float)
-0:481            'inFM3x4' ( in 3X4 matrix of float)
+0:481        move second child to first child ( temp 2X3 matrix of float)
+0:481          'r14' ( temp 2X3 matrix of float)
+0:481          matrix-multiply ( temp 2X3 matrix of float)
+0:481            'inFM3x3' ( in 3X3 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 3X4 matrix of float)
-0:482          'r16' ( temp 3X4 matrix of float)
-0:482          matrix-multiply ( temp 3X4 matrix of float)
-0:482            'inFM2x4' ( in 2X4 matrix of float)
-0:482            'inFM3x2' ( in 3X2 matrix of float)
-0:488  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:488    Function Parameters: 
+0:482        move second child to first child ( temp 2X4 matrix of float)
+0:482          'r15' ( temp 2X4 matrix of float)
+0:482          matrix-multiply ( temp 2X4 matrix of float)
+0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482            'inFM2x3' ( in 2X3 matrix of float)
+0:483      Sequence
+0:483        move second child to first child ( temp 3X4 matrix of float)
+0:483          'r16' ( temp 3X4 matrix of float)
+0:483          matrix-multiply ( temp 3X4 matrix of float)
+0:483            'inFM2x4' ( in 2X4 matrix of float)
+0:483            'inFM3x2' ( in 3X2 matrix of float)
+0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:489    Function Parameters: 
 0:?     Sequence
-0:490      move second child to first child ( temp 4-component vector of float)
-0:490        color: direct index for structure ( temp 4-component vector of float)
-0:490          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:490          Constant:
-0:490            0 (const int)
-0:490        Constant:
-0:490          1.000000
-0:490          1.000000
-0:490          1.000000
-0:490          1.000000
-0:491      Branch: Return with expression
-0:491        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:488  Function Definition: main( ( temp void)
-0:488    Function Parameters: 
+0:491      move second child to first child ( temp 4-component vector of float)
+0:491        color: direct index for structure ( temp 4-component vector of float)
+0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:491          Constant:
+0:491            0 (const int)
+0:491        Constant:
+0:491          1.000000
+0:491          1.000000
+0:491          1.000000
+0:491          1.000000
+0:492      Branch: Return with expression
+0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:489  Function Definition: main( ( temp void)
+0:489    Function Parameters: 
 0:?     Sequence
-0:488      Sequence
-0:488        move second child to first child ( temp 4-component vector of float)
+0:489      Sequence
+0:489        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:488          color: direct index for structure ( temp 4-component vector of float)
-0:488            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:488            Constant:
-0:488              0 (const int)
+0:489          color: direct index for structure ( temp 4-component vector of float)
+0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:489            Constant:
+0:489              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -5631,15 +5643,19 @@
 0:?     'gs_uc4' ( shared 4-component vector of uint)
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Matrix types can only be parameterized with floating-point types.
+  %mat2v2bool = OpTypeMatrix %v2bool 2
+
 // Module Version 10000
 // Generated by (magic number): 80007
-// Id's are bound by 1832
+// Id's are bound by 1836
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1813
+                              EntryPoint Fragment 4  "main" 1817
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -5739,422 +5755,423 @@
                               Name 213  "r021"
                               Name 216  "r022"
                               Name 219  "r023"
-                              Name 222  "r027"
-                              Name 225  "r028"
-                              Name 228  "r029"
-                              Name 231  "r030"
-                              Name 234  "r031"
-                              Name 237  "r033"
-                              Name 241  "r034"
-                              Name 244  "r036"
-                              Name 247  "r037"
-                              Name 250  "r038"
-                              Name 253  "r039"
-                              Name 257  "r039a"
-                              Name 262  "r040"
-                              Name 265  "r041"
-                              Name 270  "r042"
-                              Name 273  "r043"
-                              Name 277  "r044"
-                              Name 281  "r045"
-                              Name 285  "r046"
-                              Name 288  "r047"
-                              Name 292  "r048"
-                              Name 296  "r049"
-                              Name 299  "r050"
-                              Name 302  "r051"
-                              Name 305  "r052"
-                              Name 308  "r053"
-                              Name 315  "r055"
-                              Name 318  "r056"
-                              Name 323  "r057"
-                              Name 326  "r058"
-                              Name 330  "r059"
-                              Name 333  "r060"
-                              Name 336  "r061"
-                              Name 343  "r000"
-                              Name 349  "r001"
-                              Name 352  "r002"
-                              Name 355  "r003"
-                              Name 359  "r004"
-                              Name 364  "r005"
-                              Name 367  "r006"
-                              Name 370  "r007"
-                              Name 373  "r009"
-                              Name 376  "r010"
-                              Name 380  "r011"
-                              Name 383  "r012"
-                              Name 402  "r013"
-                              Name 405  "r015"
-                              Name 408  "r016"
-                              Name 412  "r017"
-                              Name 415  "r018"
-                              Name 418  "r019"
-                              Name 421  "r020"
-                              Name 424  "r021"
-                              Name 427  "r022"
-                              Name 430  "r023"
-                              Name 433  "r026"
-                              Name 437  "r027"
-                              Name 441  "r028"
-                              Name 444  "r029"
-                              Name 447  "r030"
-                              Name 452  "r031"
-                              Name 457  "r032"
-                              Name 459  "r033"
-                              Name 462  "r035"
-                              Name 466  "r036"
-                              Name 469  "r038"
-                              Name 473  "r039"
-                              Name 476  "r040"
-                              Name 479  "r041"
-                              Name 483  "r039a"
-                              Name 488  "r042"
-                              Name 491  "r043"
-                              Name 494  "r044"
-                              Name 498  "r045"
-                              Name 501  "r046"
-                              Name 505  "r047"
-                              Name 509  "r048"
-                              Name 512  "r049"
-                              Name 516  "r050"
-                              Name 519  "r051"
-                              Name 523  "r052"
-                              Name 527  "r053"
-                              Name 532  "r054"
-                              Name 537  "r055"
-                              Name 540  "r056"
-                              Name 543  "r057"
-                              Name 548  "r058"
-                              Name 551  "r059"
-                              Name 558  "r060"
-                              Name 561  "r061"
-                              Name 566  "r062"
-                              Name 569  "r063"
-                              Name 573  "r064"
-                              Name 576  "r065"
-                              Name 579  "r066"
-                              Name 585  "r000"
-                              Name 591  "r001"
-                              Name 594  "r002"
-                              Name 597  "r003"
-                              Name 601  "r004"
-                              Name 606  "r005"
-                              Name 609  "r006"
-                              Name 612  "r007"
-                              Name 615  "r009"
-                              Name 618  "r010"
-                              Name 622  "r011"
-                              Name 625  "r012"
-                              Name 643  "r013"
-                              Name 646  "r014"
-                              Name 649  "r015"
-                              Name 654  "r016"
-                              Name 658  "r017"
-                              Name 661  "r018"
-                              Name 664  "r019"
-                              Name 667  "r020"
-                              Name 670  "r021"
-                              Name 673  "r022"
-                              Name 676  "r023"
-                              Name 679  "r024"
-                              Name 683  "r025"
-                              Name 687  "r029"
-                              Name 690  "r030"
-                              Name 693  "r031"
-                              Name 698  "r032"
-                              Name 702  "r033"
-                              Name 704  "r034"
-                              Name 707  "r036"
-                              Name 711  "r037"
-                              Name 714  "r039"
-                              Name 718  "r040"
-                              Name 721  "r041"
-                              Name 724  "r042"
-                              Name 728  "r039a"
-                              Name 733  "r039b"
-                              Name 739  "r043"
-                              Name 742  "r044"
-                              Name 745  "r045"
-                              Name 749  "r046"
-                              Name 752  "r047"
-                              Name 756  "r048"
-                              Name 760  "r049"
-                              Name 763  "r050"
-                              Name 767  "r051"
-                              Name 770  "r052"
-                              Name 774  "r053"
-                              Name 778  "r054"
-                              Name 782  "r055"
-                              Name 785  "r056"
-                              Name 788  "r057"
-                              Name 791  "r058"
-                              Name 796  "r059"
-                              Name 799  "r060"
-                              Name 806  "r061"
-                              Name 809  "r062"
-                              Name 814  "r063"
-                              Name 817  "r064"
-                              Name 821  "r065"
-                              Name 824  "r066"
-                              Name 827  "r067"
-                              Name 834  "r000"
-                              Name 840  "r001"
-                              Name 843  "r002"
-                              Name 846  "r003"
-                              Name 850  "r004"
-                              Name 855  "r005"
-                              Name 858  "r006"
-                              Name 861  "r007"
-                              Name 864  "r009"
-                              Name 867  "r010"
-                              Name 871  "r011"
-                              Name 874  "r012"
-                              Name 892  "r013"
-                              Name 895  "r014"
-                              Name 898  "r015"
-                              Name 901  "r016"
-                              Name 904  "r017"
-                              Name 907  "r018"
-                              Name 910  "r019"
-                              Name 913  "r020"
-                              Name 916  "r021"
-                              Name 919  "r022"
-                              Name 922  "r023"
-                              Name 926  "r024"
-                              Name 930  "r025"
-                              Name 941  "r029"
-                              Name 944  "r030"
-                              Name 947  "r031"
-                              Name 952  "r032"
-                              Name 957  "r033"
-                              Name 959  "r034"
-                              Name 962  "r036"
-                              Name 966  "r037"
-                              Name 969  "r039"
-                              Name 973  "r040"
-                              Name 976  "r041"
-                              Name 979  "r042"
-                              Name 983  "r039a"
-                              Name 988  "r043"
-                              Name 991  "r044"
-                              Name 994  "r045"
-                              Name 998  "r046"
-                              Name 1001  "r047"
-                              Name 1005  "r048"
-                              Name 1009  "r049"
-                              Name 1012  "r050"
-                              Name 1016  "r051"
-                              Name 1019  "r052"
-                              Name 1023  "r053"
-                              Name 1027  "r054"
-                              Name 1031  "r055"
-                              Name 1034  "r056"
-                              Name 1037  "r057"
-                              Name 1040  "r058"
-                              Name 1045  "r059"
-                              Name 1048  "r060"
-                              Name 1055  "r061"
-                              Name 1058  "r062"
-                              Name 1063  "r063"
-                              Name 1066  "r064"
-                              Name 1070  "r065"
-                              Name 1073  "r066"
-                              Name 1076  "r067"
-                              Name 1083  "r000"
-                              Name 1088  "r001"
-                              Name 1093  "r003"
-                              Name 1097  "r004"
-                              Name 1100  "r005"
-                              Name 1103  "r006"
-                              Name 1107  "r007"
-                              Name 1117  "r008"
-                              Name 1122  "r009"
-                              Name 1125  "r010"
-                              Name 1128  "r011"
-                              Name 1131  "r012"
-                              Name 1134  "r013"
-                              Name 1137  "r014"
-                              Name 1140  "r015"
-                              Name 1143  "r016"
-                              Name 1146  "r017"
-                              Name 1149  "r018"
-                              Name 1152  "r019"
-                              Name 1155  "R020"
-                              Name 1158  "r021"
-                              Name 1161  "r022"
-                              Name 1171  "r023"
-                              Name 1174  "r025"
-                              Name 1177  "r026"
-                              Name 1181  "r026a"
-                              Name 1186  "r027"
-                              Name 1189  "r028"
-                              Name 1193  "r029"
-                              Name 1196  "r030"
-                              Name 1200  "r031"
-                              Name 1204  "r032"
-                              Name 1208  "r033"
-                              Name 1211  "r034"
-                              Name 1214  "r035"
-                              Name 1217  "r036"
-                              Name 1222  "r037"
-                              Name 1225  "r038"
-                              Name 1232  "r039"
-                              Name 1235  "r049"
-                              Name 1240  "r041"
-                              Name 1243  "r042"
-                              Name 1247  "r043"
-                              Name 1250  "r044"
-                              Name 1255  "r046"
-                              Name 1262  "r000"
-                              Name 1267  "r001"
-                              Name 1272  "r003"
-                              Name 1276  "r004"
-                              Name 1279  "r005"
-                              Name 1282  "r006"
-                              Name 1286  "r007"
-                              Name 1296  "r008"
-                              Name 1301  "r009"
-                              Name 1304  "r010"
-                              Name 1307  "r011"
-                              Name 1310  "r012"
-                              Name 1313  "r013"
-                              Name 1316  "r014"
-                              Name 1319  "r015"
-                              Name 1322  "r016"
-                              Name 1325  "r017"
-                              Name 1328  "r018"
-                              Name 1331  "r019"
-                              Name 1334  "R020"
-                              Name 1337  "r021"
-                              Name 1340  "r022"
-                              Name 1353  "r023"
-                              Name 1356  "r025"
-                              Name 1359  "r026"
-                              Name 1363  "r026a"
-                              Name 1368  "r027"
-                              Name 1371  "r028"
-                              Name 1375  "r029"
-                              Name 1378  "r030"
-                              Name 1382  "r031"
-                              Name 1386  "r032"
-                              Name 1390  "r033"
-                              Name 1393  "r034"
-                              Name 1396  "r035"
-                              Name 1399  "r036"
-                              Name 1404  "r037"
-                              Name 1407  "r038"
-                              Name 1414  "r039"
-                              Name 1417  "r049"
-                              Name 1422  "r041"
-                              Name 1425  "r042"
-                              Name 1429  "r043"
-                              Name 1432  "r044"
-                              Name 1437  "r046"
-                              Name 1444  "r000"
-                              Name 1449  "r001"
-                              Name 1454  "r003"
-                              Name 1458  "r004"
-                              Name 1461  "r005"
-                              Name 1464  "r006"
-                              Name 1468  "r007"
-                              Name 1478  "r008"
-                              Name 1483  "r009"
-                              Name 1486  "r010"
-                              Name 1489  "r011"
-                              Name 1492  "r012"
-                              Name 1495  "r013"
-                              Name 1498  "r014"
-                              Name 1501  "r015"
-                              Name 1504  "r016"
-                              Name 1507  "r017"
-                              Name 1510  "r018"
-                              Name 1513  "r019"
-                              Name 1516  "R020"
-                              Name 1519  "r021"
-                              Name 1522  "r022"
-                              Name 1538  "r023"
-                              Name 1541  "r025"
-                              Name 1544  "r026"
-                              Name 1548  "r026a"
-                              Name 1553  "r027"
-                              Name 1556  "r028"
-                              Name 1560  "r029"
-                              Name 1563  "r030"
-                              Name 1567  "r031"
-                              Name 1571  "r032"
-                              Name 1575  "r033"
-                              Name 1578  "r034"
-                              Name 1581  "r035"
-                              Name 1584  "r036"
-                              Name 1589  "r037"
-                              Name 1592  "r038"
-                              Name 1599  "r039"
-                              Name 1602  "r049"
-                              Name 1607  "r041"
-                              Name 1610  "r042"
-                              Name 1614  "r043"
-                              Name 1617  "r044"
-                              Name 1622  "r046"
-                              Name 1629  "r0"
-                              Name 1633  "r1"
-                              Name 1637  "r2"
-                              Name 1641  "r3"
-                              Name 1645  "r4"
-                              Name 1649  "r5"
-                              Name 1653  "r6"
-                              Name 1657  "r7"
-                              Name 1661  "r8"
-                              Name 1665  "r0"
-                              Name 1669  "r1"
-                              Name 1673  "r2"
-                              Name 1677  "r3"
-                              Name 1681  "r4"
-                              Name 1685  "r5"
-                              Name 1689  "r6"
-                              Name 1693  "r7"
-                              Name 1697  "r8"
-                              Name 1701  "r0"
-                              Name 1705  "r1"
-                              Name 1709  "r2"
-                              Name 1713  "r3"
-                              Name 1717  "r4"
-                              Name 1721  "r5"
-                              Name 1725  "r6"
-                              Name 1729  "r7"
-                              Name 1733  "r8"
-                              Name 1737  "r00"
-                              Name 1741  "r01"
-                              Name 1745  "r02"
-                              Name 1749  "r03"
-                              Name 1753  "r04"
-                              Name 1757  "r05"
-                              Name 1761  "r06"
-                              Name 1765  "r07"
-                              Name 1769  "r08"
-                              Name 1773  "r09"
-                              Name 1777  "r10"
-                              Name 1781  "r11"
-                              Name 1785  "r12"
-                              Name 1789  "r13"
-                              Name 1793  "r14"
-                              Name 1797  "r15"
-                              Name 1801  "r16"
-                              Name 1806  "ps_output"
-                              Name 1813  "@entryPointOutput.color"
-                              Name 1817  "gs_ua"
-                              Name 1818  "gs_ub"
-                              Name 1819  "gs_uc"
-                              Name 1821  "gs_ua2"
-                              Name 1822  "gs_ub2"
-                              Name 1823  "gs_uc2"
-                              Name 1825  "gs_ua3"
-                              Name 1826  "gs_ub3"
-                              Name 1827  "gs_uc3"
-                              Name 1829  "gs_ua4"
-                              Name 1830  "gs_ub4"
-                              Name 1831  "gs_uc4"
-                              Decorate 1813(@entryPointOutput.color) Location 0
+                              Name 222  "r024"
+                              Name 226  "r027"
+                              Name 229  "r028"
+                              Name 232  "r029"
+                              Name 235  "r030"
+                              Name 238  "r031"
+                              Name 241  "r033"
+                              Name 245  "r034"
+                              Name 248  "r036"
+                              Name 251  "r037"
+                              Name 254  "r038"
+                              Name 257  "r039"
+                              Name 261  "r039a"
+                              Name 266  "r040"
+                              Name 269  "r041"
+                              Name 274  "r042"
+                              Name 277  "r043"
+                              Name 281  "r044"
+                              Name 285  "r045"
+                              Name 289  "r046"
+                              Name 292  "r047"
+                              Name 296  "r048"
+                              Name 300  "r049"
+                              Name 303  "r050"
+                              Name 306  "r051"
+                              Name 309  "r052"
+                              Name 312  "r053"
+                              Name 319  "r055"
+                              Name 322  "r056"
+                              Name 327  "r057"
+                              Name 330  "r058"
+                              Name 334  "r059"
+                              Name 337  "r060"
+                              Name 340  "r061"
+                              Name 347  "r000"
+                              Name 353  "r001"
+                              Name 356  "r002"
+                              Name 359  "r003"
+                              Name 363  "r004"
+                              Name 368  "r005"
+                              Name 371  "r006"
+                              Name 374  "r007"
+                              Name 377  "r009"
+                              Name 380  "r010"
+                              Name 384  "r011"
+                              Name 387  "r012"
+                              Name 406  "r013"
+                              Name 409  "r015"
+                              Name 412  "r016"
+                              Name 416  "r017"
+                              Name 419  "r018"
+                              Name 422  "r019"
+                              Name 425  "r020"
+                              Name 428  "r021"
+                              Name 431  "r022"
+                              Name 434  "r023"
+                              Name 437  "r026"
+                              Name 441  "r027"
+                              Name 445  "r028"
+                              Name 448  "r029"
+                              Name 451  "r030"
+                              Name 456  "r031"
+                              Name 461  "r032"
+                              Name 463  "r033"
+                              Name 466  "r035"
+                              Name 470  "r036"
+                              Name 473  "r038"
+                              Name 477  "r039"
+                              Name 480  "r040"
+                              Name 483  "r041"
+                              Name 487  "r039a"
+                              Name 492  "r042"
+                              Name 495  "r043"
+                              Name 498  "r044"
+                              Name 502  "r045"
+                              Name 505  "r046"
+                              Name 509  "r047"
+                              Name 513  "r048"
+                              Name 516  "r049"
+                              Name 520  "r050"
+                              Name 523  "r051"
+                              Name 527  "r052"
+                              Name 531  "r053"
+                              Name 536  "r054"
+                              Name 541  "r055"
+                              Name 544  "r056"
+                              Name 547  "r057"
+                              Name 552  "r058"
+                              Name 555  "r059"
+                              Name 562  "r060"
+                              Name 565  "r061"
+                              Name 570  "r062"
+                              Name 573  "r063"
+                              Name 577  "r064"
+                              Name 580  "r065"
+                              Name 583  "r066"
+                              Name 589  "r000"
+                              Name 595  "r001"
+                              Name 598  "r002"
+                              Name 601  "r003"
+                              Name 605  "r004"
+                              Name 610  "r005"
+                              Name 613  "r006"
+                              Name 616  "r007"
+                              Name 619  "r009"
+                              Name 622  "r010"
+                              Name 626  "r011"
+                              Name 629  "r012"
+                              Name 647  "r013"
+                              Name 650  "r014"
+                              Name 653  "r015"
+                              Name 658  "r016"
+                              Name 662  "r017"
+                              Name 665  "r018"
+                              Name 668  "r019"
+                              Name 671  "r020"
+                              Name 674  "r021"
+                              Name 677  "r022"
+                              Name 680  "r023"
+                              Name 683  "r024"
+                              Name 687  "r025"
+                              Name 691  "r029"
+                              Name 694  "r030"
+                              Name 697  "r031"
+                              Name 702  "r032"
+                              Name 706  "r033"
+                              Name 708  "r034"
+                              Name 711  "r036"
+                              Name 715  "r037"
+                              Name 718  "r039"
+                              Name 722  "r040"
+                              Name 725  "r041"
+                              Name 728  "r042"
+                              Name 732  "r039a"
+                              Name 737  "r039b"
+                              Name 743  "r043"
+                              Name 746  "r044"
+                              Name 749  "r045"
+                              Name 753  "r046"
+                              Name 756  "r047"
+                              Name 760  "r048"
+                              Name 764  "r049"
+                              Name 767  "r050"
+                              Name 771  "r051"
+                              Name 774  "r052"
+                              Name 778  "r053"
+                              Name 782  "r054"
+                              Name 786  "r055"
+                              Name 789  "r056"
+                              Name 792  "r057"
+                              Name 795  "r058"
+                              Name 800  "r059"
+                              Name 803  "r060"
+                              Name 810  "r061"
+                              Name 813  "r062"
+                              Name 818  "r063"
+                              Name 821  "r064"
+                              Name 825  "r065"
+                              Name 828  "r066"
+                              Name 831  "r067"
+                              Name 838  "r000"
+                              Name 844  "r001"
+                              Name 847  "r002"
+                              Name 850  "r003"
+                              Name 854  "r004"
+                              Name 859  "r005"
+                              Name 862  "r006"
+                              Name 865  "r007"
+                              Name 868  "r009"
+                              Name 871  "r010"
+                              Name 875  "r011"
+                              Name 878  "r012"
+                              Name 896  "r013"
+                              Name 899  "r014"
+                              Name 902  "r015"
+                              Name 905  "r016"
+                              Name 908  "r017"
+                              Name 911  "r018"
+                              Name 914  "r019"
+                              Name 917  "r020"
+                              Name 920  "r021"
+                              Name 923  "r022"
+                              Name 926  "r023"
+                              Name 930  "r024"
+                              Name 934  "r025"
+                              Name 945  "r029"
+                              Name 948  "r030"
+                              Name 951  "r031"
+                              Name 956  "r032"
+                              Name 961  "r033"
+                              Name 963  "r034"
+                              Name 966  "r036"
+                              Name 970  "r037"
+                              Name 973  "r039"
+                              Name 977  "r040"
+                              Name 980  "r041"
+                              Name 983  "r042"
+                              Name 987  "r039a"
+                              Name 992  "r043"
+                              Name 995  "r044"
+                              Name 998  "r045"
+                              Name 1002  "r046"
+                              Name 1005  "r047"
+                              Name 1009  "r048"
+                              Name 1013  "r049"
+                              Name 1016  "r050"
+                              Name 1020  "r051"
+                              Name 1023  "r052"
+                              Name 1027  "r053"
+                              Name 1031  "r054"
+                              Name 1035  "r055"
+                              Name 1038  "r056"
+                              Name 1041  "r057"
+                              Name 1044  "r058"
+                              Name 1049  "r059"
+                              Name 1052  "r060"
+                              Name 1059  "r061"
+                              Name 1062  "r062"
+                              Name 1067  "r063"
+                              Name 1070  "r064"
+                              Name 1074  "r065"
+                              Name 1077  "r066"
+                              Name 1080  "r067"
+                              Name 1087  "r000"
+                              Name 1092  "r001"
+                              Name 1097  "r003"
+                              Name 1101  "r004"
+                              Name 1104  "r005"
+                              Name 1107  "r006"
+                              Name 1111  "r007"
+                              Name 1121  "r008"
+                              Name 1126  "r009"
+                              Name 1129  "r010"
+                              Name 1132  "r011"
+                              Name 1135  "r012"
+                              Name 1138  "r013"
+                              Name 1141  "r014"
+                              Name 1144  "r015"
+                              Name 1147  "r016"
+                              Name 1150  "r017"
+                              Name 1153  "r018"
+                              Name 1156  "r019"
+                              Name 1159  "R020"
+                              Name 1162  "r021"
+                              Name 1165  "r022"
+                              Name 1175  "r023"
+                              Name 1178  "r025"
+                              Name 1181  "r026"
+                              Name 1185  "r026a"
+                              Name 1190  "r027"
+                              Name 1193  "r028"
+                              Name 1197  "r029"
+                              Name 1200  "r030"
+                              Name 1204  "r031"
+                              Name 1208  "r032"
+                              Name 1212  "r033"
+                              Name 1215  "r034"
+                              Name 1218  "r035"
+                              Name 1221  "r036"
+                              Name 1226  "r037"
+                              Name 1229  "r038"
+                              Name 1236  "r039"
+                              Name 1239  "r049"
+                              Name 1244  "r041"
+                              Name 1247  "r042"
+                              Name 1251  "r043"
+                              Name 1254  "r044"
+                              Name 1259  "r046"
+                              Name 1266  "r000"
+                              Name 1271  "r001"
+                              Name 1276  "r003"
+                              Name 1280  "r004"
+                              Name 1283  "r005"
+                              Name 1286  "r006"
+                              Name 1290  "r007"
+                              Name 1300  "r008"
+                              Name 1305  "r009"
+                              Name 1308  "r010"
+                              Name 1311  "r011"
+                              Name 1314  "r012"
+                              Name 1317  "r013"
+                              Name 1320  "r014"
+                              Name 1323  "r015"
+                              Name 1326  "r016"
+                              Name 1329  "r017"
+                              Name 1332  "r018"
+                              Name 1335  "r019"
+                              Name 1338  "R020"
+                              Name 1341  "r021"
+                              Name 1344  "r022"
+                              Name 1357  "r023"
+                              Name 1360  "r025"
+                              Name 1363  "r026"
+                              Name 1367  "r026a"
+                              Name 1372  "r027"
+                              Name 1375  "r028"
+                              Name 1379  "r029"
+                              Name 1382  "r030"
+                              Name 1386  "r031"
+                              Name 1390  "r032"
+                              Name 1394  "r033"
+                              Name 1397  "r034"
+                              Name 1400  "r035"
+                              Name 1403  "r036"
+                              Name 1408  "r037"
+                              Name 1411  "r038"
+                              Name 1418  "r039"
+                              Name 1421  "r049"
+                              Name 1426  "r041"
+                              Name 1429  "r042"
+                              Name 1433  "r043"
+                              Name 1436  "r044"
+                              Name 1441  "r046"
+                              Name 1448  "r000"
+                              Name 1453  "r001"
+                              Name 1458  "r003"
+                              Name 1462  "r004"
+                              Name 1465  "r005"
+                              Name 1468  "r006"
+                              Name 1472  "r007"
+                              Name 1482  "r008"
+                              Name 1487  "r009"
+                              Name 1490  "r010"
+                              Name 1493  "r011"
+                              Name 1496  "r012"
+                              Name 1499  "r013"
+                              Name 1502  "r014"
+                              Name 1505  "r015"
+                              Name 1508  "r016"
+                              Name 1511  "r017"
+                              Name 1514  "r018"
+                              Name 1517  "r019"
+                              Name 1520  "R020"
+                              Name 1523  "r021"
+                              Name 1526  "r022"
+                              Name 1542  "r023"
+                              Name 1545  "r025"
+                              Name 1548  "r026"
+                              Name 1552  "r026a"
+                              Name 1557  "r027"
+                              Name 1560  "r028"
+                              Name 1564  "r029"
+                              Name 1567  "r030"
+                              Name 1571  "r031"
+                              Name 1575  "r032"
+                              Name 1579  "r033"
+                              Name 1582  "r034"
+                              Name 1585  "r035"
+                              Name 1588  "r036"
+                              Name 1593  "r037"
+                              Name 1596  "r038"
+                              Name 1603  "r039"
+                              Name 1606  "r049"
+                              Name 1611  "r041"
+                              Name 1614  "r042"
+                              Name 1618  "r043"
+                              Name 1621  "r044"
+                              Name 1626  "r046"
+                              Name 1633  "r0"
+                              Name 1637  "r1"
+                              Name 1641  "r2"
+                              Name 1645  "r3"
+                              Name 1649  "r4"
+                              Name 1653  "r5"
+                              Name 1657  "r6"
+                              Name 1661  "r7"
+                              Name 1665  "r8"
+                              Name 1669  "r0"
+                              Name 1673  "r1"
+                              Name 1677  "r2"
+                              Name 1681  "r3"
+                              Name 1685  "r4"
+                              Name 1689  "r5"
+                              Name 1693  "r6"
+                              Name 1697  "r7"
+                              Name 1701  "r8"
+                              Name 1705  "r0"
+                              Name 1709  "r1"
+                              Name 1713  "r2"
+                              Name 1717  "r3"
+                              Name 1721  "r4"
+                              Name 1725  "r5"
+                              Name 1729  "r6"
+                              Name 1733  "r7"
+                              Name 1737  "r8"
+                              Name 1741  "r00"
+                              Name 1745  "r01"
+                              Name 1749  "r02"
+                              Name 1753  "r03"
+                              Name 1757  "r04"
+                              Name 1761  "r05"
+                              Name 1765  "r06"
+                              Name 1769  "r07"
+                              Name 1773  "r08"
+                              Name 1777  "r09"
+                              Name 1781  "r10"
+                              Name 1785  "r11"
+                              Name 1789  "r12"
+                              Name 1793  "r13"
+                              Name 1797  "r14"
+                              Name 1801  "r15"
+                              Name 1805  "r16"
+                              Name 1810  "ps_output"
+                              Name 1817  "@entryPointOutput.color"
+                              Name 1821  "gs_ua"
+                              Name 1822  "gs_ub"
+                              Name 1823  "gs_uc"
+                              Name 1825  "gs_ua2"
+                              Name 1826  "gs_ub2"
+                              Name 1827  "gs_uc2"
+                              Name 1829  "gs_ua3"
+                              Name 1830  "gs_ub3"
+                              Name 1831  "gs_uc3"
+                              Name 1833  "gs_ua4"
+                              Name 1834  "gs_ub4"
+                              Name 1835  "gs_uc4"
+                              Decorate 1817(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6208,91 +6225,91 @@
              141:    6(float) Constant 0
              187:     10(int) Constant 0
              199:     10(int) Constant 7
-             268:    6(float) Constant 1050288283
-             289:    6(float) Constant 1065353216
-             293:     10(int) Constant 2
-             345:             TypeVector 137(bool) 2
-             346:   26(fvec2) ConstantComposite 141 141
-             362:             TypeVector 10(int) 2
-             363:             TypePointer Function 362(ivec2)
-             395:      8(int) Constant 0
-             396:   28(ivec2) ConstantComposite 395 395
-             409:     10(int) Constant 3
-             410:  362(ivec2) ConstantComposite 199 409
-             453:      8(int) Constant 7
-             454:      8(int) Constant 8
-             455:   28(ivec2) ConstantComposite 453 454
-             472:             TypePointer Function 345(bvec2)
-             530:    6(float) Constant 1073741824
-             533:      8(int) Constant 1
-             534:      8(int) Constant 2
-             535:   28(ivec2) ConstantComposite 533 534
-             582:   26(fvec2) ConstantComposite 289 530
-             587:             TypeVector 137(bool) 3
-             588:   38(fvec3) ConstantComposite 141 141 141
-             604:             TypeVector 10(int) 3
-             605:             TypePointer Function 604(ivec3)
-             637:   40(ivec3) ConstantComposite 395 395 395
-             650:      8(int) Constant 3
-             651:      8(int) Constant 5
-             652:   40(ivec3) ConstantComposite 453 650 651
-             699:      8(int) Constant 4
-             700:   40(ivec3) ConstantComposite 534 650 699
-             717:             TypePointer Function 587(bvec3)
-             736:    6(float) Constant 1050253722
-             783:   40(ivec3) ConstantComposite 533 534 650
-             830:    6(float) Constant 1077936128
-             831:   38(fvec3) ConstantComposite 289 530 830
-             836:             TypeVector 137(bool) 4
-             837:   50(fvec4) ConstantComposite 141 141 141 141
-             853:             TypeVector 10(int) 4
-             854:             TypePointer Function 853(ivec4)
-             886:   52(ivec4) ConstantComposite 395 395 395 395
-             899:   52(ivec4) ConstantComposite 453 650 651 534
-             953:      8(int) Constant 9
-             954:      8(int) Constant 10
-             955:   52(ivec4) ConstantComposite 453 454 953 954
-             972:             TypePointer Function 836(bvec4)
-            1032:   52(ivec4) ConstantComposite 533 534 650 699
-            1079:    6(float) Constant 1082130432
-            1080:   50(fvec4) ConstantComposite 289 530 830 1079
-            1085:             TypeMatrix 345(bvec2) 2
-            1111:          62 ConstantComposite 346 346
-            1258:   26(fvec2) ConstantComposite 530 530
-            1259:          62 ConstantComposite 1258 1258
-            1264:             TypeMatrix 587(bvec3) 3
-            1290:          70 ConstantComposite 588 588 588
-            1440:   38(fvec3) ConstantComposite 830 830 830
-            1441:          70 ConstantComposite 1440 1440 1440
-            1446:             TypeMatrix 836(bvec4) 4
-            1472:          78 ConstantComposite 837 837 837 837
-            1625:   50(fvec4) ConstantComposite 1079 1079 1079 1079
-            1626:          78 ConstantComposite 1625 1625 1625 1625
-            1805:             TypePointer Function 133(PS_OUTPUT)
-            1807:   50(fvec4) ConstantComposite 289 289 289 289
-            1812:             TypePointer Output 50(fvec4)
-1813(@entryPointOutput.color):   1812(ptr) Variable Output
-            1816:             TypePointer Workgroup 8(int)
-     1817(gs_ua):   1816(ptr) Variable Workgroup
-     1818(gs_ub):   1816(ptr) Variable Workgroup
-     1819(gs_uc):   1816(ptr) Variable Workgroup
-            1820:             TypePointer Workgroup 28(ivec2)
-    1821(gs_ua2):   1820(ptr) Variable Workgroup
-    1822(gs_ub2):   1820(ptr) Variable Workgroup
-    1823(gs_uc2):   1820(ptr) Variable Workgroup
-            1824:             TypePointer Workgroup 40(ivec3)
-    1825(gs_ua3):   1824(ptr) Variable Workgroup
-    1826(gs_ub3):   1824(ptr) Variable Workgroup
-    1827(gs_uc3):   1824(ptr) Variable Workgroup
-            1828:             TypePointer Workgroup 52(ivec4)
-    1829(gs_ua4):   1828(ptr) Variable Workgroup
-    1830(gs_ub4):   1828(ptr) Variable Workgroup
-    1831(gs_uc4):   1828(ptr) Variable Workgroup
+             272:    6(float) Constant 1050288283
+             293:    6(float) Constant 1065353216
+             297:     10(int) Constant 2
+             349:             TypeVector 137(bool) 2
+             350:   26(fvec2) ConstantComposite 141 141
+             366:             TypeVector 10(int) 2
+             367:             TypePointer Function 366(ivec2)
+             399:      8(int) Constant 0
+             400:   28(ivec2) ConstantComposite 399 399
+             413:     10(int) Constant 3
+             414:  366(ivec2) ConstantComposite 199 413
+             457:      8(int) Constant 7
+             458:      8(int) Constant 8
+             459:   28(ivec2) ConstantComposite 457 458
+             476:             TypePointer Function 349(bvec2)
+             534:    6(float) Constant 1073741824
+             537:      8(int) Constant 1
+             538:      8(int) Constant 2
+             539:   28(ivec2) ConstantComposite 537 538
+             586:   26(fvec2) ConstantComposite 293 534
+             591:             TypeVector 137(bool) 3
+             592:   38(fvec3) ConstantComposite 141 141 141
+             608:             TypeVector 10(int) 3
+             609:             TypePointer Function 608(ivec3)
+             641:   40(ivec3) ConstantComposite 399 399 399
+             654:      8(int) Constant 3
+             655:      8(int) Constant 5
+             656:   40(ivec3) ConstantComposite 457 654 655
+             703:      8(int) Constant 4
+             704:   40(ivec3) ConstantComposite 538 654 703
+             721:             TypePointer Function 591(bvec3)
+             740:    6(float) Constant 1050253722
+             787:   40(ivec3) ConstantComposite 537 538 654
+             834:    6(float) Constant 1077936128
+             835:   38(fvec3) ConstantComposite 293 534 834
+             840:             TypeVector 137(bool) 4
+             841:   50(fvec4) ConstantComposite 141 141 141 141
+             857:             TypeVector 10(int) 4
+             858:             TypePointer Function 857(ivec4)
+             890:   52(ivec4) ConstantComposite 399 399 399 399
+             903:   52(ivec4) ConstantComposite 457 654 655 538
+             957:      8(int) Constant 9
+             958:      8(int) Constant 10
+             959:   52(ivec4) ConstantComposite 457 458 957 958
+             976:             TypePointer Function 840(bvec4)
+            1036:   52(ivec4) ConstantComposite 537 538 654 703
+            1083:    6(float) Constant 1082130432
+            1084:   50(fvec4) ConstantComposite 293 534 834 1083
+            1089:             TypeMatrix 349(bvec2) 2
+            1115:          62 ConstantComposite 350 350
+            1262:   26(fvec2) ConstantComposite 534 534
+            1263:          62 ConstantComposite 1262 1262
+            1268:             TypeMatrix 591(bvec3) 3
+            1294:          70 ConstantComposite 592 592 592
+            1444:   38(fvec3) ConstantComposite 834 834 834
+            1445:          70 ConstantComposite 1444 1444 1444
+            1450:             TypeMatrix 840(bvec4) 4
+            1476:          78 ConstantComposite 841 841 841 841
+            1629:   50(fvec4) ConstantComposite 1083 1083 1083 1083
+            1630:          78 ConstantComposite 1629 1629 1629 1629
+            1809:             TypePointer Function 133(PS_OUTPUT)
+            1811:   50(fvec4) ConstantComposite 293 293 293 293
+            1816:             TypePointer Output 50(fvec4)
+1817(@entryPointOutput.color):   1816(ptr) Variable Output
+            1820:             TypePointer Workgroup 8(int)
+     1821(gs_ua):   1820(ptr) Variable Workgroup
+     1822(gs_ub):   1820(ptr) Variable Workgroup
+     1823(gs_uc):   1820(ptr) Variable Workgroup
+            1824:             TypePointer Workgroup 28(ivec2)
+    1825(gs_ua2):   1824(ptr) Variable Workgroup
+    1826(gs_ub2):   1824(ptr) Variable Workgroup
+    1827(gs_uc2):   1824(ptr) Variable Workgroup
+            1828:             TypePointer Workgroup 40(ivec3)
+    1829(gs_ua3):   1828(ptr) Variable Workgroup
+    1830(gs_ub3):   1828(ptr) Variable Workgroup
+    1831(gs_uc3):   1828(ptr) Variable Workgroup
+            1832:             TypePointer Workgroup 52(ivec4)
+    1833(gs_ua4):   1832(ptr) Variable Workgroup
+    1834(gs_ub4):   1832(ptr) Variable Workgroup
+    1835(gs_uc4):   1832(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
-            1814:133(PS_OUTPUT) FunctionCall 135(@main()
-            1815:   50(fvec4) CompositeExtract 1814 0
-                              Store 1813(@entryPointOutput.color) 1815
+            1818:133(PS_OUTPUT) FunctionCall 135(@main()
+            1819:   50(fvec4) CompositeExtract 1818 0
+                              Store 1817(@entryPointOutput.color) 1819
                               Return
                               FunctionEnd
 18(PixelShaderFunctionS(f1;f1;f1;u1;i1;):    6(float) Function None 12
@@ -6324,39 +6341,40 @@
        213(r021):      7(ptr) Variable Function
        216(r022):      7(ptr) Variable Function
        219(r023):      7(ptr) Variable Function
-       222(r027):      7(ptr) Variable Function
-       225(r028):      7(ptr) Variable Function
-       228(r029):      9(ptr) Variable Function
-       231(r030):      9(ptr) Variable Function
-       234(r031):      7(ptr) Variable Function
-       237(r033):      7(ptr) Variable Function
-       241(r034):      7(ptr) Variable Function
-       244(r036):      7(ptr) Variable Function
-       247(r037):    138(ptr) Variable Function
-       250(r038):    138(ptr) Variable Function
-       253(r039):      7(ptr) Variable Function
-      257(r039a):      7(ptr) Variable Function
-       262(r040):      7(ptr) Variable Function
-       265(r041):      7(ptr) Variable Function
-       270(r042):      7(ptr) Variable Function
-       273(r043):      7(ptr) Variable Function
-       277(r044):      7(ptr) Variable Function
-       281(r045):      7(ptr) Variable Function
-       285(r046):      7(ptr) Variable Function
-       288(r047):      7(ptr) Variable Function
-       292(r048):      9(ptr) Variable Function
-       296(r049):      7(ptr) Variable Function
-       299(r050):      7(ptr) Variable Function
-       302(r051):      7(ptr) Variable Function
-       305(r052):      7(ptr) Variable Function
-       308(r053):      7(ptr) Variable Function
-       315(r055):      7(ptr) Variable Function
-       318(r056):      7(ptr) Variable Function
-       323(r057):      7(ptr) Variable Function
-       326(r058):      7(ptr) Variable Function
-       330(r059):      7(ptr) Variable Function
-       333(r060):      7(ptr) Variable Function
-       336(r061):      7(ptr) Variable Function
+       222(r024):      7(ptr) Variable Function
+       226(r027):      7(ptr) Variable Function
+       229(r028):      7(ptr) Variable Function
+       232(r029):      9(ptr) Variable Function
+       235(r030):      9(ptr) Variable Function
+       238(r031):      7(ptr) Variable Function
+       241(r033):      7(ptr) Variable Function
+       245(r034):      7(ptr) Variable Function
+       248(r036):      7(ptr) Variable Function
+       251(r037):    138(ptr) Variable Function
+       254(r038):    138(ptr) Variable Function
+       257(r039):      7(ptr) Variable Function
+      261(r039a):      7(ptr) Variable Function
+       266(r040):      7(ptr) Variable Function
+       269(r041):      7(ptr) Variable Function
+       274(r042):      7(ptr) Variable Function
+       277(r043):      7(ptr) Variable Function
+       281(r044):      7(ptr) Variable Function
+       285(r045):      7(ptr) Variable Function
+       289(r046):      7(ptr) Variable Function
+       292(r047):      7(ptr) Variable Function
+       296(r048):      9(ptr) Variable Function
+       300(r049):      7(ptr) Variable Function
+       303(r050):      7(ptr) Variable Function
+       306(r051):      7(ptr) Variable Function
+       309(r052):      7(ptr) Variable Function
+       312(r053):      7(ptr) Variable Function
+       319(r055):      7(ptr) Variable Function
+       322(r056):      7(ptr) Variable Function
+       327(r057):      7(ptr) Variable Function
+       330(r058):      7(ptr) Variable Function
+       334(r059):      7(ptr) Variable Function
+       337(r060):      7(ptr) Variable Function
+       340(r061):      7(ptr) Variable Function
              140:    6(float) Load 13(inF0)
              142:   137(bool) FOrdNotEqual 140 141
              143:   137(bool) All 142
@@ -6442,121 +6460,125 @@
              221:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 220
                               Store 219(r023) 221
              223:    6(float) Load 13(inF0)
-             224:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 223
-                              Store 222(r027) 224
-             226:    6(float) Load 13(inF0)
-             227:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 226
-                              Store 225(r028) 227
-             229:     10(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 199
-             230:      8(int) Bitcast 229
-                              Store 228(r029) 230
-             232:     10(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 199
-             233:      8(int) Bitcast 232
-                              Store 231(r030) 233
-             235:    6(float) Load 13(inF0)
-             236:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 235
-                              Store 234(r031) 236
-             238:    6(float) Load 13(inF0)
-             239:    6(float) Load 14(inF1)
-             240:    6(float) FMod 238 239
-                              Store 237(r033) 240
+             224:    6(float) Load 14(inF1)
+             225:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 223 224
+                              Store 222(r024) 225
+             227:    6(float) Load 13(inF0)
+             228:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 227
+                              Store 226(r027) 228
+             230:    6(float) Load 13(inF0)
+             231:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 230
+                              Store 229(r028) 231
+             233:     10(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 199
+             234:      8(int) Bitcast 233
+                              Store 232(r029) 234
+             236:     10(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 199
+             237:      8(int) Bitcast 236
+                              Store 235(r030) 237
+             239:    6(float) Load 13(inF0)
+             240:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 239
+                              Store 238(r031) 240
              242:    6(float) Load 13(inF0)
-             243:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 242
-                              Store 241(r034) 243
-             245:    6(float) Load 13(inF0)
-             246:    6(float) Fwidth 245
-                              Store 244(r036) 246
-             248:    6(float) Load 13(inF0)
-             249:   137(bool) IsInf 248
-                              Store 247(r037) 249
-             251:    6(float) Load 13(inF0)
-             252:   137(bool) IsNan 251
-                              Store 250(r038) 252
-             254:    6(float) Load 13(inF0)
-             255:    6(float) Load 14(inF1)
-             256:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 254 255
-                              Store 253(r039) 256
+             243:    6(float) Load 14(inF1)
+             244:    6(float) FMod 242 243
+                              Store 241(r033) 244
+             246:    6(float) Load 13(inF0)
+             247:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 246
+                              Store 245(r034) 247
+             249:    6(float) Load 13(inF0)
+             250:    6(float) Fwidth 249
+                              Store 248(r036) 250
+             252:    6(float) Load 13(inF0)
+             253:   137(bool) IsInf 252
+                              Store 251(r037) 253
+             255:    6(float) Load 13(inF0)
+             256:   137(bool) IsNan 255
+                              Store 254(r038) 256
              258:    6(float) Load 13(inF0)
              259:    6(float) Load 14(inF1)
-             260:    6(float) Load 15(inF2)
-             261:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 258 259 260
-                              Store 257(r039a) 261
-             263:    6(float) Load 13(inF0)
-             264:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 263
-                              Store 262(r040) 264
-             266:    6(float) Load 13(inF0)
-             267:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 266
-             269:    6(float) FMul 267 268
-                              Store 265(r041) 269
-             271:    6(float) Load 13(inF0)
-             272:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 271
-                              Store 270(r042) 272
-             274:    6(float) Load 13(inF0)
-             275:    6(float) Load 14(inF1)
-             276:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 274 275
-                              Store 273(r043) 276
+             260:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 258 259
+                              Store 257(r039) 260
+             262:    6(float) Load 13(inF0)
+             263:    6(float) Load 14(inF1)
+             264:    6(float) Load 15(inF2)
+             265:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 262 263 264
+                              Store 261(r039a) 265
+             267:    6(float) Load 13(inF0)
+             268:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 267
+                              Store 266(r040) 268
+             270:    6(float) Load 13(inF0)
+             271:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 270
+             273:    6(float) FMul 271 272
+                              Store 269(r041) 273
+             275:    6(float) Load 13(inF0)
+             276:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 275
+                              Store 274(r042) 276
              278:    6(float) Load 13(inF0)
              279:    6(float) Load 14(inF1)
-             280:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 278 279
-                              Store 277(r044) 280
+             280:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 278 279
+                              Store 277(r043) 280
              282:    6(float) Load 13(inF0)
              283:    6(float) Load 14(inF1)
-             284:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 282 283
-                              Store 281(r045) 284
+             284:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 282 283
+                              Store 281(r044) 284
              286:    6(float) Load 13(inF0)
-             287:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 286
-                              Store 285(r046) 287
+             287:    6(float) Load 14(inF1)
+             288:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 286 287
+                              Store 285(r045) 288
              290:    6(float) Load 13(inF0)
-             291:    6(float) FDiv 289 290
-                              Store 288(r047) 291
-             294:     10(int) BitReverse 293
-             295:      8(int) Bitcast 294
-                              Store 292(r048) 295
-             297:    6(float) Load 13(inF0)
-             298:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 297
-                              Store 296(r049) 298
-             300:    6(float) Load 13(inF0)
-             301:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 300
-                              Store 299(r050) 301
-             303:    6(float) Load 13(inF0)
-             304:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 303 141 289
-                              Store 302(r051) 304
-             306:    6(float) Load 13(inF0)
-             307:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 306
-                              Store 305(r052) 307
-             309:    6(float) Load 13(inF0)
-             310:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 309
-                              Store 308(r053) 310
-             311:    6(float) Load 13(inF0)
-             312:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 311
-                              Store 14(inF1) 312
+             291:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 290
+                              Store 289(r046) 291
+             294:    6(float) Load 13(inF0)
+             295:    6(float) FDiv 293 294
+                              Store 292(r047) 295
+             298:     10(int) BitReverse 297
+             299:      8(int) Bitcast 298
+                              Store 296(r048) 299
+             301:    6(float) Load 13(inF0)
+             302:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 301
+                              Store 300(r049) 302
+             304:    6(float) Load 13(inF0)
+             305:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 304
+                              Store 303(r050) 305
+             307:    6(float) Load 13(inF0)
+             308:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 307 141 293
+                              Store 306(r051) 308
+             310:    6(float) Load 13(inF0)
+             311:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 310
+                              Store 309(r052) 311
              313:    6(float) Load 13(inF0)
-             314:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 313
-                              Store 15(inF2) 314
-             316:    6(float) Load 13(inF0)
-             317:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 316
-                              Store 315(r055) 317
-             319:    6(float) Load 13(inF0)
-             320:    6(float) Load 14(inF1)
-             321:    6(float) Load 15(inF2)
-             322:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 319 320 321
-                              Store 318(r056) 322
-             324:    6(float) Load 13(inF0)
-             325:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 324
-                              Store 323(r057) 325
-             327:    6(float) Load 13(inF0)
-             328:    6(float) Load 14(inF1)
-             329:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 327 328
-                              Store 326(r058) 329
+             314:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 313
+                              Store 312(r053) 314
+             315:    6(float) Load 13(inF0)
+             316:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 315
+                              Store 14(inF1) 316
+             317:    6(float) Load 13(inF0)
+             318:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 317
+                              Store 15(inF2) 318
+             320:    6(float) Load 13(inF0)
+             321:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 320
+                              Store 319(r055) 321
+             323:    6(float) Load 13(inF0)
+             324:    6(float) Load 14(inF1)
+             325:    6(float) Load 15(inF2)
+             326:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 323 324 325
+                              Store 322(r056) 326
+             328:    6(float) Load 13(inF0)
+             329:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 328
+                              Store 327(r057) 329
              331:    6(float) Load 13(inF0)
-             332:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 331
-                              Store 330(r059) 332
-             334:    6(float) Load 13(inF0)
-             335:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 334
-                              Store 333(r060) 335
-             337:    6(float) Load 13(inF0)
-             338:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 337
-                              Store 336(r061) 338
+             332:    6(float) Load 14(inF1)
+             333:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 331 332
+                              Store 330(r058) 333
+             335:    6(float) Load 13(inF0)
+             336:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 335
+                              Store 334(r059) 336
+             338:    6(float) Load 13(inF0)
+             339:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 338
+                              Store 337(r060) 339
+             341:    6(float) Load 13(inF0)
+             342:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 341
+                              Store 340(r061) 342
                               ReturnValue 141
                               FunctionEnd
 24(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 20
@@ -6573,298 +6595,298 @@
         34(inU0):     29(ptr) FunctionParameter
         35(inU1):     29(ptr) FunctionParameter
               37:             Label
-       343(r000):    138(ptr) Variable Function
-       349(r001):     27(ptr) Variable Function
-       352(r002):     27(ptr) Variable Function
-       355(r003):    138(ptr) Variable Function
-       359(r004):     27(ptr) Variable Function
-       364(r005):    363(ptr) Variable Function
-       367(r006):     29(ptr) Variable Function
-       370(r007):     27(ptr) Variable Function
-       373(r009):     27(ptr) Variable Function
-       376(r010):     27(ptr) Variable Function
-       380(r011):     27(ptr) Variable Function
-       383(r012):     27(ptr) Variable Function
-       402(r013):     27(ptr) Variable Function
-       405(r015):     27(ptr) Variable Function
-       408(r016):    363(ptr) Variable Function
-       412(r017):     27(ptr) Variable Function
-       415(r018):     27(ptr) Variable Function
-       418(r019):     27(ptr) Variable Function
-       421(r020):     27(ptr) Variable Function
-       424(r021):     27(ptr) Variable Function
-       427(r022):     27(ptr) Variable Function
-       430(r023):     27(ptr) Variable Function
-       433(r026):      7(ptr) Variable Function
-       437(r027):      7(ptr) Variable Function
-       441(r028):     27(ptr) Variable Function
-       444(r029):     27(ptr) Variable Function
-       447(r030):     27(ptr) Variable Function
-       452(r031):     29(ptr) Variable Function
-       457(r032):     29(ptr) Variable Function
-       459(r033):     27(ptr) Variable Function
-       462(r035):     27(ptr) Variable Function
-       466(r036):     27(ptr) Variable Function
-       469(r038):     27(ptr) Variable Function
-       473(r039):    472(ptr) Variable Function
-       476(r040):    472(ptr) Variable Function
-       479(r041):     27(ptr) Variable Function
-      483(r039a):     27(ptr) Variable Function
-       488(r042):      7(ptr) Variable Function
-       491(r043):     27(ptr) Variable Function
-       494(r044):     27(ptr) Variable Function
-       498(r045):     27(ptr) Variable Function
-       501(r046):     27(ptr) Variable Function
-       505(r047):     27(ptr) Variable Function
-       509(r048):     27(ptr) Variable Function
-       512(r049):     27(ptr) Variable Function
-       516(r050):     27(ptr) Variable Function
-       519(r051):     27(ptr) Variable Function
-       523(r052):     27(ptr) Variable Function
-       527(r053):     27(ptr) Variable Function
-       532(r054):     29(ptr) Variable Function
-       537(r055):     27(ptr) Variable Function
-       540(r056):     27(ptr) Variable Function
-       543(r057):     27(ptr) Variable Function
-       548(r058):     27(ptr) Variable Function
-       551(r059):     27(ptr) Variable Function
-       558(r060):     27(ptr) Variable Function
-       561(r061):     27(ptr) Variable Function
-       566(r062):     27(ptr) Variable Function
-       569(r063):     27(ptr) Variable Function
-       573(r064):     27(ptr) Variable Function
-       576(r065):     27(ptr) Variable Function
-       579(r066):     27(ptr) Variable Function
-             344:   26(fvec2) Load 31(inF0)
-             347:  345(bvec2) FOrdNotEqual 344 346
-             348:   137(bool) All 347
-                              Store 343(r000) 348
-             350:   26(fvec2) Load 31(inF0)
-             351:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 350
-                              Store 349(r001) 351
-             353:   26(fvec2) Load 31(inF0)
-             354:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 353
-                              Store 352(r002) 354
-             356:   26(fvec2) Load 31(inF0)
-             357:  345(bvec2) FOrdNotEqual 356 346
-             358:   137(bool) Any 357
-                              Store 355(r003) 358
+       347(r000):    138(ptr) Variable Function
+       353(r001):     27(ptr) Variable Function
+       356(r002):     27(ptr) Variable Function
+       359(r003):    138(ptr) Variable Function
+       363(r004):     27(ptr) Variable Function
+       368(r005):    367(ptr) Variable Function
+       371(r006):     29(ptr) Variable Function
+       374(r007):     27(ptr) Variable Function
+       377(r009):     27(ptr) Variable Function
+       380(r010):     27(ptr) Variable Function
+       384(r011):     27(ptr) Variable Function
+       387(r012):     27(ptr) Variable Function
+       406(r013):     27(ptr) Variable Function
+       409(r015):     27(ptr) Variable Function
+       412(r016):    367(ptr) Variable Function
+       416(r017):     27(ptr) Variable Function
+       419(r018):     27(ptr) Variable Function
+       422(r019):     27(ptr) Variable Function
+       425(r020):     27(ptr) Variable Function
+       428(r021):     27(ptr) Variable Function
+       431(r022):     27(ptr) Variable Function
+       434(r023):     27(ptr) Variable Function
+       437(r026):      7(ptr) Variable Function
+       441(r027):      7(ptr) Variable Function
+       445(r028):     27(ptr) Variable Function
+       448(r029):     27(ptr) Variable Function
+       451(r030):     27(ptr) Variable Function
+       456(r031):     29(ptr) Variable Function
+       461(r032):     29(ptr) Variable Function
+       463(r033):     27(ptr) Variable Function
+       466(r035):     27(ptr) Variable Function
+       470(r036):     27(ptr) Variable Function
+       473(r038):     27(ptr) Variable Function
+       477(r039):    476(ptr) Variable Function
+       480(r040):    476(ptr) Variable Function
+       483(r041):     27(ptr) Variable Function
+      487(r039a):     27(ptr) Variable Function
+       492(r042):      7(ptr) Variable Function
+       495(r043):     27(ptr) Variable Function
+       498(r044):     27(ptr) Variable Function
+       502(r045):     27(ptr) Variable Function
+       505(r046):     27(ptr) Variable Function
+       509(r047):     27(ptr) Variable Function
+       513(r048):     27(ptr) Variable Function
+       516(r049):     27(ptr) Variable Function
+       520(r050):     27(ptr) Variable Function
+       523(r051):     27(ptr) Variable Function
+       527(r052):     27(ptr) Variable Function
+       531(r053):     27(ptr) Variable Function
+       536(r054):     29(ptr) Variable Function
+       541(r055):     27(ptr) Variable Function
+       544(r056):     27(ptr) Variable Function
+       547(r057):     27(ptr) Variable Function
+       552(r058):     27(ptr) Variable Function
+       555(r059):     27(ptr) Variable Function
+       562(r060):     27(ptr) Variable Function
+       565(r061):     27(ptr) Variable Function
+       570(r062):     27(ptr) Variable Function
+       573(r063):     27(ptr) Variable Function
+       577(r064):     27(ptr) Variable Function
+       580(r065):     27(ptr) Variable Function
+       583(r066):     27(ptr) Variable Function
+             348:   26(fvec2) Load 31(inF0)
+             351:  349(bvec2) FOrdNotEqual 348 350
+             352:   137(bool) All 351
+                              Store 347(r000) 352
+             354:   26(fvec2) Load 31(inF0)
+             355:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 354
+                              Store 353(r001) 355
+             357:   26(fvec2) Load 31(inF0)
+             358:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 357
+                              Store 356(r002) 358
              360:   26(fvec2) Load 31(inF0)
-             361:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 360
-                              Store 359(r004) 361
-             365:   26(fvec2) Load 31(inF0)
-             366:  362(ivec2) Bitcast 365
-                              Store 364(r005) 366
-             368:   26(fvec2) Load 31(inF0)
-             369:   28(ivec2) Bitcast 368
-                              Store 367(r006) 369
-             371:   28(ivec2) Load 34(inU0)
-             372:   26(fvec2) Bitcast 371
-                              Store 370(r007) 372
-             374:   26(fvec2) Load 31(inF0)
-             375:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 374
-                              Store 373(r009) 375
-             377:   26(fvec2) Load 31(inF0)
-             378:   26(fvec2) Load 32(inF1)
-             379:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 377 378
-                              Store 376(r010) 379
+             361:  349(bvec2) FOrdNotEqual 360 350
+             362:   137(bool) Any 361
+                              Store 359(r003) 362
+             364:   26(fvec2) Load 31(inF0)
+             365:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 364
+                              Store 363(r004) 365
+             369:   26(fvec2) Load 31(inF0)
+             370:  366(ivec2) Bitcast 369
+                              Store 368(r005) 370
+             372:   26(fvec2) Load 31(inF0)
+             373:   28(ivec2) Bitcast 372
+                              Store 371(r006) 373
+             375:   28(ivec2) Load 34(inU0)
+             376:   26(fvec2) Bitcast 375
+                              Store 374(r007) 376
+             378:   26(fvec2) Load 31(inF0)
+             379:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 378
+                              Store 377(r009) 379
              381:   26(fvec2) Load 31(inF0)
-             382:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 381
-                              Store 380(r011) 382
-             384:   26(fvec2) Load 31(inF0)
-             385:   26(fvec2) Load 32(inF1)
-             386:   26(fvec2) Load 33(inF2)
-             387:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 384 385 386
-                              Store 383(r012) 387
+             382:   26(fvec2) Load 32(inF1)
+             383:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 381 382
+                              Store 380(r010) 383
+             385:   26(fvec2) Load 31(inF0)
+             386:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 385
+                              Store 384(r011) 386
              388:   26(fvec2) Load 31(inF0)
-             389:  345(bvec2) FOrdLessThan 388 346
-             390:   137(bool) Any 389
-                              SelectionMerge 392 None
-                              BranchConditional 390 391 392
-             391:               Label
+             389:   26(fvec2) Load 32(inF1)
+             390:   26(fvec2) Load 33(inF2)
+             391:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 388 389 390
+                              Store 387(r012) 391
+             392:   26(fvec2) Load 31(inF0)
+             393:  349(bvec2) FOrdLessThan 392 350
+             394:   137(bool) Any 393
+                              SelectionMerge 396 None
+                              BranchConditional 394 395 396
+             395:               Label
                                 Kill
-             392:             Label
-             394:   28(ivec2) Load 34(inU0)
-             397:  345(bvec2) ULessThan 394 396
-             398:   137(bool) Any 397
-                              SelectionMerge 400 None
-                              BranchConditional 398 399 400
-             399:               Label
+             396:             Label
+             398:   28(ivec2) Load 34(inU0)
+             401:  349(bvec2) ULessThan 398 400
+             402:   137(bool) Any 401
+                              SelectionMerge 404 None
+                              BranchConditional 402 403 404
+             403:               Label
                                 Kill
-             400:             Label
-             403:   26(fvec2) Load 31(inF0)
-             404:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 403
-                              Store 402(r013) 404
-             406:   26(fvec2) Load 31(inF0)
-             407:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 406
-                              Store 405(r015) 407
-             411:  362(ivec2) BitCount 410
-                              Store 408(r016) 411
-             413:   26(fvec2) Load 31(inF0)
-             414:   26(fvec2) DPdx 413
-                              Store 412(r017) 414
-             416:   26(fvec2) Load 31(inF0)
-             417:   26(fvec2) DPdxCoarse 416
-                              Store 415(r018) 417
-             419:   26(fvec2) Load 31(inF0)
-             420:   26(fvec2) DPdxFine 419
-                              Store 418(r019) 420
-             422:   26(fvec2) Load 31(inF0)
-             423:   26(fvec2) DPdy 422
-                              Store 421(r020) 423
-             425:   26(fvec2) Load 31(inF0)
-             426:   26(fvec2) DPdyCoarse 425
-                              Store 424(r021) 426
-             428:   26(fvec2) Load 31(inF0)
-             429:   26(fvec2) DPdyFine 428
-                              Store 427(r022) 429
-             431:   26(fvec2) Load 31(inF0)
-             432:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 431
-                              Store 430(r023) 432
-             434:   26(fvec2) Load 31(inF0)
-             435:   26(fvec2) Load 32(inF1)
-             436:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 434 435
-                              Store 433(r026) 436
+             404:             Label
+             407:   26(fvec2) Load 31(inF0)
+             408:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 407
+                              Store 406(r013) 408
+             410:   26(fvec2) Load 31(inF0)
+             411:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 410
+                              Store 409(r015) 411
+             415:  366(ivec2) BitCount 414
+                              Store 412(r016) 415
+             417:   26(fvec2) Load 31(inF0)
+             418:   26(fvec2) DPdx 417
+                              Store 416(r017) 418
+             420:   26(fvec2) Load 31(inF0)
+             421:   26(fvec2) DPdxCoarse 420
+                              Store 419(r018) 421
+             423:   26(fvec2) Load 31(inF0)
+             424:   26(fvec2) DPdxFine 423
+                              Store 422(r019) 424
+             426:   26(fvec2) Load 31(inF0)
+             427:   26(fvec2) DPdy 426
+                              Store 425(r020) 427
+             429:   26(fvec2) Load 31(inF0)
+             430:   26(fvec2) DPdyCoarse 429
+                              Store 428(r021) 430
+             432:   26(fvec2) Load 31(inF0)
+             433:   26(fvec2) DPdyFine 432
+                              Store 431(r022) 433
+             435:   26(fvec2) Load 31(inF0)
+             436:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 435
+                              Store 434(r023) 436
              438:   26(fvec2) Load 31(inF0)
              439:   26(fvec2) Load 32(inF1)
-             440:    6(float) Dot 438 439
-                              Store 437(r027) 440
+             440:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 438 439
+                              Store 437(r026) 440
              442:   26(fvec2) Load 31(inF0)
-             443:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 442
-                              Store 441(r028) 443
-             445:   26(fvec2) Load 31(inF0)
-             446:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 445
-                              Store 444(r029) 446
-             448:   26(fvec2) Load 31(inF0)
-             449:   26(fvec2) Load 32(inF1)
-             450:   26(fvec2) Load 33(inF2)
-             451:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 448 449 450
-                              Store 447(r030) 451
-             456:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 455
-                              Store 452(r031) 456
-             458:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 455
-                              Store 457(r032) 458
-             460:   26(fvec2) Load 31(inF0)
-             461:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 460
-                              Store 459(r033) 461
-             463:   26(fvec2) Load 31(inF0)
-             464:   26(fvec2) Load 32(inF1)
-             465:   26(fvec2) FMod 463 464
-                              Store 462(r035) 465
+             443:   26(fvec2) Load 32(inF1)
+             444:    6(float) Dot 442 443
+                              Store 441(r027) 444
+             446:   26(fvec2) Load 31(inF0)
+             447:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 446
+                              Store 445(r028) 447
+             449:   26(fvec2) Load 31(inF0)
+             450:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 449
+                              Store 448(r029) 450
+             452:   26(fvec2) Load 31(inF0)
+             453:   26(fvec2) Load 32(inF1)
+             454:   26(fvec2) Load 33(inF2)
+             455:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 452 453 454
+                              Store 451(r030) 455
+             460:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 459
+                              Store 456(r031) 460
+             462:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 459
+                              Store 461(r032) 462
+             464:   26(fvec2) Load 31(inF0)
+             465:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 464
+                              Store 463(r033) 465
              467:   26(fvec2) Load 31(inF0)
-             468:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 467
-                              Store 466(r036) 468
-             470:   26(fvec2) Load 31(inF0)
-             471:   26(fvec2) Fwidth 470
-                              Store 469(r038) 471
+             468:   26(fvec2) Load 32(inF1)
+             469:   26(fvec2) FMod 467 468
+                              Store 466(r035) 469
+             471:   26(fvec2) Load 31(inF0)
+             472:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 471
+                              Store 470(r036) 472
              474:   26(fvec2) Load 31(inF0)
-             475:  345(bvec2) IsInf 474
-                              Store 473(r039) 475
-             477:   26(fvec2) Load 31(inF0)
-             478:  345(bvec2) IsNan 477
-                              Store 476(r040) 478
-             480:   26(fvec2) Load 31(inF0)
-             481:   26(fvec2) Load 32(inF1)
-             482:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 480 481
-                              Store 479(r041) 482
+             475:   26(fvec2) Fwidth 474
+                              Store 473(r038) 475
+             478:   26(fvec2) Load 31(inF0)
+             479:  349(bvec2) IsInf 478
+                              Store 477(r039) 479
+             481:   26(fvec2) Load 31(inF0)
+             482:  349(bvec2) IsNan 481
+                              Store 480(r040) 482
              484:   26(fvec2) Load 31(inF0)
              485:   26(fvec2) Load 32(inF1)
-             486:   26(fvec2) Load 33(inF2)
-             487:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 484 485 486
-                              Store 483(r039a) 487
-             489:   26(fvec2) Load 31(inF0)
-             490:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 489
-                              Store 488(r042) 490
-             492:   26(fvec2) Load 31(inF0)
-             493:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 492
-                              Store 491(r043) 493
-             495:   26(fvec2) Load 31(inF0)
-             496:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 495
-             497:   26(fvec2) VectorTimesScalar 496 268
-                              Store 494(r044) 497
+             486:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 484 485
+                              Store 483(r041) 486
+             488:   26(fvec2) Load 31(inF0)
+             489:   26(fvec2) Load 32(inF1)
+             490:   26(fvec2) Load 33(inF2)
+             491:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 488 489 490
+                              Store 487(r039a) 491
+             493:   26(fvec2) Load 31(inF0)
+             494:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 493
+                              Store 492(r042) 494
+             496:   26(fvec2) Load 31(inF0)
+             497:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 496
+                              Store 495(r043) 497
              499:   26(fvec2) Load 31(inF0)
              500:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
-                              Store 498(r045) 500
-             502:   26(fvec2) Load 31(inF0)
-             503:   26(fvec2) Load 32(inF1)
-             504:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 502 503
-                              Store 501(r046) 504
+             501:   26(fvec2) VectorTimesScalar 500 272
+                              Store 498(r044) 501
+             503:   26(fvec2) Load 31(inF0)
+             504:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 503
+                              Store 502(r045) 504
              506:   26(fvec2) Load 31(inF0)
              507:   26(fvec2) Load 32(inF1)
-             508:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 506 507
-                              Store 505(r047) 508
+             508:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 506 507
+                              Store 505(r046) 508
              510:   26(fvec2) Load 31(inF0)
-             511:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 510
-                              Store 509(r048) 511
-             513:   26(fvec2) Load 31(inF0)
-             514:   26(fvec2) Load 32(inF1)
-             515:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 513 514
-                              Store 512(r049) 515
+             511:   26(fvec2) Load 32(inF1)
+             512:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 510 511
+                              Store 509(r047) 512
+             514:   26(fvec2) Load 31(inF0)
+             515:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 514
+                              Store 513(r048) 515
              517:   26(fvec2) Load 31(inF0)
-             518:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 517
-                              Store 516(r050) 518
-             520:   26(fvec2) Load 31(inF0)
-             521:   26(fvec2) CompositeConstruct 289 289
-             522:   26(fvec2) FDiv 521 520
-                              Store 519(r051) 522
+             518:   26(fvec2) Load 32(inF1)
+             519:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 517 518
+                              Store 516(r049) 519
+             521:   26(fvec2) Load 31(inF0)
+             522:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 521
+                              Store 520(r050) 522
              524:   26(fvec2) Load 31(inF0)
-             525:   26(fvec2) Load 32(inF1)
-             526:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 524 525
-                              Store 523(r052) 526
+             525:   26(fvec2) CompositeConstruct 293 293
+             526:   26(fvec2) FDiv 525 524
+                              Store 523(r051) 526
              528:   26(fvec2) Load 31(inF0)
              529:   26(fvec2) Load 32(inF1)
-             531:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 528 529 530
-                              Store 527(r053) 531
-             536:   28(ivec2) BitReverse 535
-                              Store 532(r054) 536
-             538:   26(fvec2) Load 31(inF0)
-             539:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 538
-                              Store 537(r055) 539
-             541:   26(fvec2) Load 31(inF0)
-             542:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 541
-                              Store 540(r056) 542
-             544:   26(fvec2) Load 31(inF0)
-             545:   26(fvec2) CompositeConstruct 141 141
-             546:   26(fvec2) CompositeConstruct 289 289
-             547:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 544 545 546
-                              Store 543(r057) 547
-             549:   26(fvec2) Load 31(inF0)
-             550:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 549
-                              Store 548(r058) 550
-             552:   26(fvec2) Load 31(inF0)
-             553:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 552
-                              Store 551(r059) 553
-             554:   26(fvec2) Load 31(inF0)
-             555:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 554
-                              Store 32(inF1) 555
+             530:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 528 529
+                              Store 527(r052) 530
+             532:   26(fvec2) Load 31(inF0)
+             533:   26(fvec2) Load 32(inF1)
+             535:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 532 533 534
+                              Store 531(r053) 535
+             540:   28(ivec2) BitReverse 539
+                              Store 536(r054) 540
+             542:   26(fvec2) Load 31(inF0)
+             543:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 542
+                              Store 541(r055) 543
+             545:   26(fvec2) Load 31(inF0)
+             546:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 545
+                              Store 544(r056) 546
+             548:   26(fvec2) Load 31(inF0)
+             549:   26(fvec2) CompositeConstruct 141 141
+             550:   26(fvec2) CompositeConstruct 293 293
+             551:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 548 549 550
+                              Store 547(r057) 551
+             553:   26(fvec2) Load 31(inF0)
+             554:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 553
+                              Store 552(r058) 554
              556:   26(fvec2) Load 31(inF0)
-             557:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 556
-                              Store 33(inF2) 557
-             559:   26(fvec2) Load 31(inF0)
-             560:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 559
-                              Store 558(r060) 560
-             562:   26(fvec2) Load 31(inF0)
-             563:   26(fvec2) Load 32(inF1)
-             564:   26(fvec2) Load 33(inF2)
-             565:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 562 563 564
-                              Store 561(r061) 565
-             567:   26(fvec2) Load 31(inF0)
-             568:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 567
-                              Store 566(r062) 568
-             570:   26(fvec2) Load 31(inF0)
-             571:   26(fvec2) Load 32(inF1)
-             572:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 570 571
-                              Store 569(r063) 572
+             557:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 556
+                              Store 555(r059) 557
+             558:   26(fvec2) Load 31(inF0)
+             559:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 558
+                              Store 32(inF1) 559
+             560:   26(fvec2) Load 31(inF0)
+             561:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 560
+                              Store 33(inF2) 561
+             563:   26(fvec2) Load 31(inF0)
+             564:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 563
+                              Store 562(r060) 564
+             566:   26(fvec2) Load 31(inF0)
+             567:   26(fvec2) Load 32(inF1)
+             568:   26(fvec2) Load 33(inF2)
+             569:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 566 567 568
+                              Store 565(r061) 569
+             571:   26(fvec2) Load 31(inF0)
+             572:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 571
+                              Store 570(r062) 572
              574:   26(fvec2) Load 31(inF0)
-             575:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 574
-                              Store 573(r064) 575
-             577:   26(fvec2) Load 31(inF0)
-             578:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 577
-                              Store 576(r065) 578
-             580:   26(fvec2) Load 31(inF0)
-             581:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 580
-                              Store 579(r066) 581
-                              ReturnValue 582
+             575:   26(fvec2) Load 32(inF1)
+             576:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 574 575
+                              Store 573(r063) 576
+             578:   26(fvec2) Load 31(inF0)
+             579:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 578
+                              Store 577(r064) 579
+             581:   26(fvec2) Load 31(inF0)
+             582:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 581
+                              Store 580(r065) 582
+             584:   26(fvec2) Load 31(inF0)
+             585:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 584
+                              Store 583(r066) 585
+                              ReturnValue 586
                               FunctionEnd
 48(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   38(fvec3) Function None 42
         43(inF0):     39(ptr) FunctionParameter
@@ -6873,309 +6895,309 @@
         46(inU0):     41(ptr) FunctionParameter
         47(inU1):     41(ptr) FunctionParameter
               49:             Label
-       585(r000):    138(ptr) Variable Function
-       591(r001):     39(ptr) Variable Function
-       594(r002):     39(ptr) Variable Function
-       597(r003):    138(ptr) Variable Function
-       601(r004):     39(ptr) Variable Function
-       606(r005):    605(ptr) Variable Function
-       609(r006):     41(ptr) Variable Function
-       612(r007):     39(ptr) Variable Function
-       615(r009):     39(ptr) Variable Function
-       618(r010):     39(ptr) Variable Function
-       622(r011):     39(ptr) Variable Function
-       625(r012):     39(ptr) Variable Function
-       643(r013):     39(ptr) Variable Function
-       646(r014):     39(ptr) Variable Function
-       649(r015):     41(ptr) Variable Function
-       654(r016):     39(ptr) Variable Function
-       658(r017):     39(ptr) Variable Function
-       661(r018):     39(ptr) Variable Function
-       664(r019):     39(ptr) Variable Function
-       667(r020):     39(ptr) Variable Function
-       670(r021):     39(ptr) Variable Function
-       673(r022):     39(ptr) Variable Function
-       676(r023):     39(ptr) Variable Function
-       679(r024):      7(ptr) Variable Function
-       683(r025):      7(ptr) Variable Function
-       687(r029):     39(ptr) Variable Function
-       690(r030):     39(ptr) Variable Function
-       693(r031):     39(ptr) Variable Function
-       698(r032):     41(ptr) Variable Function
-       702(r033):     41(ptr) Variable Function
-       704(r034):     39(ptr) Variable Function
-       707(r036):     39(ptr) Variable Function
-       711(r037):     39(ptr) Variable Function
-       714(r039):     39(ptr) Variable Function
-       718(r040):    717(ptr) Variable Function
-       721(r041):    717(ptr) Variable Function
-       724(r042):     39(ptr) Variable Function
-      728(r039a):     39(ptr) Variable Function
-      733(r039b):     39(ptr) Variable Function
-       739(r043):      7(ptr) Variable Function
-       742(r044):     39(ptr) Variable Function
-       745(r045):     39(ptr) Variable Function
-       749(r046):     39(ptr) Variable Function
-       752(r047):     39(ptr) Variable Function
-       756(r048):     39(ptr) Variable Function
-       760(r049):     39(ptr) Variable Function
-       763(r050):     39(ptr) Variable Function
-       767(r051):     39(ptr) Variable Function
-       770(r052):     39(ptr) Variable Function
-       774(r053):     39(ptr) Variable Function
-       778(r054):     39(ptr) Variable Function
-       782(r055):     41(ptr) Variable Function
-       785(r056):     39(ptr) Variable Function
-       788(r057):     39(ptr) Variable Function
-       791(r058):     39(ptr) Variable Function
-       796(r059):     39(ptr) Variable Function
-       799(r060):     39(ptr) Variable Function
-       806(r061):     39(ptr) Variable Function
-       809(r062):     39(ptr) Variable Function
-       814(r063):     39(ptr) Variable Function
-       817(r064):     39(ptr) Variable Function
-       821(r065):     39(ptr) Variable Function
-       824(r066):     39(ptr) Variable Function
-       827(r067):     39(ptr) Variable Function
-             586:   38(fvec3) Load 43(inF0)
-             589:  587(bvec3) FOrdNotEqual 586 588
-             590:   137(bool) All 589
-                              Store 585(r000) 590
-             592:   38(fvec3) Load 43(inF0)
-             593:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 592
-                              Store 591(r001) 593
-             595:   38(fvec3) Load 43(inF0)
-             596:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 595
-                              Store 594(r002) 596
-             598:   38(fvec3) Load 43(inF0)
-             599:  587(bvec3) FOrdNotEqual 598 588
-             600:   137(bool) Any 599
-                              Store 597(r003) 600
+       589(r000):    138(ptr) Variable Function
+       595(r001):     39(ptr) Variable Function
+       598(r002):     39(ptr) Variable Function
+       601(r003):    138(ptr) Variable Function
+       605(r004):     39(ptr) Variable Function
+       610(r005):    609(ptr) Variable Function
+       613(r006):     41(ptr) Variable Function
+       616(r007):     39(ptr) Variable Function
+       619(r009):     39(ptr) Variable Function
+       622(r010):     39(ptr) Variable Function
+       626(r011):     39(ptr) Variable Function
+       629(r012):     39(ptr) Variable Function
+       647(r013):     39(ptr) Variable Function
+       650(r014):     39(ptr) Variable Function
+       653(r015):     41(ptr) Variable Function
+       658(r016):     39(ptr) Variable Function
+       662(r017):     39(ptr) Variable Function
+       665(r018):     39(ptr) Variable Function
+       668(r019):     39(ptr) Variable Function
+       671(r020):     39(ptr) Variable Function
+       674(r021):     39(ptr) Variable Function
+       677(r022):     39(ptr) Variable Function
+       680(r023):     39(ptr) Variable Function
+       683(r024):      7(ptr) Variable Function
+       687(r025):      7(ptr) Variable Function
+       691(r029):     39(ptr) Variable Function
+       694(r030):     39(ptr) Variable Function
+       697(r031):     39(ptr) Variable Function
+       702(r032):     41(ptr) Variable Function
+       706(r033):     41(ptr) Variable Function
+       708(r034):     39(ptr) Variable Function
+       711(r036):     39(ptr) Variable Function
+       715(r037):     39(ptr) Variable Function
+       718(r039):     39(ptr) Variable Function
+       722(r040):    721(ptr) Variable Function
+       725(r041):    721(ptr) Variable Function
+       728(r042):     39(ptr) Variable Function
+      732(r039a):     39(ptr) Variable Function
+      737(r039b):     39(ptr) Variable Function
+       743(r043):      7(ptr) Variable Function
+       746(r044):     39(ptr) Variable Function
+       749(r045):     39(ptr) Variable Function
+       753(r046):     39(ptr) Variable Function
+       756(r047):     39(ptr) Variable Function
+       760(r048):     39(ptr) Variable Function
+       764(r049):     39(ptr) Variable Function
+       767(r050):     39(ptr) Variable Function
+       771(r051):     39(ptr) Variable Function
+       774(r052):     39(ptr) Variable Function
+       778(r053):     39(ptr) Variable Function
+       782(r054):     39(ptr) Variable Function
+       786(r055):     41(ptr) Variable Function
+       789(r056):     39(ptr) Variable Function
+       792(r057):     39(ptr) Variable Function
+       795(r058):     39(ptr) Variable Function
+       800(r059):     39(ptr) Variable Function
+       803(r060):     39(ptr) Variable Function
+       810(r061):     39(ptr) Variable Function
+       813(r062):     39(ptr) Variable Function
+       818(r063):     39(ptr) Variable Function
+       821(r064):     39(ptr) Variable Function
+       825(r065):     39(ptr) Variable Function
+       828(r066):     39(ptr) Variable Function
+       831(r067):     39(ptr) Variable Function
+             590:   38(fvec3) Load 43(inF0)
+             593:  591(bvec3) FOrdNotEqual 590 592
+             594:   137(bool) All 593
+                              Store 589(r000) 594
+             596:   38(fvec3) Load 43(inF0)
+             597:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 596
+                              Store 595(r001) 597
+             599:   38(fvec3) Load 43(inF0)
+             600:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 599
+                              Store 598(r002) 600
              602:   38(fvec3) Load 43(inF0)
-             603:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 602
-                              Store 601(r004) 603
-             607:   38(fvec3) Load 43(inF0)
-             608:  604(ivec3) Bitcast 607
-                              Store 606(r005) 608
-             610:   38(fvec3) Load 43(inF0)
-             611:   40(ivec3) Bitcast 610
-                              Store 609(r006) 611
-             613:   40(ivec3) Load 46(inU0)
-             614:   38(fvec3) Bitcast 613
-                              Store 612(r007) 614
-             616:   38(fvec3) Load 43(inF0)
-             617:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 616
-                              Store 615(r009) 617
-             619:   38(fvec3) Load 43(inF0)
-             620:   38(fvec3) Load 44(inF1)
-             621:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 619 620
-                              Store 618(r010) 621
+             603:  591(bvec3) FOrdNotEqual 602 592
+             604:   137(bool) Any 603
+                              Store 601(r003) 604
+             606:   38(fvec3) Load 43(inF0)
+             607:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 606
+                              Store 605(r004) 607
+             611:   38(fvec3) Load 43(inF0)
+             612:  608(ivec3) Bitcast 611
+                              Store 610(r005) 612
+             614:   38(fvec3) Load 43(inF0)
+             615:   40(ivec3) Bitcast 614
+                              Store 613(r006) 615
+             617:   40(ivec3) Load 46(inU0)
+             618:   38(fvec3) Bitcast 617
+                              Store 616(r007) 618
+             620:   38(fvec3) Load 43(inF0)
+             621:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 620
+                              Store 619(r009) 621
              623:   38(fvec3) Load 43(inF0)
-             624:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 623
-                              Store 622(r011) 624
-             626:   38(fvec3) Load 43(inF0)
-             627:   38(fvec3) Load 44(inF1)
-             628:   38(fvec3) Load 45(inF2)
-             629:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 626 627 628
-                              Store 625(r012) 629
+             624:   38(fvec3) Load 44(inF1)
+             625:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 623 624
+                              Store 622(r010) 625
+             627:   38(fvec3) Load 43(inF0)
+             628:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 627
+                              Store 626(r011) 628
              630:   38(fvec3) Load 43(inF0)
-             631:  587(bvec3) FOrdLessThan 630 588
-             632:   137(bool) Any 631
-                              SelectionMerge 634 None
-                              BranchConditional 632 633 634
-             633:               Label
+             631:   38(fvec3) Load 44(inF1)
+             632:   38(fvec3) Load 45(inF2)
+             633:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 630 631 632
+                              Store 629(r012) 633
+             634:   38(fvec3) Load 43(inF0)
+             635:  591(bvec3) FOrdLessThan 634 592
+             636:   137(bool) Any 635
+                              SelectionMerge 638 None
+                              BranchConditional 636 637 638
+             637:               Label
                                 Kill
-             634:             Label
-             636:   40(ivec3) Load 46(inU0)
-             638:  587(bvec3) ULessThan 636 637
-             639:   137(bool) Any 638
-                              SelectionMerge 641 None
-                              BranchConditional 639 640 641
-             640:               Label
+             638:             Label
+             640:   40(ivec3) Load 46(inU0)
+             642:  591(bvec3) ULessThan 640 641
+             643:   137(bool) Any 642
+                              SelectionMerge 645 None
+                              BranchConditional 643 644 645
+             644:               Label
                                 Kill
-             641:             Label
-             644:   38(fvec3) Load 43(inF0)
-             645:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 644
-                              Store 643(r013) 645
-             647:   38(fvec3) Load 43(inF0)
-             648:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 647
-                              Store 646(r014) 648
-             653:   40(ivec3) BitCount 652
-                              Store 649(r015) 653
-             655:   38(fvec3) Load 43(inF0)
-             656:   38(fvec3) Load 44(inF1)
-             657:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 655 656
-                              Store 654(r016) 657
+             645:             Label
+             648:   38(fvec3) Load 43(inF0)
+             649:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 648
+                              Store 647(r013) 649
+             651:   38(fvec3) Load 43(inF0)
+             652:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 651
+                              Store 650(r014) 652
+             657:   40(ivec3) BitCount 656
+                              Store 653(r015) 657
              659:   38(fvec3) Load 43(inF0)
-             660:   38(fvec3) DPdx 659
-                              Store 658(r017) 660
-             662:   38(fvec3) Load 43(inF0)
-             663:   38(fvec3) DPdxCoarse 662
-                              Store 661(r018) 663
-             665:   38(fvec3) Load 43(inF0)
-             666:   38(fvec3) DPdxFine 665
-                              Store 664(r019) 666
-             668:   38(fvec3) Load 43(inF0)
-             669:   38(fvec3) DPdy 668
-                              Store 667(r020) 669
-             671:   38(fvec3) Load 43(inF0)
-             672:   38(fvec3) DPdyCoarse 671
-                              Store 670(r021) 672
-             674:   38(fvec3) Load 43(inF0)
-             675:   38(fvec3) DPdyFine 674
-                              Store 673(r022) 675
-             677:   38(fvec3) Load 43(inF0)
-             678:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 677
-                              Store 676(r023) 678
-             680:   38(fvec3) Load 43(inF0)
-             681:   38(fvec3) Load 44(inF1)
-             682:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 680 681
-                              Store 679(r024) 682
+             660:   38(fvec3) Load 44(inF1)
+             661:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 659 660
+                              Store 658(r016) 661
+             663:   38(fvec3) Load 43(inF0)
+             664:   38(fvec3) DPdx 663
+                              Store 662(r017) 664
+             666:   38(fvec3) Load 43(inF0)
+             667:   38(fvec3) DPdxCoarse 666
+                              Store 665(r018) 667
+             669:   38(fvec3) Load 43(inF0)
+             670:   38(fvec3) DPdxFine 669
+                              Store 668(r019) 670
+             672:   38(fvec3) Load 43(inF0)
+             673:   38(fvec3) DPdy 672
+                              Store 671(r020) 673
+             675:   38(fvec3) Load 43(inF0)
+             676:   38(fvec3) DPdyCoarse 675
+                              Store 674(r021) 676
+             678:   38(fvec3) Load 43(inF0)
+             679:   38(fvec3) DPdyFine 678
+                              Store 677(r022) 679
+             681:   38(fvec3) Load 43(inF0)
+             682:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 681
+                              Store 680(r023) 682
              684:   38(fvec3) Load 43(inF0)
              685:   38(fvec3) Load 44(inF1)
-             686:    6(float) Dot 684 685
-                              Store 683(r025) 686
+             686:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 684 685
+                              Store 683(r024) 686
              688:   38(fvec3) Load 43(inF0)
-             689:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 688
-                              Store 687(r029) 689
-             691:   38(fvec3) Load 43(inF0)
-             692:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 691
-                              Store 690(r030) 692
-             694:   38(fvec3) Load 43(inF0)
-             695:   38(fvec3) Load 44(inF1)
-             696:   38(fvec3) Load 45(inF2)
-             697:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 694 695 696
-                              Store 693(r031) 697
-             701:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 700
-                              Store 698(r032) 701
-             703:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 700
-                              Store 702(r033) 703
-             705:   38(fvec3) Load 43(inF0)
-             706:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 705
-                              Store 704(r034) 706
-             708:   38(fvec3) Load 43(inF0)
-             709:   38(fvec3) Load 44(inF1)
-             710:   38(fvec3) FMod 708 709
-                              Store 707(r036) 710
+             689:   38(fvec3) Load 44(inF1)
+             690:    6(float) Dot 688 689
+                              Store 687(r025) 690
+             692:   38(fvec3) Load 43(inF0)
+             693:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 692
+                              Store 691(r029) 693
+             695:   38(fvec3) Load 43(inF0)
+             696:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 695
+                              Store 694(r030) 696
+             698:   38(fvec3) Load 43(inF0)
+             699:   38(fvec3) Load 44(inF1)
+             700:   38(fvec3) Load 45(inF2)
+             701:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 698 699 700
+                              Store 697(r031) 701
+             705:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 704
+                              Store 702(r032) 705
+             707:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 704
+                              Store 706(r033) 707
+             709:   38(fvec3) Load 43(inF0)
+             710:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 709
+                              Store 708(r034) 710
              712:   38(fvec3) Load 43(inF0)
-             713:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 712
-                              Store 711(r037) 713
-             715:   38(fvec3) Load 43(inF0)
-             716:   38(fvec3) Fwidth 715
-                              Store 714(r039) 716
+             713:   38(fvec3) Load 44(inF1)
+             714:   38(fvec3) FMod 712 713
+                              Store 711(r036) 714
+             716:   38(fvec3) Load 43(inF0)
+             717:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 716
+                              Store 715(r037) 717
              719:   38(fvec3) Load 43(inF0)
-             720:  587(bvec3) IsInf 719
-                              Store 718(r040) 720
-             722:   38(fvec3) Load 43(inF0)
-             723:  587(bvec3) IsNan 722
-                              Store 721(r041) 723
-             725:   38(fvec3) Load 43(inF0)
-             726:   38(fvec3) Load 44(inF1)
-             727:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 725 726
-                              Store 724(r042) 727
+             720:   38(fvec3) Fwidth 719
+                              Store 718(r039) 720
+             723:   38(fvec3) Load 43(inF0)
+             724:  591(bvec3) IsInf 723
+                              Store 722(r040) 724
+             726:   38(fvec3) Load 43(inF0)
+             727:  591(bvec3) IsNan 726
+                              Store 725(r041) 727
              729:   38(fvec3) Load 43(inF0)
              730:   38(fvec3) Load 44(inF1)
-             731:   38(fvec3) Load 45(inF2)
-             732:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 729 730 731
-                              Store 728(r039a) 732
-             734:   38(fvec3) Load 43(inF0)
-             735:   38(fvec3) Load 44(inF1)
-             737:   38(fvec3) CompositeConstruct 736 736 736
-             738:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 734 735 737
-                              Store 733(r039b) 738
-             740:   38(fvec3) Load 43(inF0)
-             741:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 740
-                              Store 739(r043) 741
-             743:   38(fvec3) Load 43(inF0)
-             744:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 743
-                              Store 742(r044) 744
-             746:   38(fvec3) Load 43(inF0)
-             747:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 746
-             748:   38(fvec3) VectorTimesScalar 747 268
-                              Store 745(r045) 748
+             731:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 729 730
+                              Store 728(r042) 731
+             733:   38(fvec3) Load 43(inF0)
+             734:   38(fvec3) Load 44(inF1)
+             735:   38(fvec3) Load 45(inF2)
+             736:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 733 734 735
+                              Store 732(r039a) 736
+             738:   38(fvec3) Load 43(inF0)
+             739:   38(fvec3) Load 44(inF1)
+             741:   38(fvec3) CompositeConstruct 740 740 740
+             742:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 738 739 741
+                              Store 737(r039b) 742
+             744:   38(fvec3) Load 43(inF0)
+             745:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 744
+                              Store 743(r043) 745
+             747:   38(fvec3) Load 43(inF0)
+             748:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 747
+                              Store 746(r044) 748
              750:   38(fvec3) Load 43(inF0)
              751:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
-                              Store 749(r046) 751
-             753:   38(fvec3) Load 43(inF0)
-             754:   38(fvec3) Load 44(inF1)
-             755:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 753 754
-                              Store 752(r047) 755
+             752:   38(fvec3) VectorTimesScalar 751 272
+                              Store 749(r045) 752
+             754:   38(fvec3) Load 43(inF0)
+             755:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 754
+                              Store 753(r046) 755
              757:   38(fvec3) Load 43(inF0)
              758:   38(fvec3) Load 44(inF1)
-             759:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 757 758
-                              Store 756(r048) 759
+             759:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 757 758
+                              Store 756(r047) 759
              761:   38(fvec3) Load 43(inF0)
-             762:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 761
-                              Store 760(r049) 762
-             764:   38(fvec3) Load 43(inF0)
-             765:   38(fvec3) Load 44(inF1)
-             766:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 764 765
-                              Store 763(r050) 766
+             762:   38(fvec3) Load 44(inF1)
+             763:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 761 762
+                              Store 760(r048) 763
+             765:   38(fvec3) Load 43(inF0)
+             766:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 765
+                              Store 764(r049) 766
              768:   38(fvec3) Load 43(inF0)
-             769:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 768
-                              Store 767(r051) 769
-             771:   38(fvec3) Load 43(inF0)
-             772:   38(fvec3) CompositeConstruct 289 289 289
-             773:   38(fvec3) FDiv 772 771
-                              Store 770(r052) 773
+             769:   38(fvec3) Load 44(inF1)
+             770:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 768 769
+                              Store 767(r050) 770
+             772:   38(fvec3) Load 43(inF0)
+             773:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 772
+                              Store 771(r051) 773
              775:   38(fvec3) Load 43(inF0)
-             776:   38(fvec3) Load 44(inF1)
-             777:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 775 776
-                              Store 774(r053) 777
+             776:   38(fvec3) CompositeConstruct 293 293 293
+             777:   38(fvec3) FDiv 776 775
+                              Store 774(r052) 777
              779:   38(fvec3) Load 43(inF0)
              780:   38(fvec3) Load 44(inF1)
-             781:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 779 780 530
-                              Store 778(r054) 781
-             784:   40(ivec3) BitReverse 783
-                              Store 782(r055) 784
-             786:   38(fvec3) Load 43(inF0)
-             787:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 786
-                              Store 785(r056) 787
-             789:   38(fvec3) Load 43(inF0)
-             790:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 789
-                              Store 788(r057) 790
-             792:   38(fvec3) Load 43(inF0)
-             793:   38(fvec3) CompositeConstruct 141 141 141
-             794:   38(fvec3) CompositeConstruct 289 289 289
-             795:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 792 793 794
-                              Store 791(r058) 795
-             797:   38(fvec3) Load 43(inF0)
-             798:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 797
-                              Store 796(r059) 798
-             800:   38(fvec3) Load 43(inF0)
-             801:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 800
-                              Store 799(r060) 801
-             802:   38(fvec3) Load 43(inF0)
-             803:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 802
-                              Store 44(inF1) 803
+             781:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 779 780
+                              Store 778(r053) 781
+             783:   38(fvec3) Load 43(inF0)
+             784:   38(fvec3) Load 44(inF1)
+             785:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 783 784 534
+                              Store 782(r054) 785
+             788:   40(ivec3) BitReverse 787
+                              Store 786(r055) 788
+             790:   38(fvec3) Load 43(inF0)
+             791:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 790
+                              Store 789(r056) 791
+             793:   38(fvec3) Load 43(inF0)
+             794:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 793
+                              Store 792(r057) 794
+             796:   38(fvec3) Load 43(inF0)
+             797:   38(fvec3) CompositeConstruct 141 141 141
+             798:   38(fvec3) CompositeConstruct 293 293 293
+             799:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 796 797 798
+                              Store 795(r058) 799
+             801:   38(fvec3) Load 43(inF0)
+             802:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 801
+                              Store 800(r059) 802
              804:   38(fvec3) Load 43(inF0)
-             805:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 804
-                              Store 45(inF2) 805
-             807:   38(fvec3) Load 43(inF0)
-             808:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 807
-                              Store 806(r061) 808
-             810:   38(fvec3) Load 43(inF0)
-             811:   38(fvec3) Load 44(inF1)
-             812:   38(fvec3) Load 45(inF2)
-             813:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 810 811 812
-                              Store 809(r062) 813
-             815:   38(fvec3) Load 43(inF0)
-             816:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 815
-                              Store 814(r063) 816
-             818:   38(fvec3) Load 43(inF0)
-             819:   38(fvec3) Load 44(inF1)
-             820:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 818 819
-                              Store 817(r064) 820
+             805:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 804
+                              Store 803(r060) 805
+             806:   38(fvec3) Load 43(inF0)
+             807:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 806
+                              Store 44(inF1) 807
+             808:   38(fvec3) Load 43(inF0)
+             809:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 808
+                              Store 45(inF2) 809
+             811:   38(fvec3) Load 43(inF0)
+             812:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 811
+                              Store 810(r061) 812
+             814:   38(fvec3) Load 43(inF0)
+             815:   38(fvec3) Load 44(inF1)
+             816:   38(fvec3) Load 45(inF2)
+             817:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 814 815 816
+                              Store 813(r062) 817
+             819:   38(fvec3) Load 43(inF0)
+             820:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 819
+                              Store 818(r063) 820
              822:   38(fvec3) Load 43(inF0)
-             823:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 822
-                              Store 821(r065) 823
-             825:   38(fvec3) Load 43(inF0)
-             826:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 825
-                              Store 824(r066) 826
-             828:   38(fvec3) Load 43(inF0)
-             829:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 828
-                              Store 827(r067) 829
-                              ReturnValue 831
+             823:   38(fvec3) Load 44(inF1)
+             824:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 822 823
+                              Store 821(r064) 824
+             826:   38(fvec3) Load 43(inF0)
+             827:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 826
+                              Store 825(r065) 827
+             829:   38(fvec3) Load 43(inF0)
+             830:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 829
+                              Store 828(r066) 830
+             832:   38(fvec3) Load 43(inF0)
+             833:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 832
+                              Store 831(r067) 833
+                              ReturnValue 835
                               FunctionEnd
 60(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   50(fvec4) Function None 54
         55(inF0):     51(ptr) FunctionParameter
@@ -7184,1006 +7206,1006 @@
         58(inU0):     53(ptr) FunctionParameter
         59(inU1):     53(ptr) FunctionParameter
               61:             Label
-       834(r000):    138(ptr) Variable Function
-       840(r001):     51(ptr) Variable Function
-       843(r002):     51(ptr) Variable Function
-       846(r003):    138(ptr) Variable Function
-       850(r004):     51(ptr) Variable Function
-       855(r005):    854(ptr) Variable Function
-       858(r006):     53(ptr) Variable Function
-       861(r007):     51(ptr) Variable Function
-       864(r009):     51(ptr) Variable Function
-       867(r010):     51(ptr) Variable Function
-       871(r011):     51(ptr) Variable Function
-       874(r012):     51(ptr) Variable Function
-       892(r013):     51(ptr) Variable Function
-       895(r014):     51(ptr) Variable Function
-       898(r015):     53(ptr) Variable Function
-       901(r016):     51(ptr) Variable Function
-       904(r017):     51(ptr) Variable Function
-       907(r018):     51(ptr) Variable Function
-       910(r019):     51(ptr) Variable Function
-       913(r020):     51(ptr) Variable Function
-       916(r021):     51(ptr) Variable Function
-       919(r022):     51(ptr) Variable Function
-       922(r023):      7(ptr) Variable Function
-       926(r024):      7(ptr) Variable Function
-       930(r025):     51(ptr) Variable Function
-       941(r029):     51(ptr) Variable Function
-       944(r030):     51(ptr) Variable Function
-       947(r031):     51(ptr) Variable Function
-       952(r032):     53(ptr) Variable Function
-       957(r033):     53(ptr) Variable Function
-       959(r034):     51(ptr) Variable Function
-       962(r036):     51(ptr) Variable Function
-       966(r037):     51(ptr) Variable Function
-       969(r039):     51(ptr) Variable Function
-       973(r040):    972(ptr) Variable Function
-       976(r041):    972(ptr) Variable Function
-       979(r042):     51(ptr) Variable Function
-      983(r039a):     51(ptr) Variable Function
-       988(r043):      7(ptr) Variable Function
-       991(r044):     51(ptr) Variable Function
-       994(r045):     51(ptr) Variable Function
-       998(r046):     51(ptr) Variable Function
-      1001(r047):     51(ptr) Variable Function
-      1005(r048):     51(ptr) Variable Function
-      1009(r049):     51(ptr) Variable Function
-      1012(r050):     51(ptr) Variable Function
-      1016(r051):     51(ptr) Variable Function
-      1019(r052):     51(ptr) Variable Function
-      1023(r053):     51(ptr) Variable Function
-      1027(r054):     51(ptr) Variable Function
-      1031(r055):     53(ptr) Variable Function
-      1034(r056):     51(ptr) Variable Function
-      1037(r057):     51(ptr) Variable Function
-      1040(r058):     51(ptr) Variable Function
-      1045(r059):     51(ptr) Variable Function
-      1048(r060):     51(ptr) Variable Function
-      1055(r061):     51(ptr) Variable Function
-      1058(r062):     51(ptr) Variable Function
-      1063(r063):     51(ptr) Variable Function
-      1066(r064):     51(ptr) Variable Function
-      1070(r065):     51(ptr) Variable Function
-      1073(r066):     51(ptr) Variable Function
-      1076(r067):     51(ptr) Variable Function
-             835:   50(fvec4) Load 55(inF0)
-             838:  836(bvec4) FOrdNotEqual 835 837
-             839:   137(bool) All 838
-                              Store 834(r000) 839
-             841:   50(fvec4) Load 55(inF0)
-             842:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 841
-                              Store 840(r001) 842
-             844:   50(fvec4) Load 55(inF0)
-             845:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 844
-                              Store 843(r002) 845
-             847:   50(fvec4) Load 55(inF0)
-             848:  836(bvec4) FOrdNotEqual 847 837
-             849:   137(bool) Any 848
-                              Store 846(r003) 849
+       838(r000):    138(ptr) Variable Function
+       844(r001):     51(ptr) Variable Function
+       847(r002):     51(ptr) Variable Function
+       850(r003):    138(ptr) Variable Function
+       854(r004):     51(ptr) Variable Function
+       859(r005):    858(ptr) Variable Function
+       862(r006):     53(ptr) Variable Function
+       865(r007):     51(ptr) Variable Function
+       868(r009):     51(ptr) Variable Function
+       871(r010):     51(ptr) Variable Function
+       875(r011):     51(ptr) Variable Function
+       878(r012):     51(ptr) Variable Function
+       896(r013):     51(ptr) Variable Function
+       899(r014):     51(ptr) Variable Function
+       902(r015):     53(ptr) Variable Function
+       905(r016):     51(ptr) Variable Function
+       908(r017):     51(ptr) Variable Function
+       911(r018):     51(ptr) Variable Function
+       914(r019):     51(ptr) Variable Function
+       917(r020):     51(ptr) Variable Function
+       920(r021):     51(ptr) Variable Function
+       923(r022):     51(ptr) Variable Function
+       926(r023):      7(ptr) Variable Function
+       930(r024):      7(ptr) Variable Function
+       934(r025):     51(ptr) Variable Function
+       945(r029):     51(ptr) Variable Function
+       948(r030):     51(ptr) Variable Function
+       951(r031):     51(ptr) Variable Function
+       956(r032):     53(ptr) Variable Function
+       961(r033):     53(ptr) Variable Function
+       963(r034):     51(ptr) Variable Function
+       966(r036):     51(ptr) Variable Function
+       970(r037):     51(ptr) Variable Function
+       973(r039):     51(ptr) Variable Function
+       977(r040):    976(ptr) Variable Function
+       980(r041):    976(ptr) Variable Function
+       983(r042):     51(ptr) Variable Function
+      987(r039a):     51(ptr) Variable Function
+       992(r043):      7(ptr) Variable Function
+       995(r044):     51(ptr) Variable Function
+       998(r045):     51(ptr) Variable Function
+      1002(r046):     51(ptr) Variable Function
+      1005(r047):     51(ptr) Variable Function
+      1009(r048):     51(ptr) Variable Function
+      1013(r049):     51(ptr) Variable Function
+      1016(r050):     51(ptr) Variable Function
+      1020(r051):     51(ptr) Variable Function
+      1023(r052):     51(ptr) Variable Function
+      1027(r053):     51(ptr) Variable Function
+      1031(r054):     51(ptr) Variable Function
+      1035(r055):     53(ptr) Variable Function
+      1038(r056):     51(ptr) Variable Function
+      1041(r057):     51(ptr) Variable Function
+      1044(r058):     51(ptr) Variable Function
+      1049(r059):     51(ptr) Variable Function
+      1052(r060):     51(ptr) Variable Function
+      1059(r061):     51(ptr) Variable Function
+      1062(r062):     51(ptr) Variable Function
+      1067(r063):     51(ptr) Variable Function
+      1070(r064):     51(ptr) Variable Function
+      1074(r065):     51(ptr) Variable Function
+      1077(r066):     51(ptr) Variable Function
+      1080(r067):     51(ptr) Variable Function
+             839:   50(fvec4) Load 55(inF0)
+             842:  840(bvec4) FOrdNotEqual 839 841
+             843:   137(bool) All 842
+                              Store 838(r000) 843
+             845:   50(fvec4) Load 55(inF0)
+             846:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 845
+                              Store 844(r001) 846
+             848:   50(fvec4) Load 55(inF0)
+             849:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 848
+                              Store 847(r002) 849
              851:   50(fvec4) Load 55(inF0)
-             852:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 851
-                              Store 850(r004) 852
-             856:   50(fvec4) Load 55(inF0)
-             857:  853(ivec4) Bitcast 856
-                              Store 855(r005) 857
-             859:   50(fvec4) Load 55(inF0)
-             860:   52(ivec4) Bitcast 859
-                              Store 858(r006) 860
-             862:   52(ivec4) Load 58(inU0)
-             863:   50(fvec4) Bitcast 862
-                              Store 861(r007) 863
-             865:   50(fvec4) Load 55(inF0)
-             866:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 865
-                              Store 864(r009) 866
-             868:   50(fvec4) Load 55(inF0)
-             869:   50(fvec4) Load 56(inF1)
-             870:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 868 869
-                              Store 867(r010) 870
+             852:  840(bvec4) FOrdNotEqual 851 841
+             853:   137(bool) Any 852
+                              Store 850(r003) 853
+             855:   50(fvec4) Load 55(inF0)
+             856:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 855
+                              Store 854(r004) 856
+             860:   50(fvec4) Load 55(inF0)
+             861:  857(ivec4) Bitcast 860
+                              Store 859(r005) 861
+             863:   50(fvec4) Load 55(inF0)
+             864:   52(ivec4) Bitcast 863
+                              Store 862(r006) 864
+             866:   52(ivec4) Load 58(inU0)
+             867:   50(fvec4) Bitcast 866
+                              Store 865(r007) 867
+             869:   50(fvec4) Load 55(inF0)
+             870:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 869
+                              Store 868(r009) 870
              872:   50(fvec4) Load 55(inF0)
-             873:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 872
-                              Store 871(r011) 873
-             875:   50(fvec4) Load 55(inF0)
-             876:   50(fvec4) Load 56(inF1)
-             877:   50(fvec4) Load 57(inF2)
-             878:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 875 876 877
-                              Store 874(r012) 878
+             873:   50(fvec4) Load 56(inF1)
+             874:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 872 873
+                              Store 871(r010) 874
+             876:   50(fvec4) Load 55(inF0)
+             877:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 876
+                              Store 875(r011) 877
              879:   50(fvec4) Load 55(inF0)
-             880:  836(bvec4) FOrdLessThan 879 837
-             881:   137(bool) Any 880
-                              SelectionMerge 883 None
-                              BranchConditional 881 882 883
-             882:               Label
+             880:   50(fvec4) Load 56(inF1)
+             881:   50(fvec4) Load 57(inF2)
+             882:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 879 880 881
+                              Store 878(r012) 882
+             883:   50(fvec4) Load 55(inF0)
+             884:  840(bvec4) FOrdLessThan 883 841
+             885:   137(bool) Any 884
+                              SelectionMerge 887 None
+                              BranchConditional 885 886 887
+             886:               Label
                                 Kill
-             883:             Label
-             885:   52(ivec4) Load 58(inU0)
-             887:  836(bvec4) ULessThan 885 886
-             888:   137(bool) Any 887
-                              SelectionMerge 890 None
-                              BranchConditional 888 889 890
-             889:               Label
+             887:             Label
+             889:   52(ivec4) Load 58(inU0)
+             891:  840(bvec4) ULessThan 889 890
+             892:   137(bool) Any 891
+                              SelectionMerge 894 None
+                              BranchConditional 892 893 894
+             893:               Label
                                 Kill
-             890:             Label
-             893:   50(fvec4) Load 55(inF0)
-             894:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 893
-                              Store 892(r013) 894
-             896:   50(fvec4) Load 55(inF0)
-             897:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 896
-                              Store 895(r014) 897
-             900:   52(ivec4) BitCount 899
-                              Store 898(r015) 900
-             902:   50(fvec4) Load 55(inF0)
-             903:   50(fvec4) DPdx 902
-                              Store 901(r016) 903
-             905:   50(fvec4) Load 55(inF0)
-             906:   50(fvec4) DPdxCoarse 905
-                              Store 904(r017) 906
-             908:   50(fvec4) Load 55(inF0)
-             909:   50(fvec4) DPdxFine 908
-                              Store 907(r018) 909
-             911:   50(fvec4) Load 55(inF0)
-             912:   50(fvec4) DPdy 911
-                              Store 910(r019) 912
-             914:   50(fvec4) Load 55(inF0)
-             915:   50(fvec4) DPdyCoarse 914
-                              Store 913(r020) 915
-             917:   50(fvec4) Load 55(inF0)
-             918:   50(fvec4) DPdyFine 917
-                              Store 916(r021) 918
-             920:   50(fvec4) Load 55(inF0)
-             921:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 920
-                              Store 919(r022) 921
-             923:   50(fvec4) Load 55(inF0)
-             924:   50(fvec4) Load 56(inF1)
-             925:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 923 924
-                              Store 922(r023) 925
+             894:             Label
+             897:   50(fvec4) Load 55(inF0)
+             898:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 897
+                              Store 896(r013) 898
+             900:   50(fvec4) Load 55(inF0)
+             901:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 900
+                              Store 899(r014) 901
+             904:   52(ivec4) BitCount 903
+                              Store 902(r015) 904
+             906:   50(fvec4) Load 55(inF0)
+             907:   50(fvec4) DPdx 906
+                              Store 905(r016) 907
+             909:   50(fvec4) Load 55(inF0)
+             910:   50(fvec4) DPdxCoarse 909
+                              Store 908(r017) 910
+             912:   50(fvec4) Load 55(inF0)
+             913:   50(fvec4) DPdxFine 912
+                              Store 911(r018) 913
+             915:   50(fvec4) Load 55(inF0)
+             916:   50(fvec4) DPdy 915
+                              Store 914(r019) 916
+             918:   50(fvec4) Load 55(inF0)
+             919:   50(fvec4) DPdyCoarse 918
+                              Store 917(r020) 919
+             921:   50(fvec4) Load 55(inF0)
+             922:   50(fvec4) DPdyFine 921
+                              Store 920(r021) 922
+             924:   50(fvec4) Load 55(inF0)
+             925:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 924
+                              Store 923(r022) 925
              927:   50(fvec4) Load 55(inF0)
              928:   50(fvec4) Load 56(inF1)
-             929:    6(float) Dot 927 928
-                              Store 926(r024) 929
-             931:      7(ptr) AccessChain 55(inF0) 533
-             932:    6(float) Load 931
-             933:      7(ptr) AccessChain 56(inF1) 533
-             934:    6(float) Load 933
-             935:    6(float) FMul 932 934
-             936:      7(ptr) AccessChain 55(inF0) 534
-             937:    6(float) Load 936
-             938:      7(ptr) AccessChain 56(inF1) 650
-             939:    6(float) Load 938
-             940:   50(fvec4) CompositeConstruct 289 935 937 939
-                              Store 930(r025) 940
-             942:   50(fvec4) Load 55(inF0)
-             943:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 942
-                              Store 941(r029) 943
-             945:   50(fvec4) Load 55(inF0)
-             946:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 945
-                              Store 944(r030) 946
-             948:   50(fvec4) Load 55(inF0)
-             949:   50(fvec4) Load 56(inF1)
-             950:   50(fvec4) Load 57(inF2)
-             951:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 948 949 950
-                              Store 947(r031) 951
-             956:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 955
-                              Store 952(r032) 956
-             958:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 955
-                              Store 957(r033) 958
-             960:   50(fvec4) Load 55(inF0)
-             961:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 960
-                              Store 959(r034) 961
-             963:   50(fvec4) Load 55(inF0)
-             964:   50(fvec4) Load 56(inF1)
-             965:   50(fvec4) FMod 963 964
-                              Store 962(r036) 965
+             929:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 927 928
+                              Store 926(r023) 929
+             931:   50(fvec4) Load 55(inF0)
+             932:   50(fvec4) Load 56(inF1)
+             933:    6(float) Dot 931 932
+                              Store 930(r024) 933
+             935:      7(ptr) AccessChain 55(inF0) 537
+             936:    6(float) Load 935
+             937:      7(ptr) AccessChain 56(inF1) 537
+             938:    6(float) Load 937
+             939:    6(float) FMul 936 938
+             940:      7(ptr) AccessChain 55(inF0) 538
+             941:    6(float) Load 940
+             942:      7(ptr) AccessChain 56(inF1) 654
+             943:    6(float) Load 942
+             944:   50(fvec4) CompositeConstruct 293 939 941 943
+                              Store 934(r025) 944
+             946:   50(fvec4) Load 55(inF0)
+             947:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 946
+                              Store 945(r029) 947
+             949:   50(fvec4) Load 55(inF0)
+             950:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 949
+                              Store 948(r030) 950
+             952:   50(fvec4) Load 55(inF0)
+             953:   50(fvec4) Load 56(inF1)
+             954:   50(fvec4) Load 57(inF2)
+             955:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 952 953 954
+                              Store 951(r031) 955
+             960:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 959
+                              Store 956(r032) 960
+             962:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 959
+                              Store 961(r033) 962
+             964:   50(fvec4) Load 55(inF0)
+             965:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 964
+                              Store 963(r034) 965
              967:   50(fvec4) Load 55(inF0)
-             968:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 967
-                              Store 966(r037) 968
-             970:   50(fvec4) Load 55(inF0)
-             971:   50(fvec4) Fwidth 970
-                              Store 969(r039) 971
+             968:   50(fvec4) Load 56(inF1)
+             969:   50(fvec4) FMod 967 968
+                              Store 966(r036) 969
+             971:   50(fvec4) Load 55(inF0)
+             972:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 971
+                              Store 970(r037) 972
              974:   50(fvec4) Load 55(inF0)
-             975:  836(bvec4) IsInf 974
-                              Store 973(r040) 975
-             977:   50(fvec4) Load 55(inF0)
-             978:  836(bvec4) IsNan 977
-                              Store 976(r041) 978
-             980:   50(fvec4) Load 55(inF0)
-             981:   50(fvec4) Load 56(inF1)
-             982:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 980 981
-                              Store 979(r042) 982
+             975:   50(fvec4) Fwidth 974
+                              Store 973(r039) 975
+             978:   50(fvec4) Load 55(inF0)
+             979:  840(bvec4) IsInf 978
+                              Store 977(r040) 979
+             981:   50(fvec4) Load 55(inF0)
+             982:  840(bvec4) IsNan 981
+                              Store 980(r041) 982
              984:   50(fvec4) Load 55(inF0)
              985:   50(fvec4) Load 56(inF1)
-             986:   50(fvec4) Load 57(inF2)
-             987:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 984 985 986
-                              Store 983(r039a) 987
-             989:   50(fvec4) Load 55(inF0)
-             990:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 989
-                              Store 988(r043) 990
-             992:   50(fvec4) Load 55(inF0)
-             993:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 992
-                              Store 991(r044) 993
-             995:   50(fvec4) Load 55(inF0)
-             996:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 995
-             997:   50(fvec4) VectorTimesScalar 996 268
-                              Store 994(r045) 997
+             986:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 984 985
+                              Store 983(r042) 986
+             988:   50(fvec4) Load 55(inF0)
+             989:   50(fvec4) Load 56(inF1)
+             990:   50(fvec4) Load 57(inF2)
+             991:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 988 989 990
+                              Store 987(r039a) 991
+             993:   50(fvec4) Load 55(inF0)
+             994:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 993
+                              Store 992(r043) 994
+             996:   50(fvec4) Load 55(inF0)
+             997:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 996
+                              Store 995(r044) 997
              999:   50(fvec4) Load 55(inF0)
             1000:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 999
-                              Store 998(r046) 1000
-            1002:   50(fvec4) Load 55(inF0)
-            1003:   50(fvec4) Load 56(inF1)
-            1004:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1002 1003
-                              Store 1001(r047) 1004
+            1001:   50(fvec4) VectorTimesScalar 1000 272
+                              Store 998(r045) 1001
+            1003:   50(fvec4) Load 55(inF0)
+            1004:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1003
+                              Store 1002(r046) 1004
             1006:   50(fvec4) Load 55(inF0)
             1007:   50(fvec4) Load 56(inF1)
-            1008:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1006 1007
-                              Store 1005(r048) 1008
+            1008:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1006 1007
+                              Store 1005(r047) 1008
             1010:   50(fvec4) Load 55(inF0)
-            1011:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1010
-                              Store 1009(r049) 1011
-            1013:   50(fvec4) Load 55(inF0)
-            1014:   50(fvec4) Load 56(inF1)
-            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1013 1014
-                              Store 1012(r050) 1015
+            1011:   50(fvec4) Load 56(inF1)
+            1012:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1010 1011
+                              Store 1009(r048) 1012
+            1014:   50(fvec4) Load 55(inF0)
+            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1014
+                              Store 1013(r049) 1015
             1017:   50(fvec4) Load 55(inF0)
-            1018:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1017
-                              Store 1016(r051) 1018
-            1020:   50(fvec4) Load 55(inF0)
-            1021:   50(fvec4) CompositeConstruct 289 289 289 289
-            1022:   50(fvec4) FDiv 1021 1020
-                              Store 1019(r052) 1022
+            1018:   50(fvec4) Load 56(inF1)
+            1019:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1017 1018
+                              Store 1016(r050) 1019
+            1021:   50(fvec4) Load 55(inF0)
+            1022:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1021
+                              Store 1020(r051) 1022
             1024:   50(fvec4) Load 55(inF0)
-            1025:   50(fvec4) Load 56(inF1)
-            1026:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1024 1025
-                              Store 1023(r053) 1026
+            1025:   50(fvec4) CompositeConstruct 293 293 293 293
+            1026:   50(fvec4) FDiv 1025 1024
+                              Store 1023(r052) 1026
             1028:   50(fvec4) Load 55(inF0)
             1029:   50(fvec4) Load 56(inF1)
-            1030:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1028 1029 530
-                              Store 1027(r054) 1030
-            1033:   52(ivec4) BitReverse 1032
-                              Store 1031(r055) 1033
-            1035:   50(fvec4) Load 55(inF0)
-            1036:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1035
-                              Store 1034(r056) 1036
-            1038:   50(fvec4) Load 55(inF0)
-            1039:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1038
-                              Store 1037(r057) 1039
-            1041:   50(fvec4) Load 55(inF0)
-            1042:   50(fvec4) CompositeConstruct 141 141 141 141
-            1043:   50(fvec4) CompositeConstruct 289 289 289 289
-            1044:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1041 1042 1043
-                              Store 1040(r058) 1044
-            1046:   50(fvec4) Load 55(inF0)
-            1047:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1046
-                              Store 1045(r059) 1047
-            1049:   50(fvec4) Load 55(inF0)
-            1050:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1049
-                              Store 1048(r060) 1050
-            1051:   50(fvec4) Load 55(inF0)
-            1052:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1051
-                              Store 56(inF1) 1052
+            1030:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1028 1029
+                              Store 1027(r053) 1030
+            1032:   50(fvec4) Load 55(inF0)
+            1033:   50(fvec4) Load 56(inF1)
+            1034:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1032 1033 534
+                              Store 1031(r054) 1034
+            1037:   52(ivec4) BitReverse 1036
+                              Store 1035(r055) 1037
+            1039:   50(fvec4) Load 55(inF0)
+            1040:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1039
+                              Store 1038(r056) 1040
+            1042:   50(fvec4) Load 55(inF0)
+            1043:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1042
+                              Store 1041(r057) 1043
+            1045:   50(fvec4) Load 55(inF0)
+            1046:   50(fvec4) CompositeConstruct 141 141 141 141
+            1047:   50(fvec4) CompositeConstruct 293 293 293 293
+            1048:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1045 1046 1047
+                              Store 1044(r058) 1048
+            1050:   50(fvec4) Load 55(inF0)
+            1051:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1050
+                              Store 1049(r059) 1051
             1053:   50(fvec4) Load 55(inF0)
-            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1053
-                              Store 57(inF2) 1054
-            1056:   50(fvec4) Load 55(inF0)
-            1057:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1056
-                              Store 1055(r061) 1057
-            1059:   50(fvec4) Load 55(inF0)
-            1060:   50(fvec4) Load 56(inF1)
-            1061:   50(fvec4) Load 57(inF2)
-            1062:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1059 1060 1061
-                              Store 1058(r062) 1062
-            1064:   50(fvec4) Load 55(inF0)
-            1065:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1064
-                              Store 1063(r063) 1065
-            1067:   50(fvec4) Load 55(inF0)
-            1068:   50(fvec4) Load 56(inF1)
-            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1067 1068
-                              Store 1066(r064) 1069
+            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1053
+                              Store 1052(r060) 1054
+            1055:   50(fvec4) Load 55(inF0)
+            1056:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1055
+                              Store 56(inF1) 1056
+            1057:   50(fvec4) Load 55(inF0)
+            1058:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1057
+                              Store 57(inF2) 1058
+            1060:   50(fvec4) Load 55(inF0)
+            1061:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1060
+                              Store 1059(r061) 1061
+            1063:   50(fvec4) Load 55(inF0)
+            1064:   50(fvec4) Load 56(inF1)
+            1065:   50(fvec4) Load 57(inF2)
+            1066:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1063 1064 1065
+                              Store 1062(r062) 1066
+            1068:   50(fvec4) Load 55(inF0)
+            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1068
+                              Store 1067(r063) 1069
             1071:   50(fvec4) Load 55(inF0)
-            1072:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1071
-                              Store 1070(r065) 1072
-            1074:   50(fvec4) Load 55(inF0)
-            1075:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1074
-                              Store 1073(r066) 1075
-            1077:   50(fvec4) Load 55(inF0)
-            1078:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1077
-                              Store 1076(r067) 1078
-                              ReturnValue 1080
+            1072:   50(fvec4) Load 56(inF1)
+            1073:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1071 1072
+                              Store 1070(r064) 1073
+            1075:   50(fvec4) Load 55(inF0)
+            1076:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1075
+                              Store 1074(r065) 1076
+            1078:   50(fvec4) Load 55(inF0)
+            1079:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1078
+                              Store 1077(r066) 1079
+            1081:   50(fvec4) Load 55(inF0)
+            1082:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1081
+                              Store 1080(r067) 1082
+                              ReturnValue 1084
                               FunctionEnd
 68(PixelShaderFunction2x2(mf22;mf22;mf22;):          62 Function None 64
         65(inF0):     63(ptr) FunctionParameter
         66(inF1):     63(ptr) FunctionParameter
         67(inF2):     63(ptr) FunctionParameter
               69:             Label
-      1083(r000):    138(ptr) Variable Function
-      1088(r001):     63(ptr) Variable Function
-      1093(r003):    138(ptr) Variable Function
-      1097(r004):     63(ptr) Variable Function
-      1100(r005):     63(ptr) Variable Function
-      1103(r006):     63(ptr) Variable Function
-      1107(r007):     63(ptr) Variable Function
-      1117(r008):     63(ptr) Variable Function
-      1122(r009):     63(ptr) Variable Function
-      1125(r010):     63(ptr) Variable Function
-      1128(r011):     63(ptr) Variable Function
-      1131(r012):     63(ptr) Variable Function
-      1134(r013):     63(ptr) Variable Function
-      1137(r014):     63(ptr) Variable Function
-      1140(r015):     63(ptr) Variable Function
-      1143(r016):     63(ptr) Variable Function
-      1146(r017):     63(ptr) Variable Function
-      1149(r018):      7(ptr) Variable Function
-      1152(r019):     63(ptr) Variable Function
-      1155(R020):     63(ptr) Variable Function
-      1158(r021):     63(ptr) Variable Function
-      1161(r022):     63(ptr) Variable Function
-      1171(r023):     63(ptr) Variable Function
-      1174(r025):     63(ptr) Variable Function
-      1177(r026):     63(ptr) Variable Function
-     1181(r026a):     63(ptr) Variable Function
-      1186(r027):     63(ptr) Variable Function
-      1189(r028):     63(ptr) Variable Function
-      1193(r029):     63(ptr) Variable Function
-      1196(r030):     63(ptr) Variable Function
-      1200(r031):     63(ptr) Variable Function
-      1204(r032):     63(ptr) Variable Function
-      1208(r033):     63(ptr) Variable Function
-      1211(r034):     63(ptr) Variable Function
-      1214(r035):     63(ptr) Variable Function
-      1217(r036):     63(ptr) Variable Function
-      1222(r037):     63(ptr) Variable Function
-      1225(r038):     63(ptr) Variable Function
-      1232(r039):     63(ptr) Variable Function
-      1235(r049):     63(ptr) Variable Function
-      1240(r041):     63(ptr) Variable Function
-      1243(r042):     63(ptr) Variable Function
-      1247(r043):     63(ptr) Variable Function
-      1250(r044):     63(ptr) Variable Function
-      1255(r046):     63(ptr) Variable Function
-            1084:          62 Load 65(inF0)
-            1086:        1085 FOrdNotEqual 1084 141
-            1087:   137(bool) All 1086
-                              Store 1083(r000) 1087
-            1089:          62 Load 65(inF0)
-            1090:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1089
-                              Store 1088(r001) 1090
-            1091:          62 Load 65(inF0)
-            1092:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1091
-            1094:          62 Load 65(inF0)
-            1095:        1085 FOrdNotEqual 1094 141
-            1096:   137(bool) Any 1095
-                              Store 1093(r003) 1096
+      1087(r000):    138(ptr) Variable Function
+      1092(r001):     63(ptr) Variable Function
+      1097(r003):    138(ptr) Variable Function
+      1101(r004):     63(ptr) Variable Function
+      1104(r005):     63(ptr) Variable Function
+      1107(r006):     63(ptr) Variable Function
+      1111(r007):     63(ptr) Variable Function
+      1121(r008):     63(ptr) Variable Function
+      1126(r009):     63(ptr) Variable Function
+      1129(r010):     63(ptr) Variable Function
+      1132(r011):     63(ptr) Variable Function
+      1135(r012):     63(ptr) Variable Function
+      1138(r013):     63(ptr) Variable Function
+      1141(r014):     63(ptr) Variable Function
+      1144(r015):     63(ptr) Variable Function
+      1147(r016):     63(ptr) Variable Function
+      1150(r017):     63(ptr) Variable Function
+      1153(r018):      7(ptr) Variable Function
+      1156(r019):     63(ptr) Variable Function
+      1159(R020):     63(ptr) Variable Function
+      1162(r021):     63(ptr) Variable Function
+      1165(r022):     63(ptr) Variable Function
+      1175(r023):     63(ptr) Variable Function
+      1178(r025):     63(ptr) Variable Function
+      1181(r026):     63(ptr) Variable Function
+     1185(r026a):     63(ptr) Variable Function
+      1190(r027):     63(ptr) Variable Function
+      1193(r028):     63(ptr) Variable Function
+      1197(r029):     63(ptr) Variable Function
+      1200(r030):     63(ptr) Variable Function
+      1204(r031):     63(ptr) Variable Function
+      1208(r032):     63(ptr) Variable Function
+      1212(r033):     63(ptr) Variable Function
+      1215(r034):     63(ptr) Variable Function
+      1218(r035):     63(ptr) Variable Function
+      1221(r036):     63(ptr) Variable Function
+      1226(r037):     63(ptr) Variable Function
+      1229(r038):     63(ptr) Variable Function
+      1236(r039):     63(ptr) Variable Function
+      1239(r049):     63(ptr) Variable Function
+      1244(r041):     63(ptr) Variable Function
+      1247(r042):     63(ptr) Variable Function
+      1251(r043):     63(ptr) Variable Function
+      1254(r044):     63(ptr) Variable Function
+      1259(r046):     63(ptr) Variable Function
+            1088:          62 Load 65(inF0)
+            1090:        1089 FOrdNotEqual 1088 141
+            1091:   137(bool) All 1090
+                              Store 1087(r000) 1091
+            1093:          62 Load 65(inF0)
+            1094:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1093
+                              Store 1092(r001) 1094
+            1095:          62 Load 65(inF0)
+            1096:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1095
             1098:          62 Load 65(inF0)
-            1099:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1098
-                              Store 1097(r004) 1099
-            1101:          62 Load 65(inF0)
-            1102:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1101
-                              Store 1100(r005) 1102
-            1104:          62 Load 65(inF0)
-            1105:          62 Load 66(inF1)
-            1106:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1104 1105
-                              Store 1103(r006) 1106
+            1099:        1089 FOrdNotEqual 1098 141
+            1100:   137(bool) Any 1099
+                              Store 1097(r003) 1100
+            1102:          62 Load 65(inF0)
+            1103:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1102
+                              Store 1101(r004) 1103
+            1105:          62 Load 65(inF0)
+            1106:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1105
+                              Store 1104(r005) 1106
             1108:          62 Load 65(inF0)
-            1109:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1108
-                              Store 1107(r007) 1109
-            1110:          62 Load 65(inF0)
-            1112:        1085 FOrdLessThan 1110 1111
-            1113:   137(bool) Any 1112
-                              SelectionMerge 1115 None
-                              BranchConditional 1113 1114 1115
-            1114:               Label
+            1109:          62 Load 66(inF1)
+            1110:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1108 1109
+                              Store 1107(r006) 1110
+            1112:          62 Load 65(inF0)
+            1113:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1112
+                              Store 1111(r007) 1113
+            1114:          62 Load 65(inF0)
+            1116:        1089 FOrdLessThan 1114 1115
+            1117:   137(bool) Any 1116
+                              SelectionMerge 1119 None
+                              BranchConditional 1117 1118 1119
+            1118:               Label
                                 Kill
-            1115:             Label
-            1118:          62 Load 65(inF0)
-            1119:          62 Load 66(inF1)
-            1120:          62 Load 67(inF2)
-            1121:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1118 1119 1120
-                              Store 1117(r008) 1121
-            1123:          62 Load 65(inF0)
-            1124:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1123
-                              Store 1122(r009) 1124
-            1126:          62 Load 65(inF0)
-            1127:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1126
-                              Store 1125(r010) 1127
-            1129:          62 Load 65(inF0)
-            1130:          62 DPdx 1129
-                              Store 1128(r011) 1130
-            1132:          62 Load 65(inF0)
-            1133:          62 DPdxCoarse 1132
-                              Store 1131(r012) 1133
-            1135:          62 Load 65(inF0)
-            1136:          62 DPdxFine 1135
-                              Store 1134(r013) 1136
-            1138:          62 Load 65(inF0)
-            1139:          62 DPdy 1138
-                              Store 1137(r014) 1139
-            1141:          62 Load 65(inF0)
-            1142:          62 DPdyCoarse 1141
-                              Store 1140(r015) 1142
-            1144:          62 Load 65(inF0)
-            1145:          62 DPdyFine 1144
-                              Store 1143(r016) 1145
-            1147:          62 Load 65(inF0)
-            1148:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1147
-                              Store 1146(r017) 1148
-            1150:          62 Load 65(inF0)
-            1151:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1150
-                              Store 1149(r018) 1151
-            1153:          62 Load 65(inF0)
-            1154:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1153
-                              Store 1152(r019) 1154
-            1156:          62 Load 65(inF0)
-            1157:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1156
-                              Store 1155(R020) 1157
-            1159:          62 Load 65(inF0)
-            1160:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1159
-                              Store 1158(r021) 1160
-            1162:          62 Load 65(inF0)
-            1163:          62 Load 66(inF1)
-            1164:   26(fvec2) CompositeExtract 1162 0
-            1165:   26(fvec2) CompositeExtract 1163 0
-            1166:   26(fvec2) FMod 1164 1165
-            1167:   26(fvec2) CompositeExtract 1162 1
-            1168:   26(fvec2) CompositeExtract 1163 1
-            1169:   26(fvec2) FMod 1167 1168
-            1170:          62 CompositeConstruct 1166 1169
-                              Store 1161(r022) 1170
-            1172:          62 Load 65(inF0)
-            1173:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1172
-                              Store 1171(r023) 1173
-            1175:          62 Load 65(inF0)
-            1176:          62 Fwidth 1175
-                              Store 1174(r025) 1176
-            1178:          62 Load 65(inF0)
-            1179:          62 Load 66(inF1)
-            1180:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1178 1179
-                              Store 1177(r026) 1180
+            1119:             Label
+            1122:          62 Load 65(inF0)
+            1123:          62 Load 66(inF1)
+            1124:          62 Load 67(inF2)
+            1125:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1122 1123 1124
+                              Store 1121(r008) 1125
+            1127:          62 Load 65(inF0)
+            1128:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1127
+                              Store 1126(r009) 1128
+            1130:          62 Load 65(inF0)
+            1131:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1130
+                              Store 1129(r010) 1131
+            1133:          62 Load 65(inF0)
+            1134:          62 DPdx 1133
+                              Store 1132(r011) 1134
+            1136:          62 Load 65(inF0)
+            1137:          62 DPdxCoarse 1136
+                              Store 1135(r012) 1137
+            1139:          62 Load 65(inF0)
+            1140:          62 DPdxFine 1139
+                              Store 1138(r013) 1140
+            1142:          62 Load 65(inF0)
+            1143:          62 DPdy 1142
+                              Store 1141(r014) 1143
+            1145:          62 Load 65(inF0)
+            1146:          62 DPdyCoarse 1145
+                              Store 1144(r015) 1146
+            1148:          62 Load 65(inF0)
+            1149:          62 DPdyFine 1148
+                              Store 1147(r016) 1149
+            1151:          62 Load 65(inF0)
+            1152:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1151
+                              Store 1150(r017) 1152
+            1154:          62 Load 65(inF0)
+            1155:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1154
+                              Store 1153(r018) 1155
+            1157:          62 Load 65(inF0)
+            1158:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1157
+                              Store 1156(r019) 1158
+            1160:          62 Load 65(inF0)
+            1161:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1160
+                              Store 1159(R020) 1161
+            1163:          62 Load 65(inF0)
+            1164:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1163
+                              Store 1162(r021) 1164
+            1166:          62 Load 65(inF0)
+            1167:          62 Load 66(inF1)
+            1168:   26(fvec2) CompositeExtract 1166 0
+            1169:   26(fvec2) CompositeExtract 1167 0
+            1170:   26(fvec2) FMod 1168 1169
+            1171:   26(fvec2) CompositeExtract 1166 1
+            1172:   26(fvec2) CompositeExtract 1167 1
+            1173:   26(fvec2) FMod 1171 1172
+            1174:          62 CompositeConstruct 1170 1173
+                              Store 1165(r022) 1174
+            1176:          62 Load 65(inF0)
+            1177:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1176
+                              Store 1175(r023) 1177
+            1179:          62 Load 65(inF0)
+            1180:          62 Fwidth 1179
+                              Store 1178(r025) 1180
             1182:          62 Load 65(inF0)
             1183:          62 Load 66(inF1)
-            1184:          62 Load 67(inF2)
-            1185:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1182 1183 1184
-                              Store 1181(r026a) 1185
-            1187:          62 Load 65(inF0)
-            1188:          62 ExtInst 1(GLSL.std.450) 28(Log) 1187
-                              Store 1186(r027) 1188
-            1190:          62 Load 65(inF0)
-            1191:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1190
-            1192:          62 MatrixTimesScalar 1191 268
-                              Store 1189(r028) 1192
+            1184:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1182 1183
+                              Store 1181(r026) 1184
+            1186:          62 Load 65(inF0)
+            1187:          62 Load 66(inF1)
+            1188:          62 Load 67(inF2)
+            1189:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1186 1187 1188
+                              Store 1185(r026a) 1189
+            1191:          62 Load 65(inF0)
+            1192:          62 ExtInst 1(GLSL.std.450) 28(Log) 1191
+                              Store 1190(r027) 1192
             1194:          62 Load 65(inF0)
             1195:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1194
-                              Store 1193(r029) 1195
-            1197:          62 Load 65(inF0)
-            1198:          62 Load 66(inF1)
-            1199:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1197 1198
-                              Store 1196(r030) 1199
+            1196:          62 MatrixTimesScalar 1195 272
+                              Store 1193(r028) 1196
+            1198:          62 Load 65(inF0)
+            1199:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1198
+                              Store 1197(r029) 1199
             1201:          62 Load 65(inF0)
             1202:          62 Load 66(inF1)
-            1203:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1201 1202
-                              Store 1200(r031) 1203
+            1203:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1201 1202
+                              Store 1200(r030) 1203
             1205:          62 Load 65(inF0)
             1206:          62 Load 66(inF1)
-            1207:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1205 1206
-                              Store 1204(r032) 1207
+            1207:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1205 1206
+                              Store 1204(r031) 1207
             1209:          62 Load 65(inF0)
-            1210:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1209
-                              Store 1208(r033) 1210
-            1212:          62 Load 65(inF0)
-            1213:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1212
-                              Store 1211(r034) 1213
-            1215:          62 Load 65(inF0)
-            1216:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1215
-                              Store 1214(r035) 1216
-            1218:          62 Load 65(inF0)
-            1219:   26(fvec2) CompositeConstruct 141 141
-            1220:   26(fvec2) CompositeConstruct 289 289
-            1221:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1218 1219 1220
-                              Store 1217(r036) 1221
-            1223:          62 Load 65(inF0)
-            1224:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1223
-                              Store 1222(r037) 1224
-            1226:          62 Load 65(inF0)
-            1227:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1226
-                              Store 1225(r038) 1227
-            1228:          62 Load 65(inF0)
-            1229:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1228
-                              Store 66(inF1) 1229
+            1210:          62 Load 66(inF1)
+            1211:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1209 1210
+                              Store 1208(r032) 1211
+            1213:          62 Load 65(inF0)
+            1214:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1213
+                              Store 1212(r033) 1214
+            1216:          62 Load 65(inF0)
+            1217:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1216
+                              Store 1215(r034) 1217
+            1219:          62 Load 65(inF0)
+            1220:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1219
+                              Store 1218(r035) 1220
+            1222:          62 Load 65(inF0)
+            1223:   26(fvec2) CompositeConstruct 141 141
+            1224:   26(fvec2) CompositeConstruct 293 293
+            1225:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1222 1223 1224
+                              Store 1221(r036) 1225
+            1227:          62 Load 65(inF0)
+            1228:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1227
+                              Store 1226(r037) 1228
             1230:          62 Load 65(inF0)
-            1231:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1230
-                              Store 67(inF2) 1231
-            1233:          62 Load 65(inF0)
-            1234:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1233
-                              Store 1232(r039) 1234
-            1236:          62 Load 65(inF0)
-            1237:          62 Load 66(inF1)
-            1238:          62 Load 67(inF2)
-            1239:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1236 1237 1238
-                              Store 1235(r049) 1239
-            1241:          62 Load 65(inF0)
-            1242:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1241
-                              Store 1240(r041) 1242
-            1244:          62 Load 65(inF0)
-            1245:          62 Load 66(inF1)
-            1246:          62 ExtInst 1(GLSL.std.450) 48(Step) 1244 1245
-                              Store 1243(r042) 1246
+            1231:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1230
+                              Store 1229(r038) 1231
+            1232:          62 Load 65(inF0)
+            1233:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1232
+                              Store 66(inF1) 1233
+            1234:          62 Load 65(inF0)
+            1235:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1234
+                              Store 67(inF2) 1235
+            1237:          62 Load 65(inF0)
+            1238:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1237
+                              Store 1236(r039) 1238
+            1240:          62 Load 65(inF0)
+            1241:          62 Load 66(inF1)
+            1242:          62 Load 67(inF2)
+            1243:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1240 1241 1242
+                              Store 1239(r049) 1243
+            1245:          62 Load 65(inF0)
+            1246:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1245
+                              Store 1244(r041) 1246
             1248:          62 Load 65(inF0)
-            1249:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1248
-                              Store 1247(r043) 1249
-            1251:          62 Load 65(inF0)
-            1252:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1251
-                              Store 1250(r044) 1252
-            1253:          62 Load 65(inF0)
-            1254:          62 Transpose 1253
-            1256:          62 Load 65(inF0)
-            1257:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1256
-                              Store 1255(r046) 1257
-                              ReturnValue 1259
+            1249:          62 Load 66(inF1)
+            1250:          62 ExtInst 1(GLSL.std.450) 48(Step) 1248 1249
+                              Store 1247(r042) 1250
+            1252:          62 Load 65(inF0)
+            1253:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1252
+                              Store 1251(r043) 1253
+            1255:          62 Load 65(inF0)
+            1256:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1255
+                              Store 1254(r044) 1256
+            1257:          62 Load 65(inF0)
+            1258:          62 Transpose 1257
+            1260:          62 Load 65(inF0)
+            1261:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1260
+                              Store 1259(r046) 1261
+                              ReturnValue 1263
                               FunctionEnd
 76(PixelShaderFunction3x3(mf33;mf33;mf33;):          70 Function None 72
         73(inF0):     71(ptr) FunctionParameter
         74(inF1):     71(ptr) FunctionParameter
         75(inF2):     71(ptr) FunctionParameter
               77:             Label
-      1262(r000):    138(ptr) Variable Function
-      1267(r001):     71(ptr) Variable Function
-      1272(r003):    138(ptr) Variable Function
-      1276(r004):     71(ptr) Variable Function
-      1279(r005):     71(ptr) Variable Function
-      1282(r006):     71(ptr) Variable Function
-      1286(r007):     71(ptr) Variable Function
-      1296(r008):     71(ptr) Variable Function
-      1301(r009):     71(ptr) Variable Function
-      1304(r010):     71(ptr) Variable Function
-      1307(r011):     71(ptr) Variable Function
-      1310(r012):     71(ptr) Variable Function
-      1313(r013):     71(ptr) Variable Function
-      1316(r014):     71(ptr) Variable Function
-      1319(r015):     71(ptr) Variable Function
-      1322(r016):     71(ptr) Variable Function
-      1325(r017):     71(ptr) Variable Function
-      1328(r018):      7(ptr) Variable Function
-      1331(r019):     71(ptr) Variable Function
-      1334(R020):     71(ptr) Variable Function
-      1337(r021):     71(ptr) Variable Function
-      1340(r022):     71(ptr) Variable Function
-      1353(r023):     71(ptr) Variable Function
-      1356(r025):     71(ptr) Variable Function
-      1359(r026):     71(ptr) Variable Function
-     1363(r026a):     71(ptr) Variable Function
-      1368(r027):     71(ptr) Variable Function
-      1371(r028):     71(ptr) Variable Function
-      1375(r029):     71(ptr) Variable Function
-      1378(r030):     71(ptr) Variable Function
-      1382(r031):     71(ptr) Variable Function
-      1386(r032):     71(ptr) Variable Function
-      1390(r033):     71(ptr) Variable Function
-      1393(r034):     71(ptr) Variable Function
-      1396(r035):     71(ptr) Variable Function
-      1399(r036):     71(ptr) Variable Function
-      1404(r037):     71(ptr) Variable Function
-      1407(r038):     71(ptr) Variable Function
-      1414(r039):     71(ptr) Variable Function
-      1417(r049):     71(ptr) Variable Function
-      1422(r041):     71(ptr) Variable Function
-      1425(r042):     71(ptr) Variable Function
-      1429(r043):     71(ptr) Variable Function
-      1432(r044):     71(ptr) Variable Function
-      1437(r046):     71(ptr) Variable Function
-            1263:          70 Load 73(inF0)
-            1265:        1264 FOrdNotEqual 1263 141
-            1266:   137(bool) All 1265
-                              Store 1262(r000) 1266
-            1268:          70 Load 73(inF0)
-            1269:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1268
-                              Store 1267(r001) 1269
-            1270:          70 Load 73(inF0)
-            1271:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1270
-            1273:          70 Load 73(inF0)
-            1274:        1264 FOrdNotEqual 1273 141
-            1275:   137(bool) Any 1274
-                              Store 1272(r003) 1275
+      1266(r000):    138(ptr) Variable Function
+      1271(r001):     71(ptr) Variable Function
+      1276(r003):    138(ptr) Variable Function
+      1280(r004):     71(ptr) Variable Function
+      1283(r005):     71(ptr) Variable Function
+      1286(r006):     71(ptr) Variable Function
+      1290(r007):     71(ptr) Variable Function
+      1300(r008):     71(ptr) Variable Function
+      1305(r009):     71(ptr) Variable Function
+      1308(r010):     71(ptr) Variable Function
+      1311(r011):     71(ptr) Variable Function
+      1314(r012):     71(ptr) Variable Function
+      1317(r013):     71(ptr) Variable Function
+      1320(r014):     71(ptr) Variable Function
+      1323(r015):     71(ptr) Variable Function
+      1326(r016):     71(ptr) Variable Function
+      1329(r017):     71(ptr) Variable Function
+      1332(r018):      7(ptr) Variable Function
+      1335(r019):     71(ptr) Variable Function
+      1338(R020):     71(ptr) Variable Function
+      1341(r021):     71(ptr) Variable Function
+      1344(r022):     71(ptr) Variable Function
+      1357(r023):     71(ptr) Variable Function
+      1360(r025):     71(ptr) Variable Function
+      1363(r026):     71(ptr) Variable Function
+     1367(r026a):     71(ptr) Variable Function
+      1372(r027):     71(ptr) Variable Function
+      1375(r028):     71(ptr) Variable Function
+      1379(r029):     71(ptr) Variable Function
+      1382(r030):     71(ptr) Variable Function
+      1386(r031):     71(ptr) Variable Function
+      1390(r032):     71(ptr) Variable Function
+      1394(r033):     71(ptr) Variable Function
+      1397(r034):     71(ptr) Variable Function
+      1400(r035):     71(ptr) Variable Function
+      1403(r036):     71(ptr) Variable Function
+      1408(r037):     71(ptr) Variable Function
+      1411(r038):     71(ptr) Variable Function
+      1418(r039):     71(ptr) Variable Function
+      1421(r049):     71(ptr) Variable Function
+      1426(r041):     71(ptr) Variable Function
+      1429(r042):     71(ptr) Variable Function
+      1433(r043):     71(ptr) Variable Function
+      1436(r044):     71(ptr) Variable Function
+      1441(r046):     71(ptr) Variable Function
+            1267:          70 Load 73(inF0)
+            1269:        1268 FOrdNotEqual 1267 141
+            1270:   137(bool) All 1269
+                              Store 1266(r000) 1270
+            1272:          70 Load 73(inF0)
+            1273:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1272
+                              Store 1271(r001) 1273
+            1274:          70 Load 73(inF0)
+            1275:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1274
             1277:          70 Load 73(inF0)
-            1278:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1277
-                              Store 1276(r004) 1278
-            1280:          70 Load 73(inF0)
-            1281:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1280
-                              Store 1279(r005) 1281
-            1283:          70 Load 73(inF0)
-            1284:          70 Load 74(inF1)
-            1285:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1283 1284
-                              Store 1282(r006) 1285
+            1278:        1268 FOrdNotEqual 1277 141
+            1279:   137(bool) Any 1278
+                              Store 1276(r003) 1279
+            1281:          70 Load 73(inF0)
+            1282:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1281
+                              Store 1280(r004) 1282
+            1284:          70 Load 73(inF0)
+            1285:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1284
+                              Store 1283(r005) 1285
             1287:          70 Load 73(inF0)
-            1288:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1287
-                              Store 1286(r007) 1288
-            1289:          70 Load 73(inF0)
-            1291:        1264 FOrdLessThan 1289 1290
-            1292:   137(bool) Any 1291
-                              SelectionMerge 1294 None
-                              BranchConditional 1292 1293 1294
-            1293:               Label
+            1288:          70 Load 74(inF1)
+            1289:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1287 1288
+                              Store 1286(r006) 1289
+            1291:          70 Load 73(inF0)
+            1292:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1291
+                              Store 1290(r007) 1292
+            1293:          70 Load 73(inF0)
+            1295:        1268 FOrdLessThan 1293 1294
+            1296:   137(bool) Any 1295
+                              SelectionMerge 1298 None
+                              BranchConditional 1296 1297 1298
+            1297:               Label
                                 Kill
-            1294:             Label
-            1297:          70 Load 73(inF0)
-            1298:          70 Load 74(inF1)
-            1299:          70 Load 75(inF2)
-            1300:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1297 1298 1299
-                              Store 1296(r008) 1300
-            1302:          70 Load 73(inF0)
-            1303:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1302
-                              Store 1301(r009) 1303
-            1305:          70 Load 73(inF0)
-            1306:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1305
-                              Store 1304(r010) 1306
-            1308:          70 Load 73(inF0)
-            1309:          70 DPdx 1308
-                              Store 1307(r011) 1309
-            1311:          70 Load 73(inF0)
-            1312:          70 DPdxCoarse 1311
-                              Store 1310(r012) 1312
-            1314:          70 Load 73(inF0)
-            1315:          70 DPdxFine 1314
-                              Store 1313(r013) 1315
-            1317:          70 Load 73(inF0)
-            1318:          70 DPdy 1317
-                              Store 1316(r014) 1318
-            1320:          70 Load 73(inF0)
-            1321:          70 DPdyCoarse 1320
-                              Store 1319(r015) 1321
-            1323:          70 Load 73(inF0)
-            1324:          70 DPdyFine 1323
-                              Store 1322(r016) 1324
-            1326:          70 Load 73(inF0)
-            1327:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1326
-                              Store 1325(r017) 1327
-            1329:          70 Load 73(inF0)
-            1330:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1329
-                              Store 1328(r018) 1330
-            1332:          70 Load 73(inF0)
-            1333:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1332
-                              Store 1331(r019) 1333
-            1335:          70 Load 73(inF0)
-            1336:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1335
-                              Store 1334(R020) 1336
-            1338:          70 Load 73(inF0)
-            1339:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1338
-                              Store 1337(r021) 1339
-            1341:          70 Load 73(inF0)
-            1342:          70 Load 74(inF1)
-            1343:   38(fvec3) CompositeExtract 1341 0
-            1344:   38(fvec3) CompositeExtract 1342 0
-            1345:   38(fvec3) FMod 1343 1344
-            1346:   38(fvec3) CompositeExtract 1341 1
-            1347:   38(fvec3) CompositeExtract 1342 1
-            1348:   38(fvec3) FMod 1346 1347
-            1349:   38(fvec3) CompositeExtract 1341 2
-            1350:   38(fvec3) CompositeExtract 1342 2
-            1351:   38(fvec3) FMod 1349 1350
-            1352:          70 CompositeConstruct 1345 1348 1351
-                              Store 1340(r022) 1352
-            1354:          70 Load 73(inF0)
-            1355:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1354
-                              Store 1353(r023) 1355
-            1357:          70 Load 73(inF0)
-            1358:          70 Fwidth 1357
-                              Store 1356(r025) 1358
-            1360:          70 Load 73(inF0)
-            1361:          70 Load 74(inF1)
-            1362:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1360 1361
-                              Store 1359(r026) 1362
+            1298:             Label
+            1301:          70 Load 73(inF0)
+            1302:          70 Load 74(inF1)
+            1303:          70 Load 75(inF2)
+            1304:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1301 1302 1303
+                              Store 1300(r008) 1304
+            1306:          70 Load 73(inF0)
+            1307:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1306
+                              Store 1305(r009) 1307
+            1309:          70 Load 73(inF0)
+            1310:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1309
+                              Store 1308(r010) 1310
+            1312:          70 Load 73(inF0)
+            1313:          70 DPdx 1312
+                              Store 1311(r011) 1313
+            1315:          70 Load 73(inF0)
+            1316:          70 DPdxCoarse 1315
+                              Store 1314(r012) 1316
+            1318:          70 Load 73(inF0)
+            1319:          70 DPdxFine 1318
+                              Store 1317(r013) 1319
+            1321:          70 Load 73(inF0)
+            1322:          70 DPdy 1321
+                              Store 1320(r014) 1322
+            1324:          70 Load 73(inF0)
+            1325:          70 DPdyCoarse 1324
+                              Store 1323(r015) 1325
+            1327:          70 Load 73(inF0)
+            1328:          70 DPdyFine 1327
+                              Store 1326(r016) 1328
+            1330:          70 Load 73(inF0)
+            1331:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1330
+                              Store 1329(r017) 1331
+            1333:          70 Load 73(inF0)
+            1334:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1333
+                              Store 1332(r018) 1334
+            1336:          70 Load 73(inF0)
+            1337:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1336
+                              Store 1335(r019) 1337
+            1339:          70 Load 73(inF0)
+            1340:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1339
+                              Store 1338(R020) 1340
+            1342:          70 Load 73(inF0)
+            1343:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1342
+                              Store 1341(r021) 1343
+            1345:          70 Load 73(inF0)
+            1346:          70 Load 74(inF1)
+            1347:   38(fvec3) CompositeExtract 1345 0
+            1348:   38(fvec3) CompositeExtract 1346 0
+            1349:   38(fvec3) FMod 1347 1348
+            1350:   38(fvec3) CompositeExtract 1345 1
+            1351:   38(fvec3) CompositeExtract 1346 1
+            1352:   38(fvec3) FMod 1350 1351
+            1353:   38(fvec3) CompositeExtract 1345 2
+            1354:   38(fvec3) CompositeExtract 1346 2
+            1355:   38(fvec3) FMod 1353 1354
+            1356:          70 CompositeConstruct 1349 1352 1355
+                              Store 1344(r022) 1356
+            1358:          70 Load 73(inF0)
+            1359:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1358
+                              Store 1357(r023) 1359
+            1361:          70 Load 73(inF0)
+            1362:          70 Fwidth 1361
+                              Store 1360(r025) 1362
             1364:          70 Load 73(inF0)
             1365:          70 Load 74(inF1)
-            1366:          70 Load 75(inF2)
-            1367:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1364 1365 1366
-                              Store 1363(r026a) 1367
-            1369:          70 Load 73(inF0)
-            1370:          70 ExtInst 1(GLSL.std.450) 28(Log) 1369
-                              Store 1368(r027) 1370
-            1372:          70 Load 73(inF0)
-            1373:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1372
-            1374:          70 MatrixTimesScalar 1373 268
-                              Store 1371(r028) 1374
+            1366:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1364 1365
+                              Store 1363(r026) 1366
+            1368:          70 Load 73(inF0)
+            1369:          70 Load 74(inF1)
+            1370:          70 Load 75(inF2)
+            1371:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1368 1369 1370
+                              Store 1367(r026a) 1371
+            1373:          70 Load 73(inF0)
+            1374:          70 ExtInst 1(GLSL.std.450) 28(Log) 1373
+                              Store 1372(r027) 1374
             1376:          70 Load 73(inF0)
             1377:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1376
-                              Store 1375(r029) 1377
-            1379:          70 Load 73(inF0)
-            1380:          70 Load 74(inF1)
-            1381:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1379 1380
-                              Store 1378(r030) 1381
+            1378:          70 MatrixTimesScalar 1377 272
+                              Store 1375(r028) 1378
+            1380:          70 Load 73(inF0)
+            1381:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1380
+                              Store 1379(r029) 1381
             1383:          70 Load 73(inF0)
             1384:          70 Load 74(inF1)
-            1385:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1383 1384
-                              Store 1382(r031) 1385
+            1385:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1383 1384
+                              Store 1382(r030) 1385
             1387:          70 Load 73(inF0)
             1388:          70 Load 74(inF1)
-            1389:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1387 1388
-                              Store 1386(r032) 1389
+            1389:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1387 1388
+                              Store 1386(r031) 1389
             1391:          70 Load 73(inF0)
-            1392:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1391
-                              Store 1390(r033) 1392
-            1394:          70 Load 73(inF0)
-            1395:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1394
-                              Store 1393(r034) 1395
-            1397:          70 Load 73(inF0)
-            1398:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1397
-                              Store 1396(r035) 1398
-            1400:          70 Load 73(inF0)
-            1401:   38(fvec3) CompositeConstruct 141 141 141
-            1402:   38(fvec3) CompositeConstruct 289 289 289
-            1403:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1400 1401 1402
-                              Store 1399(r036) 1403
-            1405:          70 Load 73(inF0)
-            1406:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1405
-                              Store 1404(r037) 1406
-            1408:          70 Load 73(inF0)
-            1409:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1408
-                              Store 1407(r038) 1409
-            1410:          70 Load 73(inF0)
-            1411:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1410
-                              Store 74(inF1) 1411
+            1392:          70 Load 74(inF1)
+            1393:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1391 1392
+                              Store 1390(r032) 1393
+            1395:          70 Load 73(inF0)
+            1396:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1395
+                              Store 1394(r033) 1396
+            1398:          70 Load 73(inF0)
+            1399:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1398
+                              Store 1397(r034) 1399
+            1401:          70 Load 73(inF0)
+            1402:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1401
+                              Store 1400(r035) 1402
+            1404:          70 Load 73(inF0)
+            1405:   38(fvec3) CompositeConstruct 141 141 141
+            1406:   38(fvec3) CompositeConstruct 293 293 293
+            1407:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1404 1405 1406
+                              Store 1403(r036) 1407
+            1409:          70 Load 73(inF0)
+            1410:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1409
+                              Store 1408(r037) 1410
             1412:          70 Load 73(inF0)
-            1413:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1412
-                              Store 75(inF2) 1413
-            1415:          70 Load 73(inF0)
-            1416:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1415
-                              Store 1414(r039) 1416
-            1418:          70 Load 73(inF0)
-            1419:          70 Load 74(inF1)
-            1420:          70 Load 75(inF2)
-            1421:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1418 1419 1420
-                              Store 1417(r049) 1421
-            1423:          70 Load 73(inF0)
-            1424:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1423
-                              Store 1422(r041) 1424
-            1426:          70 Load 73(inF0)
-            1427:          70 Load 74(inF1)
-            1428:          70 ExtInst 1(GLSL.std.450) 48(Step) 1426 1427
-                              Store 1425(r042) 1428
+            1413:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1412
+                              Store 1411(r038) 1413
+            1414:          70 Load 73(inF0)
+            1415:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1414
+                              Store 74(inF1) 1415
+            1416:          70 Load 73(inF0)
+            1417:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1416
+                              Store 75(inF2) 1417
+            1419:          70 Load 73(inF0)
+            1420:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1419
+                              Store 1418(r039) 1420
+            1422:          70 Load 73(inF0)
+            1423:          70 Load 74(inF1)
+            1424:          70 Load 75(inF2)
+            1425:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1422 1423 1424
+                              Store 1421(r049) 1425
+            1427:          70 Load 73(inF0)
+            1428:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1427
+                              Store 1426(r041) 1428
             1430:          70 Load 73(inF0)
-            1431:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1430
-                              Store 1429(r043) 1431
-            1433:          70 Load 73(inF0)
-            1434:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1433
-                              Store 1432(r044) 1434
-            1435:          70 Load 73(inF0)
-            1436:          70 Transpose 1435
-            1438:          70 Load 73(inF0)
-            1439:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1438
-                              Store 1437(r046) 1439
-                              ReturnValue 1441
+            1431:          70 Load 74(inF1)
+            1432:          70 ExtInst 1(GLSL.std.450) 48(Step) 1430 1431
+                              Store 1429(r042) 1432
+            1434:          70 Load 73(inF0)
+            1435:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1434
+                              Store 1433(r043) 1435
+            1437:          70 Load 73(inF0)
+            1438:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1437
+                              Store 1436(r044) 1438
+            1439:          70 Load 73(inF0)
+            1440:          70 Transpose 1439
+            1442:          70 Load 73(inF0)
+            1443:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1442
+                              Store 1441(r046) 1443
+                              ReturnValue 1445
                               FunctionEnd
 84(PixelShaderFunction4x4(mf44;mf44;mf44;):          78 Function None 80
         81(inF0):     79(ptr) FunctionParameter
         82(inF1):     79(ptr) FunctionParameter
         83(inF2):     79(ptr) FunctionParameter
               85:             Label
-      1444(r000):    138(ptr) Variable Function
-      1449(r001):     79(ptr) Variable Function
-      1454(r003):    138(ptr) Variable Function
-      1458(r004):     79(ptr) Variable Function
-      1461(r005):     79(ptr) Variable Function
-      1464(r006):     79(ptr) Variable Function
-      1468(r007):     79(ptr) Variable Function
-      1478(r008):     79(ptr) Variable Function
-      1483(r009):     79(ptr) Variable Function
-      1486(r010):     79(ptr) Variable Function
-      1489(r011):     79(ptr) Variable Function
-      1492(r012):     79(ptr) Variable Function
-      1495(r013):     79(ptr) Variable Function
-      1498(r014):     79(ptr) Variable Function
-      1501(r015):     79(ptr) Variable Function
-      1504(r016):     79(ptr) Variable Function
-      1507(r017):     79(ptr) Variable Function
-      1510(r018):      7(ptr) Variable Function
-      1513(r019):     79(ptr) Variable Function
-      1516(R020):     79(ptr) Variable Function
-      1519(r021):     79(ptr) Variable Function
-      1522(r022):     79(ptr) Variable Function
-      1538(r023):     79(ptr) Variable Function
-      1541(r025):     79(ptr) Variable Function
-      1544(r026):     79(ptr) Variable Function
-     1548(r026a):     79(ptr) Variable Function
-      1553(r027):     79(ptr) Variable Function
-      1556(r028):     79(ptr) Variable Function
-      1560(r029):     79(ptr) Variable Function
-      1563(r030):     79(ptr) Variable Function
-      1567(r031):     79(ptr) Variable Function
-      1571(r032):     79(ptr) Variable Function
-      1575(r033):     79(ptr) Variable Function
-      1578(r034):     79(ptr) Variable Function
-      1581(r035):     79(ptr) Variable Function
-      1584(r036):     79(ptr) Variable Function
-      1589(r037):     79(ptr) Variable Function
-      1592(r038):     79(ptr) Variable Function
-      1599(r039):     79(ptr) Variable Function
-      1602(r049):     79(ptr) Variable Function
-      1607(r041):     79(ptr) Variable Function
-      1610(r042):     79(ptr) Variable Function
-      1614(r043):     79(ptr) Variable Function
-      1617(r044):     79(ptr) Variable Function
-      1622(r046):     79(ptr) Variable Function
-            1445:          78 Load 81(inF0)
-            1447:        1446 FOrdNotEqual 1445 141
-            1448:   137(bool) All 1447
-                              Store 1444(r000) 1448
-            1450:          78 Load 81(inF0)
-            1451:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1450
-                              Store 1449(r001) 1451
-            1452:          78 Load 81(inF0)
-            1453:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1452
-            1455:          78 Load 81(inF0)
-            1456:        1446 FOrdNotEqual 1455 141
-            1457:   137(bool) Any 1456
-                              Store 1454(r003) 1457
+      1448(r000):    138(ptr) Variable Function
+      1453(r001):     79(ptr) Variable Function
+      1458(r003):    138(ptr) Variable Function
+      1462(r004):     79(ptr) Variable Function
+      1465(r005):     79(ptr) Variable Function
+      1468(r006):     79(ptr) Variable Function
+      1472(r007):     79(ptr) Variable Function
+      1482(r008):     79(ptr) Variable Function
+      1487(r009):     79(ptr) Variable Function
+      1490(r010):     79(ptr) Variable Function
+      1493(r011):     79(ptr) Variable Function
+      1496(r012):     79(ptr) Variable Function
+      1499(r013):     79(ptr) Variable Function
+      1502(r014):     79(ptr) Variable Function
+      1505(r015):     79(ptr) Variable Function
+      1508(r016):     79(ptr) Variable Function
+      1511(r017):     79(ptr) Variable Function
+      1514(r018):      7(ptr) Variable Function
+      1517(r019):     79(ptr) Variable Function
+      1520(R020):     79(ptr) Variable Function
+      1523(r021):     79(ptr) Variable Function
+      1526(r022):     79(ptr) Variable Function
+      1542(r023):     79(ptr) Variable Function
+      1545(r025):     79(ptr) Variable Function
+      1548(r026):     79(ptr) Variable Function
+     1552(r026a):     79(ptr) Variable Function
+      1557(r027):     79(ptr) Variable Function
+      1560(r028):     79(ptr) Variable Function
+      1564(r029):     79(ptr) Variable Function
+      1567(r030):     79(ptr) Variable Function
+      1571(r031):     79(ptr) Variable Function
+      1575(r032):     79(ptr) Variable Function
+      1579(r033):     79(ptr) Variable Function
+      1582(r034):     79(ptr) Variable Function
+      1585(r035):     79(ptr) Variable Function
+      1588(r036):     79(ptr) Variable Function
+      1593(r037):     79(ptr) Variable Function
+      1596(r038):     79(ptr) Variable Function
+      1603(r039):     79(ptr) Variable Function
+      1606(r049):     79(ptr) Variable Function
+      1611(r041):     79(ptr) Variable Function
+      1614(r042):     79(ptr) Variable Function
+      1618(r043):     79(ptr) Variable Function
+      1621(r044):     79(ptr) Variable Function
+      1626(r046):     79(ptr) Variable Function
+            1449:          78 Load 81(inF0)
+            1451:        1450 FOrdNotEqual 1449 141
+            1452:   137(bool) All 1451
+                              Store 1448(r000) 1452
+            1454:          78 Load 81(inF0)
+            1455:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1454
+                              Store 1453(r001) 1455
+            1456:          78 Load 81(inF0)
+            1457:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1456
             1459:          78 Load 81(inF0)
-            1460:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1459
-                              Store 1458(r004) 1460
-            1462:          78 Load 81(inF0)
-            1463:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1462
-                              Store 1461(r005) 1463
-            1465:          78 Load 81(inF0)
-            1466:          78 Load 82(inF1)
-            1467:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1465 1466
-                              Store 1464(r006) 1467
+            1460:        1450 FOrdNotEqual 1459 141
+            1461:   137(bool) Any 1460
+                              Store 1458(r003) 1461
+            1463:          78 Load 81(inF0)
+            1464:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1463
+                              Store 1462(r004) 1464
+            1466:          78 Load 81(inF0)
+            1467:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1466
+                              Store 1465(r005) 1467
             1469:          78 Load 81(inF0)
-            1470:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1469
-                              Store 1468(r007) 1470
-            1471:          78 Load 81(inF0)
-            1473:        1446 FOrdLessThan 1471 1472
-            1474:   137(bool) Any 1473
-                              SelectionMerge 1476 None
-                              BranchConditional 1474 1475 1476
-            1475:               Label
+            1470:          78 Load 82(inF1)
+            1471:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1469 1470
+                              Store 1468(r006) 1471
+            1473:          78 Load 81(inF0)
+            1474:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1473
+                              Store 1472(r007) 1474
+            1475:          78 Load 81(inF0)
+            1477:        1450 FOrdLessThan 1475 1476
+            1478:   137(bool) Any 1477
+                              SelectionMerge 1480 None
+                              BranchConditional 1478 1479 1480
+            1479:               Label
                                 Kill
-            1476:             Label
-            1479:          78 Load 81(inF0)
-            1480:          78 Load 82(inF1)
-            1481:          78 Load 83(inF2)
-            1482:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1479 1480 1481
-                              Store 1478(r008) 1482
-            1484:          78 Load 81(inF0)
-            1485:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1484
-                              Store 1483(r009) 1485
-            1487:          78 Load 81(inF0)
-            1488:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1487
-                              Store 1486(r010) 1488
-            1490:          78 Load 81(inF0)
-            1491:          78 DPdx 1490
-                              Store 1489(r011) 1491
-            1493:          78 Load 81(inF0)
-            1494:          78 DPdxCoarse 1493
-                              Store 1492(r012) 1494
-            1496:          78 Load 81(inF0)
-            1497:          78 DPdxFine 1496
-                              Store 1495(r013) 1497
-            1499:          78 Load 81(inF0)
-            1500:          78 DPdy 1499
-                              Store 1498(r014) 1500
-            1502:          78 Load 81(inF0)
-            1503:          78 DPdyCoarse 1502
-                              Store 1501(r015) 1503
-            1505:          78 Load 81(inF0)
-            1506:          78 DPdyFine 1505
-                              Store 1504(r016) 1506
-            1508:          78 Load 81(inF0)
-            1509:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1508
-                              Store 1507(r017) 1509
-            1511:          78 Load 81(inF0)
-            1512:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1511
-                              Store 1510(r018) 1512
-            1514:          78 Load 81(inF0)
-            1515:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1514
-                              Store 1513(r019) 1515
-            1517:          78 Load 81(inF0)
-            1518:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1517
-                              Store 1516(R020) 1518
-            1520:          78 Load 81(inF0)
-            1521:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1520
-                              Store 1519(r021) 1521
-            1523:          78 Load 81(inF0)
-            1524:          78 Load 82(inF1)
-            1525:   50(fvec4) CompositeExtract 1523 0
-            1526:   50(fvec4) CompositeExtract 1524 0
-            1527:   50(fvec4) FMod 1525 1526
-            1528:   50(fvec4) CompositeExtract 1523 1
-            1529:   50(fvec4) CompositeExtract 1524 1
-            1530:   50(fvec4) FMod 1528 1529
-            1531:   50(fvec4) CompositeExtract 1523 2
-            1532:   50(fvec4) CompositeExtract 1524 2
-            1533:   50(fvec4) FMod 1531 1532
-            1534:   50(fvec4) CompositeExtract 1523 3
-            1535:   50(fvec4) CompositeExtract 1524 3
-            1536:   50(fvec4) FMod 1534 1535
-            1537:          78 CompositeConstruct 1527 1530 1533 1536
-                              Store 1522(r022) 1537
-            1539:          78 Load 81(inF0)
-            1540:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1539
-                              Store 1538(r023) 1540
-            1542:          78 Load 81(inF0)
-            1543:          78 Fwidth 1542
-                              Store 1541(r025) 1543
-            1545:          78 Load 81(inF0)
-            1546:          78 Load 82(inF1)
-            1547:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1545 1546
-                              Store 1544(r026) 1547
+            1480:             Label
+            1483:          78 Load 81(inF0)
+            1484:          78 Load 82(inF1)
+            1485:          78 Load 83(inF2)
+            1486:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1483 1484 1485
+                              Store 1482(r008) 1486
+            1488:          78 Load 81(inF0)
+            1489:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1488
+                              Store 1487(r009) 1489
+            1491:          78 Load 81(inF0)
+            1492:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1491
+                              Store 1490(r010) 1492
+            1494:          78 Load 81(inF0)
+            1495:          78 DPdx 1494
+                              Store 1493(r011) 1495
+            1497:          78 Load 81(inF0)
+            1498:          78 DPdxCoarse 1497
+                              Store 1496(r012) 1498
+            1500:          78 Load 81(inF0)
+            1501:          78 DPdxFine 1500
+                              Store 1499(r013) 1501
+            1503:          78 Load 81(inF0)
+            1504:          78 DPdy 1503
+                              Store 1502(r014) 1504
+            1506:          78 Load 81(inF0)
+            1507:          78 DPdyCoarse 1506
+                              Store 1505(r015) 1507
+            1509:          78 Load 81(inF0)
+            1510:          78 DPdyFine 1509
+                              Store 1508(r016) 1510
+            1512:          78 Load 81(inF0)
+            1513:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1512
+                              Store 1511(r017) 1513
+            1515:          78 Load 81(inF0)
+            1516:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1515
+                              Store 1514(r018) 1516
+            1518:          78 Load 81(inF0)
+            1519:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1518
+                              Store 1517(r019) 1519
+            1521:          78 Load 81(inF0)
+            1522:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1521
+                              Store 1520(R020) 1522
+            1524:          78 Load 81(inF0)
+            1525:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1524
+                              Store 1523(r021) 1525
+            1527:          78 Load 81(inF0)
+            1528:          78 Load 82(inF1)
+            1529:   50(fvec4) CompositeExtract 1527 0
+            1530:   50(fvec4) CompositeExtract 1528 0
+            1531:   50(fvec4) FMod 1529 1530
+            1532:   50(fvec4) CompositeExtract 1527 1
+            1533:   50(fvec4) CompositeExtract 1528 1
+            1534:   50(fvec4) FMod 1532 1533
+            1535:   50(fvec4) CompositeExtract 1527 2
+            1536:   50(fvec4) CompositeExtract 1528 2
+            1537:   50(fvec4) FMod 1535 1536
+            1538:   50(fvec4) CompositeExtract 1527 3
+            1539:   50(fvec4) CompositeExtract 1528 3
+            1540:   50(fvec4) FMod 1538 1539
+            1541:          78 CompositeConstruct 1531 1534 1537 1540
+                              Store 1526(r022) 1541
+            1543:          78 Load 81(inF0)
+            1544:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1543
+                              Store 1542(r023) 1544
+            1546:          78 Load 81(inF0)
+            1547:          78 Fwidth 1546
+                              Store 1545(r025) 1547
             1549:          78 Load 81(inF0)
             1550:          78 Load 82(inF1)
-            1551:          78 Load 83(inF2)
-            1552:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1549 1550 1551
-                              Store 1548(r026a) 1552
-            1554:          78 Load 81(inF0)
-            1555:          78 ExtInst 1(GLSL.std.450) 28(Log) 1554
-                              Store 1553(r027) 1555
-            1557:          78 Load 81(inF0)
-            1558:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1557
-            1559:          78 MatrixTimesScalar 1558 268
-                              Store 1556(r028) 1559
+            1551:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1549 1550
+                              Store 1548(r026) 1551
+            1553:          78 Load 81(inF0)
+            1554:          78 Load 82(inF1)
+            1555:          78 Load 83(inF2)
+            1556:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1553 1554 1555
+                              Store 1552(r026a) 1556
+            1558:          78 Load 81(inF0)
+            1559:          78 ExtInst 1(GLSL.std.450) 28(Log) 1558
+                              Store 1557(r027) 1559
             1561:          78 Load 81(inF0)
             1562:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1561
-                              Store 1560(r029) 1562
-            1564:          78 Load 81(inF0)
-            1565:          78 Load 82(inF1)
-            1566:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1564 1565
-                              Store 1563(r030) 1566
+            1563:          78 MatrixTimesScalar 1562 272
+                              Store 1560(r028) 1563
+            1565:          78 Load 81(inF0)
+            1566:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1565
+                              Store 1564(r029) 1566
             1568:          78 Load 81(inF0)
             1569:          78 Load 82(inF1)
-            1570:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1568 1569
-                              Store 1567(r031) 1570
+            1570:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1568 1569
+                              Store 1567(r030) 1570
             1572:          78 Load 81(inF0)
             1573:          78 Load 82(inF1)
-            1574:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1572 1573
-                              Store 1571(r032) 1574
+            1574:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1572 1573
+                              Store 1571(r031) 1574
             1576:          78 Load 81(inF0)
-            1577:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1576
-                              Store 1575(r033) 1577
-            1579:          78 Load 81(inF0)
-            1580:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1579
-                              Store 1578(r034) 1580
-            1582:          78 Load 81(inF0)
-            1583:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1582
-                              Store 1581(r035) 1583
-            1585:          78 Load 81(inF0)
-            1586:   50(fvec4) CompositeConstruct 141 141 141 141
-            1587:   50(fvec4) CompositeConstruct 289 289 289 289
-            1588:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1585 1586 1587
-                              Store 1584(r036) 1588
-            1590:          78 Load 81(inF0)
-            1591:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1590
-                              Store 1589(r037) 1591
-            1593:          78 Load 81(inF0)
-            1594:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1593
-                              Store 1592(r038) 1594
-            1595:          78 Load 81(inF0)
-            1596:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1595
-                              Store 82(inF1) 1596
+            1577:          78 Load 82(inF1)
+            1578:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1576 1577
+                              Store 1575(r032) 1578
+            1580:          78 Load 81(inF0)
+            1581:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1580
+                              Store 1579(r033) 1581
+            1583:          78 Load 81(inF0)
+            1584:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1583
+                              Store 1582(r034) 1584
+            1586:          78 Load 81(inF0)
+            1587:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1586
+                              Store 1585(r035) 1587
+            1589:          78 Load 81(inF0)
+            1590:   50(fvec4) CompositeConstruct 141 141 141 141
+            1591:   50(fvec4) CompositeConstruct 293 293 293 293
+            1592:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1589 1590 1591
+                              Store 1588(r036) 1592
+            1594:          78 Load 81(inF0)
+            1595:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1594
+                              Store 1593(r037) 1595
             1597:          78 Load 81(inF0)
-            1598:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1597
-                              Store 83(inF2) 1598
-            1600:          78 Load 81(inF0)
-            1601:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1600
-                              Store 1599(r039) 1601
-            1603:          78 Load 81(inF0)
-            1604:          78 Load 82(inF1)
-            1605:          78 Load 83(inF2)
-            1606:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1603 1604 1605
-                              Store 1602(r049) 1606
-            1608:          78 Load 81(inF0)
-            1609:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1608
-                              Store 1607(r041) 1609
-            1611:          78 Load 81(inF0)
-            1612:          78 Load 82(inF1)
-            1613:          78 ExtInst 1(GLSL.std.450) 48(Step) 1611 1612
-                              Store 1610(r042) 1613
+            1598:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1597
+                              Store 1596(r038) 1598
+            1599:          78 Load 81(inF0)
+            1600:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1599
+                              Store 82(inF1) 1600
+            1601:          78 Load 81(inF0)
+            1602:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1601
+                              Store 83(inF2) 1602
+            1604:          78 Load 81(inF0)
+            1605:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1604
+                              Store 1603(r039) 1605
+            1607:          78 Load 81(inF0)
+            1608:          78 Load 82(inF1)
+            1609:          78 Load 83(inF2)
+            1610:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1607 1608 1609
+                              Store 1606(r049) 1610
+            1612:          78 Load 81(inF0)
+            1613:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1612
+                              Store 1611(r041) 1613
             1615:          78 Load 81(inF0)
-            1616:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1615
-                              Store 1614(r043) 1616
-            1618:          78 Load 81(inF0)
-            1619:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1618
-                              Store 1617(r044) 1619
-            1620:          78 Load 81(inF0)
-            1621:          78 Transpose 1620
-            1623:          78 Load 81(inF0)
-            1624:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1623
-                              Store 1622(r046) 1624
-                              ReturnValue 1626
+            1616:          78 Load 82(inF1)
+            1617:          78 ExtInst 1(GLSL.std.450) 48(Step) 1615 1616
+                              Store 1614(r042) 1617
+            1619:          78 Load 81(inF0)
+            1620:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1619
+                              Store 1618(r043) 1620
+            1622:          78 Load 81(inF0)
+            1623:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1622
+                              Store 1621(r044) 1623
+            1624:          78 Load 81(inF0)
+            1625:          78 Transpose 1624
+            1627:          78 Load 81(inF0)
+            1628:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1627
+                              Store 1626(r046) 1628
+                              ReturnValue 1630
                               FunctionEnd
 93(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 86
         87(inF0):      7(ptr) FunctionParameter
@@ -8193,51 +8215,51 @@
        91(inFM0):     63(ptr) FunctionParameter
        92(inFM1):     63(ptr) FunctionParameter
               94:             Label
-        1629(r0):      7(ptr) Variable Function
-        1633(r1):     27(ptr) Variable Function
-        1637(r2):     27(ptr) Variable Function
-        1641(r3):      7(ptr) Variable Function
-        1645(r4):     27(ptr) Variable Function
-        1649(r5):     27(ptr) Variable Function
-        1653(r6):     63(ptr) Variable Function
-        1657(r7):     63(ptr) Variable Function
-        1661(r8):     63(ptr) Variable Function
-            1630:    6(float) Load 88(inF1)
-            1631:    6(float) Load 87(inF0)
-            1632:    6(float) FMul 1630 1631
-                              Store 1629(r0) 1632
-            1634:    6(float) Load 87(inF0)
-            1635:   26(fvec2) Load 89(inFV0)
-            1636:   26(fvec2) VectorTimesScalar 1635 1634
-                              Store 1633(r1) 1636
-            1638:   26(fvec2) Load 89(inFV0)
-            1639:    6(float) Load 87(inF0)
-            1640:   26(fvec2) VectorTimesScalar 1638 1639
-                              Store 1637(r2) 1640
+        1633(r0):      7(ptr) Variable Function
+        1637(r1):     27(ptr) Variable Function
+        1641(r2):     27(ptr) Variable Function
+        1645(r3):      7(ptr) Variable Function
+        1649(r4):     27(ptr) Variable Function
+        1653(r5):     27(ptr) Variable Function
+        1657(r6):     63(ptr) Variable Function
+        1661(r7):     63(ptr) Variable Function
+        1665(r8):     63(ptr) Variable Function
+            1634:    6(float) Load 88(inF1)
+            1635:    6(float) Load 87(inF0)
+            1636:    6(float) FMul 1634 1635
+                              Store 1633(r0) 1636
+            1638:    6(float) Load 87(inF0)
+            1639:   26(fvec2) Load 89(inFV0)
+            1640:   26(fvec2) VectorTimesScalar 1639 1638
+                              Store 1637(r1) 1640
             1642:   26(fvec2) Load 89(inFV0)
-            1643:   26(fvec2) Load 90(inFV1)
-            1644:    6(float) Dot 1642 1643
-                              Store 1641(r3) 1644
+            1643:    6(float) Load 87(inF0)
+            1644:   26(fvec2) VectorTimesScalar 1642 1643
+                              Store 1641(r2) 1644
             1646:   26(fvec2) Load 89(inFV0)
-            1647:          62 Load 91(inFM0)
-            1648:   26(fvec2) VectorTimesMatrix 1646 1647
-                              Store 1645(r4) 1648
-            1650:          62 Load 91(inFM0)
-            1651:   26(fvec2) Load 89(inFV0)
-            1652:   26(fvec2) MatrixTimesVector 1650 1651
-                              Store 1649(r5) 1652
-            1654:    6(float) Load 87(inF0)
-            1655:          62 Load 91(inFM0)
-            1656:          62 MatrixTimesScalar 1655 1654
-                              Store 1653(r6) 1656
-            1658:          62 Load 91(inFM0)
-            1659:    6(float) Load 87(inF0)
-            1660:          62 MatrixTimesScalar 1658 1659
-                              Store 1657(r7) 1660
-            1662:          62 Load 92(inFM1)
-            1663:          62 Load 91(inFM0)
-            1664:          62 MatrixTimesMatrix 1662 1663
-                              Store 1661(r8) 1664
+            1647:   26(fvec2) Load 90(inFV1)
+            1648:    6(float) Dot 1646 1647
+                              Store 1645(r3) 1648
+            1650:   26(fvec2) Load 89(inFV0)
+            1651:          62 Load 91(inFM0)
+            1652:   26(fvec2) VectorTimesMatrix 1650 1651
+                              Store 1649(r4) 1652
+            1654:          62 Load 91(inFM0)
+            1655:   26(fvec2) Load 89(inFV0)
+            1656:   26(fvec2) MatrixTimesVector 1654 1655
+                              Store 1653(r5) 1656
+            1658:    6(float) Load 87(inF0)
+            1659:          62 Load 91(inFM0)
+            1660:          62 MatrixTimesScalar 1659 1658
+                              Store 1657(r6) 1660
+            1662:          62 Load 91(inFM0)
+            1663:    6(float) Load 87(inF0)
+            1664:          62 MatrixTimesScalar 1662 1663
+                              Store 1661(r7) 1664
+            1666:          62 Load 92(inFM1)
+            1667:          62 Load 91(inFM0)
+            1668:          62 MatrixTimesMatrix 1666 1667
+                              Store 1665(r8) 1668
                               Return
                               FunctionEnd
 102(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 95
@@ -8248,51 +8270,51 @@
       100(inFM0):     71(ptr) FunctionParameter
       101(inFM1):     71(ptr) FunctionParameter
              103:             Label
-        1665(r0):      7(ptr) Variable Function
-        1669(r1):     39(ptr) Variable Function
-        1673(r2):     39(ptr) Variable Function
-        1677(r3):      7(ptr) Variable Function
-        1681(r4):     39(ptr) Variable Function
-        1685(r5):     39(ptr) Variable Function
-        1689(r6):     71(ptr) Variable Function
-        1693(r7):     71(ptr) Variable Function
-        1697(r8):     71(ptr) Variable Function
-            1666:    6(float) Load 97(inF1)
-            1667:    6(float) Load 96(inF0)
-            1668:    6(float) FMul 1666 1667
-                              Store 1665(r0) 1668
-            1670:    6(float) Load 96(inF0)
-            1671:   38(fvec3) Load 98(inFV0)
-            1672:   38(fvec3) VectorTimesScalar 1671 1670
-                              Store 1669(r1) 1672
-            1674:   38(fvec3) Load 98(inFV0)
-            1675:    6(float) Load 96(inF0)
-            1676:   38(fvec3) VectorTimesScalar 1674 1675
-                              Store 1673(r2) 1676
+        1669(r0):      7(ptr) Variable Function
+        1673(r1):     39(ptr) Variable Function
+        1677(r2):     39(ptr) Variable Function
+        1681(r3):      7(ptr) Variable Function
+        1685(r4):     39(ptr) Variable Function
+        1689(r5):     39(ptr) Variable Function
+        1693(r6):     71(ptr) Variable Function
+        1697(r7):     71(ptr) Variable Function
+        1701(r8):     71(ptr) Variable Function
+            1670:    6(float) Load 97(inF1)
+            1671:    6(float) Load 96(inF0)
+            1672:    6(float) FMul 1670 1671
+                              Store 1669(r0) 1672
+            1674:    6(float) Load 96(inF0)
+            1675:   38(fvec3) Load 98(inFV0)
+            1676:   38(fvec3) VectorTimesScalar 1675 1674
+                              Store 1673(r1) 1676
             1678:   38(fvec3) Load 98(inFV0)
-            1679:   38(fvec3) Load 99(inFV1)
-            1680:    6(float) Dot 1678 1679
-                              Store 1677(r3) 1680
+            1679:    6(float) Load 96(inF0)
+            1680:   38(fvec3) VectorTimesScalar 1678 1679
+                              Store 1677(r2) 1680
             1682:   38(fvec3) Load 98(inFV0)
-            1683:          70 Load 100(inFM0)
-            1684:   38(fvec3) VectorTimesMatrix 1682 1683
-                              Store 1681(r4) 1684
-            1686:          70 Load 100(inFM0)
-            1687:   38(fvec3) Load 98(inFV0)
-            1688:   38(fvec3) MatrixTimesVector 1686 1687
-                              Store 1685(r5) 1688
-            1690:    6(float) Load 96(inF0)
-            1691:          70 Load 100(inFM0)
-            1692:          70 MatrixTimesScalar 1691 1690
-                              Store 1689(r6) 1692
-            1694:          70 Load 100(inFM0)
-            1695:    6(float) Load 96(inF0)
-            1696:          70 MatrixTimesScalar 1694 1695
-                              Store 1693(r7) 1696
-            1698:          70 Load 101(inFM1)
-            1699:          70 Load 100(inFM0)
-            1700:          70 MatrixTimesMatrix 1698 1699
-                              Store 1697(r8) 1700
+            1683:   38(fvec3) Load 99(inFV1)
+            1684:    6(float) Dot 1682 1683
+                              Store 1681(r3) 1684
+            1686:   38(fvec3) Load 98(inFV0)
+            1687:          70 Load 100(inFM0)
+            1688:   38(fvec3) VectorTimesMatrix 1686 1687
+                              Store 1685(r4) 1688
+            1690:          70 Load 100(inFM0)
+            1691:   38(fvec3) Load 98(inFV0)
+            1692:   38(fvec3) MatrixTimesVector 1690 1691
+                              Store 1689(r5) 1692
+            1694:    6(float) Load 96(inF0)
+            1695:          70 Load 100(inFM0)
+            1696:          70 MatrixTimesScalar 1695 1694
+                              Store 1693(r6) 1696
+            1698:          70 Load 100(inFM0)
+            1699:    6(float) Load 96(inF0)
+            1700:          70 MatrixTimesScalar 1698 1699
+                              Store 1697(r7) 1700
+            1702:          70 Load 101(inFM1)
+            1703:          70 Load 100(inFM0)
+            1704:          70 MatrixTimesMatrix 1702 1703
+                              Store 1701(r8) 1704
                               Return
                               FunctionEnd
 111(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 104
@@ -8303,51 +8325,51 @@
       109(inFM0):     79(ptr) FunctionParameter
       110(inFM1):     79(ptr) FunctionParameter
              112:             Label
-        1701(r0):      7(ptr) Variable Function
-        1705(r1):     51(ptr) Variable Function
-        1709(r2):     51(ptr) Variable Function
-        1713(r3):      7(ptr) Variable Function
-        1717(r4):     51(ptr) Variable Function
-        1721(r5):     51(ptr) Variable Function
-        1725(r6):     79(ptr) Variable Function
-        1729(r7):     79(ptr) Variable Function
-        1733(r8):     79(ptr) Variable Function
-            1702:    6(float) Load 106(inF1)
-            1703:    6(float) Load 105(inF0)
-            1704:    6(float) FMul 1702 1703
-                              Store 1701(r0) 1704
-            1706:    6(float) Load 105(inF0)
-            1707:   50(fvec4) Load 107(inFV0)
-            1708:   50(fvec4) VectorTimesScalar 1707 1706
-                              Store 1705(r1) 1708
-            1710:   50(fvec4) Load 107(inFV0)
-            1711:    6(float) Load 105(inF0)
-            1712:   50(fvec4) VectorTimesScalar 1710 1711
-                              Store 1709(r2) 1712
+        1705(r0):      7(ptr) Variable Function
+        1709(r1):     51(ptr) Variable Function
+        1713(r2):     51(ptr) Variable Function
+        1717(r3):      7(ptr) Variable Function
+        1721(r4):     51(ptr) Variable Function
+        1725(r5):     51(ptr) Variable Function
+        1729(r6):     79(ptr) Variable Function
+        1733(r7):     79(ptr) Variable Function
+        1737(r8):     79(ptr) Variable Function
+            1706:    6(float) Load 106(inF1)
+            1707:    6(float) Load 105(inF0)
+            1708:    6(float) FMul 1706 1707
+                              Store 1705(r0) 1708
+            1710:    6(float) Load 105(inF0)
+            1711:   50(fvec4) Load 107(inFV0)
+            1712:   50(fvec4) VectorTimesScalar 1711 1710
+                              Store 1709(r1) 1712
             1714:   50(fvec4) Load 107(inFV0)
-            1715:   50(fvec4) Load 108(inFV1)
-            1716:    6(float) Dot 1714 1715
-                              Store 1713(r3) 1716
+            1715:    6(float) Load 105(inF0)
+            1716:   50(fvec4) VectorTimesScalar 1714 1715
+                              Store 1713(r2) 1716
             1718:   50(fvec4) Load 107(inFV0)
-            1719:          78 Load 109(inFM0)
-            1720:   50(fvec4) VectorTimesMatrix 1718 1719
-                              Store 1717(r4) 1720
-            1722:          78 Load 109(inFM0)
-            1723:   50(fvec4) Load 107(inFV0)
-            1724:   50(fvec4) MatrixTimesVector 1722 1723
-                              Store 1721(r5) 1724
-            1726:    6(float) Load 105(inF0)
-            1727:          78 Load 109(inFM0)
-            1728:          78 MatrixTimesScalar 1727 1726
-                              Store 1725(r6) 1728
-            1730:          78 Load 109(inFM0)
-            1731:    6(float) Load 105(inF0)
-            1732:          78 MatrixTimesScalar 1730 1731
-                              Store 1729(r7) 1732
-            1734:          78 Load 110(inFM1)
-            1735:          78 Load 109(inFM0)
-            1736:          78 MatrixTimesMatrix 1734 1735
-                              Store 1733(r8) 1736
+            1719:   50(fvec4) Load 108(inFV1)
+            1720:    6(float) Dot 1718 1719
+                              Store 1717(r3) 1720
+            1722:   50(fvec4) Load 107(inFV0)
+            1723:          78 Load 109(inFM0)
+            1724:   50(fvec4) VectorTimesMatrix 1722 1723
+                              Store 1721(r4) 1724
+            1726:          78 Load 109(inFM0)
+            1727:   50(fvec4) Load 107(inFV0)
+            1728:   50(fvec4) MatrixTimesVector 1726 1727
+                              Store 1725(r5) 1728
+            1730:    6(float) Load 105(inF0)
+            1731:          78 Load 109(inFM0)
+            1732:          78 MatrixTimesScalar 1731 1730
+                              Store 1729(r6) 1732
+            1734:          78 Load 109(inFM0)
+            1735:    6(float) Load 105(inF0)
+            1736:          78 MatrixTimesScalar 1734 1735
+                              Store 1733(r7) 1736
+            1738:          78 Load 110(inFM1)
+            1739:          78 Load 109(inFM0)
+            1740:          78 MatrixTimesMatrix 1738 1739
+                              Store 1737(r8) 1740
                               Return
                               FunctionEnd
 131(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 121
@@ -8361,98 +8383,98 @@
     129(inFM3x4):    118(ptr) FunctionParameter
     130(inFM2x4):    120(ptr) FunctionParameter
              132:             Label
-       1737(r00):      7(ptr) Variable Function
-       1741(r01):     27(ptr) Variable Function
-       1745(r02):     39(ptr) Variable Function
-       1749(r03):     27(ptr) Variable Function
-       1753(r04):     39(ptr) Variable Function
-       1757(r05):      7(ptr) Variable Function
-       1761(r06):      7(ptr) Variable Function
-       1765(r07):     39(ptr) Variable Function
-       1769(r08):     27(ptr) Variable Function
-       1773(r09):     27(ptr) Variable Function
-       1777(r10):     39(ptr) Variable Function
-       1781(r11):    114(ptr) Variable Function
-       1785(r12):    116(ptr) Variable Function
-       1789(r13):     63(ptr) Variable Function
-       1793(r14):    114(ptr) Variable Function
-       1797(r15):    120(ptr) Variable Function
-       1801(r16):    118(ptr) Variable Function
-            1738:    6(float) Load 123(inF1)
-            1739:    6(float) Load 122(inF0)
-            1740:    6(float) FMul 1738 1739
-                              Store 1737(r00) 1740
-            1742:    6(float) Load 122(inF0)
-            1743:   26(fvec2) Load 124(inFV2)
-            1744:   26(fvec2) VectorTimesScalar 1743 1742
-                              Store 1741(r01) 1744
+       1741(r00):      7(ptr) Variable Function
+       1745(r01):     27(ptr) Variable Function
+       1749(r02):     39(ptr) Variable Function
+       1753(r03):     27(ptr) Variable Function
+       1757(r04):     39(ptr) Variable Function
+       1761(r05):      7(ptr) Variable Function
+       1765(r06):      7(ptr) Variable Function
+       1769(r07):     39(ptr) Variable Function
+       1773(r08):     27(ptr) Variable Function
+       1777(r09):     27(ptr) Variable Function
+       1781(r10):     39(ptr) Variable Function
+       1785(r11):    114(ptr) Variable Function
+       1789(r12):    116(ptr) Variable Function
+       1793(r13):     63(ptr) Variable Function
+       1797(r14):    114(ptr) Variable Function
+       1801(r15):    120(ptr) Variable Function
+       1805(r16):    118(ptr) Variable Function
+            1742:    6(float) Load 123(inF1)
+            1743:    6(float) Load 122(inF0)
+            1744:    6(float) FMul 1742 1743
+                              Store 1741(r00) 1744
             1746:    6(float) Load 122(inF0)
-            1747:   38(fvec3) Load 125(inFV3)
-            1748:   38(fvec3) VectorTimesScalar 1747 1746
-                              Store 1745(r02) 1748
-            1750:   26(fvec2) Load 124(inFV2)
-            1751:    6(float) Load 122(inF0)
-            1752:   26(fvec2) VectorTimesScalar 1750 1751
-                              Store 1749(r03) 1752
-            1754:   38(fvec3) Load 125(inFV3)
+            1747:   26(fvec2) Load 124(inFV2)
+            1748:   26(fvec2) VectorTimesScalar 1747 1746
+                              Store 1745(r01) 1748
+            1750:    6(float) Load 122(inF0)
+            1751:   38(fvec3) Load 125(inFV3)
+            1752:   38(fvec3) VectorTimesScalar 1751 1750
+                              Store 1749(r02) 1752
+            1754:   26(fvec2) Load 124(inFV2)
             1755:    6(float) Load 122(inF0)
-            1756:   38(fvec3) VectorTimesScalar 1754 1755
-                              Store 1753(r04) 1756
-            1758:   26(fvec2) Load 124(inFV2)
-            1759:   26(fvec2) Load 124(inFV2)
-            1760:    6(float) Dot 1758 1759
-                              Store 1757(r05) 1760
-            1762:   38(fvec3) Load 125(inFV3)
-            1763:   38(fvec3) Load 125(inFV3)
+            1756:   26(fvec2) VectorTimesScalar 1754 1755
+                              Store 1753(r03) 1756
+            1758:   38(fvec3) Load 125(inFV3)
+            1759:    6(float) Load 122(inF0)
+            1760:   38(fvec3) VectorTimesScalar 1758 1759
+                              Store 1757(r04) 1760
+            1762:   26(fvec2) Load 124(inFV2)
+            1763:   26(fvec2) Load 124(inFV2)
             1764:    6(float) Dot 1762 1763
-                              Store 1761(r06) 1764
-            1766:         113 Load 126(inFM2x3)
-            1767:   26(fvec2) Load 124(inFV2)
-            1768:   38(fvec3) MatrixTimesVector 1766 1767
-                              Store 1765(r07) 1768
-            1770:         115 Load 127(inFM3x2)
-            1771:   38(fvec3) Load 125(inFV3)
-            1772:   26(fvec2) MatrixTimesVector 1770 1771
-                              Store 1769(r08) 1772
-            1774:   38(fvec3) Load 125(inFV3)
-            1775:         113 Load 126(inFM2x3)
-            1776:   26(fvec2) VectorTimesMatrix 1774 1775
-                              Store 1773(r09) 1776
-            1778:   26(fvec2) Load 124(inFV2)
-            1779:         115 Load 127(inFM3x2)
-            1780:   38(fvec3) VectorTimesMatrix 1778 1779
-                              Store 1777(r10) 1780
-            1782:    6(float) Load 122(inF0)
-            1783:         113 Load 126(inFM2x3)
-            1784:         113 MatrixTimesScalar 1783 1782
-                              Store 1781(r11) 1784
+                              Store 1761(r05) 1764
+            1766:   38(fvec3) Load 125(inFV3)
+            1767:   38(fvec3) Load 125(inFV3)
+            1768:    6(float) Dot 1766 1767
+                              Store 1765(r06) 1768
+            1770:         113 Load 126(inFM2x3)
+            1771:   26(fvec2) Load 124(inFV2)
+            1772:   38(fvec3) MatrixTimesVector 1770 1771
+                              Store 1769(r07) 1772
+            1774:         115 Load 127(inFM3x2)
+            1775:   38(fvec3) Load 125(inFV3)
+            1776:   26(fvec2) MatrixTimesVector 1774 1775
+                              Store 1773(r08) 1776
+            1778:   38(fvec3) Load 125(inFV3)
+            1779:         113 Load 126(inFM2x3)
+            1780:   26(fvec2) VectorTimesMatrix 1778 1779
+                              Store 1777(r09) 1780
+            1782:   26(fvec2) Load 124(inFV2)
+            1783:         115 Load 127(inFM3x2)
+            1784:   38(fvec3) VectorTimesMatrix 1782 1783
+                              Store 1781(r10) 1784
             1786:    6(float) Load 122(inF0)
-            1787:         115 Load 127(inFM3x2)
-            1788:         115 MatrixTimesScalar 1787 1786
-                              Store 1785(r12) 1788
-            1790:         115 Load 127(inFM3x2)
-            1791:         113 Load 126(inFM2x3)
-            1792:          62 MatrixTimesMatrix 1790 1791
-                              Store 1789(r13) 1792
-            1794:          70 Load 128(inFM3x3)
+            1787:         113 Load 126(inFM2x3)
+            1788:         113 MatrixTimesScalar 1787 1786
+                              Store 1785(r11) 1788
+            1790:    6(float) Load 122(inF0)
+            1791:         115 Load 127(inFM3x2)
+            1792:         115 MatrixTimesScalar 1791 1790
+                              Store 1789(r12) 1792
+            1794:         115 Load 127(inFM3x2)
             1795:         113 Load 126(inFM2x3)
-            1796:         113 MatrixTimesMatrix 1794 1795
-                              Store 1793(r14) 1796
-            1798:         117 Load 129(inFM3x4)
+            1796:          62 MatrixTimesMatrix 1794 1795
+                              Store 1793(r13) 1796
+            1798:          70 Load 128(inFM3x3)
             1799:         113 Load 126(inFM2x3)
-            1800:         119 MatrixTimesMatrix 1798 1799
-                              Store 1797(r15) 1800
-            1802:         119 Load 130(inFM2x4)
-            1803:         115 Load 127(inFM3x2)
-            1804:         117 MatrixTimesMatrix 1802 1803
-                              Store 1801(r16) 1804
+            1800:         113 MatrixTimesMatrix 1798 1799
+                              Store 1797(r14) 1800
+            1802:         117 Load 129(inFM3x4)
+            1803:         113 Load 126(inFM2x3)
+            1804:         119 MatrixTimesMatrix 1802 1803
+                              Store 1801(r15) 1804
+            1806:         119 Load 130(inFM2x4)
+            1807:         115 Load 127(inFM3x2)
+            1808:         117 MatrixTimesMatrix 1806 1807
+                              Store 1805(r16) 1808
                               Return
                               FunctionEnd
      135(@main():133(PS_OUTPUT) Function None 134
              136:             Label
- 1806(ps_output):   1805(ptr) Variable Function
-            1808:     51(ptr) AccessChain 1806(ps_output) 187
-                              Store 1808 1807
-            1809:133(PS_OUTPUT) Load 1806(ps_output)
-                              ReturnValue 1809
+ 1810(ps_output):   1809(ptr) Variable Function
+            1812:     51(ptr) AccessChain 1810(ps_output) 187
+                              Store 1812 1811
+            1813:133(PS_OUTPUT) Load 1810(ps_output)
+                              ReturnValue 1813
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 8e7e3ec..195e11d 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2778,6 +2778,10 @@
 0:413            'inFM3x2' ( in 3X2 matrix of float)
 0:?   Linker Objects
 
+error: SPIRV-Tools Validation Errors
+error: Matrix types can only be parameterized with floating-point types.
+  %mat2v2bool = OpTypeMatrix %v2bool 2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 1225
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
index 109362e..276d4c2 100644
--- a/Test/baseResults/hlsl.matNx1.frag.out
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -151,6 +151,10 @@
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Illegal number of components (1) for TypeVector
+  %v1float = OpTypeVector %float 1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 77
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
index 82575b0..900c60f 100644
--- a/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -231,6 +231,10 @@
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Illegal number of components (1) for TypeVector
+  %v1bool = OpTypeVector %bool 1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 130
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
old mode 100755
new mode 100644
index 958b37e..c0d2e4b
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -30,6 +30,10 @@
 0:?   Linker Objects
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 1-component vector of float f1,  uniform 1X1 matrix of float fmat11,  uniform 4X1 matrix of float fmat41,  uniform 1X2 matrix of float fmat12,  uniform 2X3 matrix of double dmat23,  uniform 4X4 matrix of int int44})
 
+error: SPIRV-Tools Validation Errors
+error: Illegal number of components (1) for TypeVector
+  %v1float = OpTypeVector %float 1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 30
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
index b8d29ac..2039dfd 100644
--- a/Test/baseResults/hlsl.matType.int.frag.out
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -397,6 +397,10 @@
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Illegal number of components (1) for TypeVector
+  %v1int = OpTypeVector %int 1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 232
diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out
old mode 100755
new mode 100644
index 9bf7e56..abb3e49
--- a/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -676,6 +676,10 @@
 0:?     'inf' (layout( location=0) in float)
 
 Missing functionality: matrix swizzle
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '42[f3]'s type does not match Object <id> '34's type.
+  OpStore %f3 %int_0
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 118
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index 80fe1cb..1973fad 100644
--- a/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -384,12 +384,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80007
-// Id's are bound by 231
+// Id's are bound by 190
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 229
+                              EntryPoint Fragment 4  "main" 188
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -408,14 +408,14 @@
                               Name 23  ""
                               Name 37  "r01"
                               Name 49  "r10"
-                              Name 75  "r11"
-                              Name 87  "r20"
-                              Name 110  "r21"
-                              Name 124  "r30"
-                              Name 144  "r31"
-                              Name 162  "r32"
-                              Name 181  "r33"
-                              Name 229  "@entryPointOutput"
+                              Name 61  "r11"
+                              Name 73  "r20"
+                              Name 88  "r21"
+                              Name 102  "r30"
+                              Name 118  "r31"
+                              Name 133  "r32"
+                              Name 146  "r33"
+                              Name 188  "@entryPointOutput"
                               MemberDecorate 21(Matrix) 0 RowMajor
                               MemberDecorate 21(Matrix) 0 Offset 0
                               MemberDecorate 21(Matrix) 0 MatrixStride 16
@@ -439,7 +439,7 @@
                               MemberDecorate 21(Matrix) 8 Offset 352
                               Decorate 21(Matrix) Block
                               Decorate 23 DescriptorSet 0
-                              Decorate 229(@entryPointOutput) Location 0
+                              Decorate 188(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -467,32 +467,30 @@
               48:             TypePointer Function 7(fvec4)
               50:     24(int) Constant 0
               51:             TypePointer Uniform 13
-              54:    6(float) Constant 1065353216
-              55:    6(float) Constant 0
-              76:     24(int) Constant 2
-              77:             TypePointer Uniform 16
-             117:     24(int) Constant 1
-             118:             TypePointer Uniform 15
-             122:             TypeMatrix 14(fvec3) 2
-             123:             TypePointer Function 122
-             125:     24(int) Constant 3
-             126:             TypePointer Uniform 17
-             129:     24(int) Constant 4
-             130:             TypePointer Uniform 18
-             143:             TypePointer Function 16
-             149:             TypeMatrix 19(fvec2) 3
-             161:             TypePointer Function 149
-             163:     24(int) Constant 5
-             164:             TypePointer Uniform 20
-             180:             TypePointer Function 15
-             209:             TypeInt 32 0
-             210:    209(int) Constant 0
-             228:             TypePointer Output 7(fvec4)
-229(@entryPointOutput):    228(ptr) Variable Output
+              62:     24(int) Constant 2
+              63:             TypePointer Uniform 16
+              95:     24(int) Constant 1
+              96:             TypePointer Uniform 15
+             100:             TypeMatrix 14(fvec3) 2
+             101:             TypePointer Function 100
+             103:     24(int) Constant 3
+             104:             TypePointer Uniform 17
+             107:     24(int) Constant 4
+             108:             TypePointer Uniform 18
+             117:             TypePointer Function 16
+             123:             TypeMatrix 19(fvec2) 3
+             132:             TypePointer Function 123
+             134:     24(int) Constant 5
+             135:             TypePointer Uniform 20
+             145:             TypePointer Function 15
+             168:             TypeInt 32 0
+             169:    168(int) Constant 0
+             187:             TypePointer Output 7(fvec4)
+188(@entryPointOutput):    187(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             230:    7(fvec4) FunctionCall 9(@main()
-                              Store 229(@entryPointOutput) 230
+             189:    7(fvec4) FunctionCall 9(@main()
+                              Store 188(@entryPointOutput) 189
                               Return
                               FunctionEnd
        9(@main():    7(fvec4) Function None 8
@@ -500,13 +498,13 @@
          12(r00):     11(ptr) Variable Function
          37(r01):     11(ptr) Variable Function
          49(r10):     48(ptr) Variable Function
-         75(r11):     48(ptr) Variable Function
-         87(r20):     48(ptr) Variable Function
-        110(r21):     48(ptr) Variable Function
-        124(r30):    123(ptr) Variable Function
-        144(r31):    143(ptr) Variable Function
-        162(r32):    161(ptr) Variable Function
-        181(r33):    180(ptr) Variable Function
+         61(r11):     48(ptr) Variable Function
+         73(r20):     48(ptr) Variable Function
+         88(r21):     48(ptr) Variable Function
+        102(r30):    101(ptr) Variable Function
+        118(r31):    117(ptr) Variable Function
+        133(r32):    132(ptr) Variable Function
+        146(r33):    145(ptr) Variable Function
               27:     26(ptr) AccessChain 23 25
               28:   19(fvec2) Load 27
               31:     30(ptr) AccessChain 23 29
@@ -527,158 +525,119 @@
                               Store 37(r01) 47
               52:     51(ptr) AccessChain 23 50
               53:          13 Load 52
-              56:    6(float) CompositeExtract 53 0 0
-              57:    6(float) CompositeExtract 53 0 1
-              58:    6(float) CompositeExtract 53 0 2
-              59:    6(float) CompositeExtract 53 0 3
-              60:    6(float) CompositeExtract 53 1 0
-              61:    6(float) CompositeExtract 53 1 1
-              62:    6(float) CompositeExtract 53 1 2
-              63:    6(float) CompositeExtract 53 1 3
-              64:    6(float) CompositeExtract 53 2 0
-              65:    6(float) CompositeExtract 53 2 1
-              66:    6(float) CompositeExtract 53 2 2
-              67:    6(float) CompositeExtract 53 2 3
-              68:    7(fvec4) CompositeConstruct 56 57 58 59
-              69:    7(fvec4) CompositeConstruct 60 61 62 63
-              70:    7(fvec4) CompositeConstruct 64 65 66 67
-              71:          16 CompositeConstruct 68 69 70
-              72:     30(ptr) AccessChain 23 29
-              73:   14(fvec3) Load 72
-              74:    7(fvec4) MatrixTimesVector 71 73
-                              Store 49(r10) 74
-              78:     77(ptr) AccessChain 23 76
-              79:          16 Load 78
-              80:     39(ptr) AccessChain 23 38
-              81:    7(fvec4) Load 80
-              82:    6(float) CompositeExtract 81 0
-              83:    6(float) CompositeExtract 81 1
-              84:    6(float) CompositeExtract 81 2
-              85:   14(fvec3) CompositeConstruct 82 83 84
-              86:    7(fvec4) MatrixTimesVector 79 85
-                              Store 75(r11) 86
-              88:     30(ptr) AccessChain 23 29
-              89:   14(fvec3) Load 88
-              90:     51(ptr) AccessChain 23 50
-              91:          13 Load 90
-              92:    6(float) CompositeExtract 91 0 0
-              93:    6(float) CompositeExtract 91 0 1
-              94:    6(float) CompositeExtract 91 0 2
-              95:    6(float) CompositeExtract 91 1 0
-              96:    6(float) CompositeExtract 91 1 1
-              97:    6(float) CompositeExtract 91 1 2
-              98:    6(float) CompositeExtract 91 2 0
-              99:    6(float) CompositeExtract 91 2 1
-             100:    6(float) CompositeExtract 91 2 2
-             101:    6(float) CompositeExtract 91 3 0
-             102:    6(float) CompositeExtract 91 3 1
-             103:    6(float) CompositeExtract 91 3 2
-             104:   14(fvec3) CompositeConstruct 92 93 94
-             105:   14(fvec3) CompositeConstruct 95 96 97
-             106:   14(fvec3) CompositeConstruct 98 99 100
-             107:   14(fvec3) CompositeConstruct 101 102 103
-             108:          15 CompositeConstruct 104 105 106 107
-             109:    7(fvec4) VectorTimesMatrix 89 108
-                              Store 87(r20) 109
-             111:     39(ptr) AccessChain 23 38
-             112:    7(fvec4) Load 111
-             113:    6(float) CompositeExtract 112 0
-             114:    6(float) CompositeExtract 112 1
-             115:    6(float) CompositeExtract 112 2
-             116:   14(fvec3) CompositeConstruct 113 114 115
-             119:    118(ptr) AccessChain 23 117
-             120:          15 Load 119
-             121:    7(fvec4) VectorTimesMatrix 116 120
-                              Store 110(r21) 121
-             127:    126(ptr) AccessChain 23 125
-             128:          17 Load 127
-             131:    130(ptr) AccessChain 23 129
-             132:          18 Load 131
-             133:    6(float) CompositeExtract 132 0 0
-             134:    6(float) CompositeExtract 132 0 1
-             135:    6(float) CompositeExtract 132 0 2
-             136:    6(float) CompositeExtract 132 1 0
-             137:    6(float) CompositeExtract 132 1 1
-             138:    6(float) CompositeExtract 132 1 2
-             139:   14(fvec3) CompositeConstruct 133 134 135
-             140:   14(fvec3) CompositeConstruct 136 137 138
-             141:         122 CompositeConstruct 139 140
-             142:         122 MatrixTimesMatrix 128 141
-                              Store 124(r30) 142
-             145:    130(ptr) AccessChain 23 129
-             146:          18 Load 145
-             147:    126(ptr) AccessChain 23 125
+              54:    7(fvec4) CompositeExtract 53 0
+              55:    7(fvec4) CompositeExtract 53 1
+              56:    7(fvec4) CompositeExtract 53 2
+              57:          16 CompositeConstruct 54 55 56
+              58:     30(ptr) AccessChain 23 29
+              59:   14(fvec3) Load 58
+              60:    7(fvec4) MatrixTimesVector 57 59
+                              Store 49(r10) 60
+              64:     63(ptr) AccessChain 23 62
+              65:          16 Load 64
+              66:     39(ptr) AccessChain 23 38
+              67:    7(fvec4) Load 66
+              68:    6(float) CompositeExtract 67 0
+              69:    6(float) CompositeExtract 67 1
+              70:    6(float) CompositeExtract 67 2
+              71:   14(fvec3) CompositeConstruct 68 69 70
+              72:    7(fvec4) MatrixTimesVector 65 71
+                              Store 61(r11) 72
+              74:     30(ptr) AccessChain 23 29
+              75:   14(fvec3) Load 74
+              76:     51(ptr) AccessChain 23 50
+              77:          13 Load 76
+              78:    7(fvec4) CompositeExtract 77 0
+              79:   14(fvec3) VectorShuffle 78 78 0 1 2
+              80:    7(fvec4) CompositeExtract 77 1
+              81:   14(fvec3) VectorShuffle 80 80 0 1 2
+              82:    7(fvec4) CompositeExtract 77 2
+              83:   14(fvec3) VectorShuffle 82 82 0 1 2
+              84:    7(fvec4) CompositeExtract 77 3
+              85:   14(fvec3) VectorShuffle 84 84 0 1 2
+              86:          15 CompositeConstruct 79 81 83 85
+              87:    7(fvec4) VectorTimesMatrix 75 86
+                              Store 73(r20) 87
+              89:     39(ptr) AccessChain 23 38
+              90:    7(fvec4) Load 89
+              91:    6(float) CompositeExtract 90 0
+              92:    6(float) CompositeExtract 90 1
+              93:    6(float) CompositeExtract 90 2
+              94:   14(fvec3) CompositeConstruct 91 92 93
+              97:     96(ptr) AccessChain 23 95
+              98:          15 Load 97
+              99:    7(fvec4) VectorTimesMatrix 94 98
+                              Store 88(r21) 99
+             105:    104(ptr) AccessChain 23 103
+             106:          17 Load 105
+             109:    108(ptr) AccessChain 23 107
+             110:          18 Load 109
+             111:    7(fvec4) CompositeExtract 110 0
+             112:   14(fvec3) VectorShuffle 111 111 0 1 2
+             113:    7(fvec4) CompositeExtract 110 1
+             114:   14(fvec3) VectorShuffle 113 113 0 1 2
+             115:         100 CompositeConstruct 112 114
+             116:         100 MatrixTimesMatrix 106 115
+                              Store 102(r30) 116
+             119:    108(ptr) AccessChain 23 107
+             120:          18 Load 119
+             121:    104(ptr) AccessChain 23 103
+             122:          17 Load 121
+             124:   14(fvec3) CompositeExtract 122 0
+             125:   19(fvec2) VectorShuffle 124 124 0 1
+             126:   14(fvec3) CompositeExtract 122 1
+             127:   19(fvec2) VectorShuffle 126 126 0 1
+             128:   14(fvec3) CompositeExtract 122 2
+             129:   19(fvec2) VectorShuffle 128 128 0 1
+             130:         123 CompositeConstruct 125 127 129
+             131:          16 MatrixTimesMatrix 120 130
+                              Store 118(r31) 131
+             136:    135(ptr) AccessChain 23 134
+             137:          20 Load 136
+             138:   19(fvec2) CompositeExtract 137 0
+             139:   19(fvec2) CompositeExtract 137 1
+             140:   19(fvec2) CompositeExtract 137 2
+             141:         123 CompositeConstruct 138 139 140
+             142:    104(ptr) AccessChain 23 103
+             143:          17 Load 142
+             144:         123 MatrixTimesMatrix 141 143
+                              Store 133(r32) 144
+             147:    104(ptr) AccessChain 23 103
              148:          17 Load 147
-             150:    6(float) CompositeExtract 148 0 0
-             151:    6(float) CompositeExtract 148 0 1
-             152:    6(float) CompositeExtract 148 1 0
-             153:    6(float) CompositeExtract 148 1 1
-             154:    6(float) CompositeExtract 148 2 0
-             155:    6(float) CompositeExtract 148 2 1
-             156:   19(fvec2) CompositeConstruct 150 151
-             157:   19(fvec2) CompositeConstruct 152 153
-             158:   19(fvec2) CompositeConstruct 154 155
-             159:         149 CompositeConstruct 156 157 158
-             160:          16 MatrixTimesMatrix 146 159
-                              Store 144(r31) 160
-             165:    164(ptr) AccessChain 23 163
-             166:          20 Load 165
-             167:    6(float) CompositeExtract 166 0 0
-             168:    6(float) CompositeExtract 166 0 1
-             169:    6(float) CompositeExtract 166 1 0
-             170:    6(float) CompositeExtract 166 1 1
-             171:    6(float) CompositeExtract 166 2 0
-             172:    6(float) CompositeExtract 166 2 1
-             173:   19(fvec2) CompositeConstruct 167 168
-             174:   19(fvec2) CompositeConstruct 169 170
-             175:   19(fvec2) CompositeConstruct 171 172
-             176:         149 CompositeConstruct 173 174 175
-             177:    126(ptr) AccessChain 23 125
-             178:          17 Load 177
-             179:         149 MatrixTimesMatrix 176 178
-                              Store 162(r32) 179
-             182:    126(ptr) AccessChain 23 125
-             183:          17 Load 182
-             184:    6(float) CompositeExtract 183 0 0
-             185:    6(float) CompositeExtract 183 0 1
-             186:    6(float) CompositeExtract 183 0 2
-             187:    6(float) CompositeExtract 183 1 0
-             188:    6(float) CompositeExtract 183 1 1
-             189:    6(float) CompositeExtract 183 1 2
-             190:   14(fvec3) CompositeConstruct 184 185 186
-             191:   14(fvec3) CompositeConstruct 187 188 189
-             192:         122 CompositeConstruct 190 191
-             193:    164(ptr) AccessChain 23 163
-             194:          20 Load 193
-             195:          15 MatrixTimesMatrix 192 194
-                              Store 181(r33) 195
-             196:    7(fvec4) Load 49(r10)
-             197:    7(fvec4) Load 75(r11)
-             198:    7(fvec4) FAdd 196 197
-             199:    7(fvec4) Load 87(r20)
-             200:    7(fvec4) FAdd 198 199
-             201:    7(fvec4) Load 110(r21)
-             202:    7(fvec4) FAdd 200 201
-             203:    6(float) Load 12(r00)
-             204:    7(fvec4) CompositeConstruct 203 203 203 203
-             205:    7(fvec4) FAdd 202 204
-             206:    6(float) Load 37(r01)
-             207:    7(fvec4) CompositeConstruct 206 206 206 206
-             208:    7(fvec4) FAdd 205 207
-             211:     11(ptr) AccessChain 124(r30) 50 210
-             212:    6(float) Load 211
-             213:    7(fvec4) CompositeConstruct 212 212 212 212
-             214:    7(fvec4) FAdd 208 213
-             215:     48(ptr) AccessChain 144(r31) 50
-             216:    7(fvec4) Load 215
-             217:    7(fvec4) FAdd 214 216
-             218:     11(ptr) AccessChain 162(r32) 50 210
-             219:    6(float) Load 218
-             220:    7(fvec4) CompositeConstruct 219 219 219 219
-             221:    7(fvec4) FAdd 217 220
-             222:          15 Load 181(r33)
-             223:          16 Transpose 222
-             224:    7(fvec4) CompositeExtract 223 0
-             225:    7(fvec4) FAdd 221 224
-                              ReturnValue 225
+             149:   14(fvec3) CompositeExtract 148 0
+             150:   14(fvec3) CompositeExtract 148 1
+             151:         100 CompositeConstruct 149 150
+             152:    135(ptr) AccessChain 23 134
+             153:          20 Load 152
+             154:          15 MatrixTimesMatrix 151 153
+                              Store 146(r33) 154
+             155:    7(fvec4) Load 49(r10)
+             156:    7(fvec4) Load 61(r11)
+             157:    7(fvec4) FAdd 155 156
+             158:    7(fvec4) Load 73(r20)
+             159:    7(fvec4) FAdd 157 158
+             160:    7(fvec4) Load 88(r21)
+             161:    7(fvec4) FAdd 159 160
+             162:    6(float) Load 12(r00)
+             163:    7(fvec4) CompositeConstruct 162 162 162 162
+             164:    7(fvec4) FAdd 161 163
+             165:    6(float) Load 37(r01)
+             166:    7(fvec4) CompositeConstruct 165 165 165 165
+             167:    7(fvec4) FAdd 164 166
+             170:     11(ptr) AccessChain 102(r30) 50 169
+             171:    6(float) Load 170
+             172:    7(fvec4) CompositeConstruct 171 171 171 171
+             173:    7(fvec4) FAdd 167 172
+             174:     48(ptr) AccessChain 118(r31) 50
+             175:    7(fvec4) Load 174
+             176:    7(fvec4) FAdd 173 175
+             177:     11(ptr) AccessChain 133(r32) 50 169
+             178:    6(float) Load 177
+             179:    7(fvec4) CompositeConstruct 178 178 178 178
+             180:    7(fvec4) FAdd 176 179
+             181:          15 Load 146(r33)
+             182:          16 Transpose 181
+             183:    7(fvec4) CompositeExtract 182 0
+             184:    7(fvec4) FAdd 180 183
+                              ReturnValue 184
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
old mode 100755
new mode 100644
index bfb82da..08d959b
--- a/Test/baseResults/hlsl.namespace.frag.out
+++ b/Test/baseResults/hlsl.namespace.frag.out
@@ -101,6 +101,10 @@
 0:?     'N2::gf' ( global float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: OpFunctionCall Function <id>'s parameter count does not match the argument count.
+  %43 = OpFunctionCall %v4float %N2__N3__C1__getVec_
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 54
diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
old mode 100755
new mode 100644
index 350a745..2cdbb0f
--- a/Test/baseResults/hlsl.partialInit.frag.out
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -398,6 +398,10 @@
 0:?     'ci' ( const int)
 0:?       0 (const int)
 
+error: SPIRV-Tools Validation Errors
+error: If OpTypeBool is stored in conjunction with OpVariable, it can only be used with non-externally visible shader Storage Classes: Workgroup, CrossWorkgroup, Private, and Function
+  %_entryPointOutput_c = OpVariable %_ptr_Output_bool Output
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 104
diff --git a/Test/baseResults/hlsl.pp.expand.frag.out b/Test/baseResults/hlsl.pp.expand.frag.out
index 7197891..adfe02c 100644
--- a/Test/baseResults/hlsl.pp.expand.frag.out
+++ b/Test/baseResults/hlsl.pp.expand.frag.out
@@ -14,5 +14,6 @@
 
 void main()
 {
+    "a string"
 }
 
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 73d69dc..ae492e4 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -399,6 +399,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image Operand Bias to be float scalar
+  %28 = OpImageSampleImplicitLod %v4float %23 %float_0_100000001 Bias|ConstOffset %int_1 %float_0_5
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 161
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 0a7a66b..0cea767 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -297,6 +297,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image Operand Bias to be float scalar
+  %31 = OpImageSampleImplicitLod %v4float %23 %27 Bias|ConstOffset %int_0 %float_0_5
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 118
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index f8f20ca..a41481d 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -397,6 +397,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %48 = OpImageSampleDrefImplicitLod %float %43 %46 %47
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 209
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index 9862297..e8252d3 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -379,6 +379,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %41 = OpImageSampleDrefImplicitLod %float %38 %39 %40
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 198
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index f0ba444..cb4ce39 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -325,6 +325,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %42 = OpImageSampleDrefImplicitLod %float %39 %40 %41 ConstOffset %int_2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 167
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index ae6078c..af2af3f 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -337,6 +337,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %49 = OpImageSampleDrefImplicitLod %float %44 %47 %48 ConstOffset %int_2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 178
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index ae5b118..a0e5a48 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -433,6 +433,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %49 = OpImageSampleDrefExplicitLod %float %44 %47 %48 Lod %float_0
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 210
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 53ecbf2..ffe2298 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -415,6 +415,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %42 = OpImageSampleDrefExplicitLod %float %39 %40 %41 Lod %float_0
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 199
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 1d4f2cd..08e8749 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -349,6 +349,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %43 = OpImageSampleDrefExplicitLod %float %40 %41 %42 Lod|ConstOffset %float_0 %int_2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 168
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index dea6663..b5c0fc0 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -361,6 +361,10 @@
 0:?     '@entryPointOutput.Depth' ( out float FragDepth)
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: Expected Image 'Sampled Type' to be the same as Result Type
+  %50 = OpImageSampleDrefExplicitLod %float %45 %48 %49 Lod|ConstOffset %float_0 %int_2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 179
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
old mode 100755
new mode 100644
index 1c1a9c0..e73940b
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -155,6 +155,10 @@
 0:?     'OutputStream.clip0' ( out 1-element array of float ClipDistance)
 0:?     'OutputStream.cull0' ( out 1-element array of float CullDistance)
 
+error: SPIRV-Tools Validation Errors
+error: According to the Vulkan spec BuiltIn Position variable needs to be a 4-component 32-bit float vector. ID <20> (OpVariable) is not a float vector.
+  OpStore %OutputStream_clip0 %25
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 65
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.shift.per-set.frag.out b/Test/baseResults/hlsl.shift.per-set.frag.out
index f7ae02e..7c7d383 100644
--- a/Test/baseResults/hlsl.shift.per-set.frag.out
+++ b/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -62,12 +62,13 @@
 0:56        'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
 0:56        Constant:
 0:56          0 (const uint)
-0:58      Branch: Return with expression
-0:58        Constant:
-0:58          0.000000
-0:58          0.000000
-0:58          0.000000
-0:58          0.000000
+0:57      'ts6' (layout( set=6 binding=1) uniform texture3D)
+0:59      Branch: Return with expression
+0:59        Constant:
+0:59          0.000000
+0:59          0.000000
+0:59          0.000000
+0:59          0.000000
 0:34  Function Definition: main( ( temp void)
 0:34    Function Parameters: 
 0:?     Sequence
@@ -80,6 +81,7 @@
 0:?     't1' (layout( set=1 binding=1) uniform texture1D)
 0:?     't2' (layout( set=1 binding=2) uniform texture2D)
 0:?     't3' (layout( set=2 binding=1) uniform texture3D)
+0:?     'ts6' (layout( set=6 binding=1) uniform texture3D)
 0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
@@ -162,12 +164,13 @@
 0:56        'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
 0:56        Constant:
 0:56          0 (const uint)
-0:58      Branch: Return with expression
-0:58        Constant:
-0:58          0.000000
-0:58          0.000000
-0:58          0.000000
-0:58          0.000000
+0:57      'ts6' (layout( set=6 binding=1) uniform texture3D)
+0:59      Branch: Return with expression
+0:59        Constant:
+0:59          0.000000
+0:59          0.000000
+0:59          0.000000
+0:59          0.000000
 0:34  Function Definition: main( ( temp void)
 0:34    Function Parameters: 
 0:?     Sequence
@@ -180,6 +183,7 @@
 0:?     't1' (layout( set=1 binding=1) uniform texture1D)
 0:?     't2' (layout( set=1 binding=2) uniform texture2D)
 0:?     't3' (layout( set=2 binding=1) uniform texture3D)
+0:?     'ts6' (layout( set=6 binding=1) uniform texture3D)
 0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
@@ -212,6 +216,7 @@
 u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16
 cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16
 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
+ts6: offset -1, type 8b5f, size 1, index -1, binding 71, stages 16
 
 Uniform block reflection:
 t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 0
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.staticFuncInit.frag.out b/Test/baseResults/hlsl.staticFuncInit.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
old mode 100755
new mode 100644
index bd216c8..4ea7bbb
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -211,6 +211,10 @@
 0:?     's.ff3' (layout( location=6) flat in bool)
 0:?     's.ff4' (layout( location=7) in 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: If OpTypeBool is stored in conjunction with OpVariable, it can only be used with non-externally visible shader Storage Classes: Workgroup, CrossWorkgroup, Private, and Function
+  %s_b = OpVariable %_ptr_Input_bool Input
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 102
diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out
index 3454eb6..0598ac9 100644
--- a/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -207,6 +207,10 @@
 0:?     'input[1].f' (layout( location=2) in float)
 0:?     'input[2].f' (layout( location=3) in float)
 
+error: SPIRV-Tools Validation Errors
+error: According to the Vulkan spec BuiltIn FragCoord variable needs to be a 4-component 32-bit float vector. ID <41> (OpVariable) is not a float vector.
+  %input_pos = OpVariable %_ptr_Input__arr_v4float_uint_3 Input
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 66
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index 9beadc7..df08655 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -149,6 +149,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: Structure id 12 decorated as BufferBlock must be explicitly laid out with Offset decorations.
+  %__0 = OpTypeStruct %uint
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 70
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index d78f77e..68d93c1 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -473,6 +473,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: AtomicIAdd: expected Value to be of type Result Type
+  %28 = OpAtomicIAdd %uint %24 %uint_1 %uint_0 %int_1
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 87
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index 862ebbe..49958a6 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -323,6 +323,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '14[size]'s type does not match Object <id> '20's type.
+  OpStore %size %20
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 114
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 18de2a8..1d11b64 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -175,6 +175,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '26[size]'s type does not match Object <id> '33's type.
+  OpStore %size %33
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 78
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 4bbc550..4b8ee63 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -137,6 +137,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: Structure id 20 decorated as BufferBlock must be explicitly laid out with Offset decorations.
+  %__1 = OpTypeStruct %uint
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 78
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 5f6e8ee..e058d11 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -187,6 +187,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '43[size]'s type does not match Object <id> '44's type.
+  OpStore %size %44
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 96
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index ccf295b..7fbd150 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -175,6 +175,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '26[size]'s type does not match Object <id> '33's type.
+  OpStore %size %33
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 78
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 9f1b5b3..ed27c89 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1003,6 +1003,10 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '14[size]'s type does not match Object <id> '20's type.
+  OpStore %size %20
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 239
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index 0778f50..62cb574 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -837,6 +837,10 @@
 0:?     'g_tTex2s1a' ( uniform texture2D)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
+error: SPIRV-Tools Validation Errors
+error: OpStore Pointer <id> '185's type does not match Object <id> '184's type.
+  OpStore %185 %184
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 240
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.tristream-append.geom.out b/Test/baseResults/hlsl.tristream-append.geom.out
index be6ca9c..c116724 100644
--- a/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/Test/baseResults/hlsl.tristream-append.geom.out
@@ -105,6 +105,10 @@
 0:?         'TriStream' ( temp structure{})
 0:?   Linker Objects
 
+error: SPIRV-Tools Validation Errors
+error: Output variable id <23> is used by entry point 'main' id <4>, but is not listed as an interface
+  %TriStream_1 = OpVariable %_ptr_Output_GSPS_INPUT Output
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 57
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/implicitInnerAtomicUint.frag.out b/Test/baseResults/implicitInnerAtomicUint.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index 63660db..333594e 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -198,7 +198,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 80007
-// Id's are bound by 71
+// Id's are bound by 70
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -214,24 +214,24 @@
                               Name 32  "b"
                               Name 33  "i"
                               Name 39  "c"
-                              Name 54  "s2D"
-                              Name 63  "bnameRuntime"
-                              MemberName 63(bnameRuntime) 0  "r"
-                              Name 65  ""
-                              Name 68  "bnameImplicit"
-                              MemberName 68(bnameImplicit) 0  "m"
-                              Name 70  ""
+                              Name 53  "s2D"
+                              Name 62  "bnameRuntime"
+                              MemberName 62(bnameRuntime) 0  "r"
+                              Name 64  ""
+                              Name 67  "bnameImplicit"
+                              MemberName 67(bnameImplicit) 0  "m"
+                              Name 69  ""
                               Decorate 12(color) Location 0
-                              Decorate 54(s2D) DescriptorSet 0
-                              Decorate 54(s2D) Binding 1
-                              Decorate 62 ArrayStride 4
-                              MemberDecorate 63(bnameRuntime) 0 Offset 0
-                              Decorate 63(bnameRuntime) BufferBlock
-                              Decorate 65 DescriptorSet 0
-                              Decorate 67 ArrayStride 4
-                              MemberDecorate 68(bnameImplicit) 0 Offset 0
-                              Decorate 68(bnameImplicit) BufferBlock
-                              Decorate 70 DescriptorSet 0
+                              Decorate 53(s2D) DescriptorSet 0
+                              Decorate 53(s2D) Binding 1
+                              Decorate 61 ArrayStride 4
+                              MemberDecorate 62(bnameRuntime) 0 Offset 0
+                              Decorate 62(bnameRuntime) BufferBlock
+                              Decorate 64 DescriptorSet 0
+                              Decorate 66 ArrayStride 4
+                              MemberDecorate 67(bnameImplicit) 0 Offset 0
+                              Decorate 67(bnameImplicit) BufferBlock
+                              Decorate 69 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -263,24 +263,23 @@
            39(c):     38(ptr) Variable Private
               40:     14(int) Constant 3
               42:     14(int) Constant 2
-              43:             TypePointer Output 6(float)
-              45:     14(int) Constant 9
-              51:             TypeImage 6(float) 2D sampled format:Unknown
-              52:             TypeSampledImage 51
-              53:             TypePointer UniformConstant 52
-         54(s2D):     53(ptr) Variable UniformConstant
-              56:             TypeVector 6(float) 2
-              57:    6(float) Constant 1056964608
-              58:   56(fvec2) ConstantComposite 57 57
-              62:             TypeRuntimeArray 6(float)
-63(bnameRuntime):             TypeStruct 62
-              64:             TypePointer Uniform 63(bnameRuntime)
-              65:     64(ptr) Variable Uniform
-              66:     15(int) Constant 4
-              67:             TypeArray 6(float) 66
-68(bnameImplicit):             TypeStruct 67
-              69:             TypePointer Uniform 68(bnameImplicit)
-              70:     69(ptr) Variable Uniform
+              44:     14(int) Constant 9
+              50:             TypeImage 6(float) 2D sampled format:Unknown
+              51:             TypeSampledImage 50
+              52:             TypePointer UniformConstant 51
+         53(s2D):     52(ptr) Variable UniformConstant
+              55:             TypeVector 6(float) 2
+              56:    6(float) Constant 1056964608
+              57:   55(fvec2) ConstantComposite 56 56
+              61:             TypeRuntimeArray 6(float)
+62(bnameRuntime):             TypeStruct 61
+              63:             TypePointer Uniform 62(bnameRuntime)
+              64:     63(ptr) Variable Uniform
+              65:     15(int) Constant 4
+              66:             TypeArray 6(float) 65
+67(bnameImplicit):             TypeStruct 66
+              68:             TypePointer Uniform 67(bnameImplicit)
+              69:     68(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
               13:    7(fvec4) FunctionCall 9(getColor()
@@ -298,18 +297,18 @@
                               FunctionEnd
     9(getColor():    7(fvec4) Function None 8
               10:             Label
-              44:     43(ptr) AccessChain 12(color) 42
-                              Store 44 21
-              46:     22(ptr) AccessChain 19(a1) 45
+              43:     22(ptr) AccessChain 19(a1) 42
+                              Store 43 21
+              45:     22(ptr) AccessChain 27(a2) 44
+                              Store 45 21
+              46:     22(ptr) AccessChain 32(b) 42
                               Store 46 21
-              47:     22(ptr) AccessChain 27(a2) 42
+              47:     22(ptr) AccessChain 39(c) 40
                               Store 47 21
-              48:     22(ptr) AccessChain 32(b) 40
-                              Store 48 21
-              49:          37 Load 39(c)
-              50:     22(ptr) AccessChain 32(b) 49
-                              Store 50 21
-              55:          52 Load 54(s2D)
-              59:    7(fvec4) ImageSampleImplicitLod 55 58
-                              ReturnValue 59
+              48:     14(int) Load 33(i)
+              49:     22(ptr) AccessChain 39(c) 48
+                              Store 49 21
+              54:          51 Load 53(s2D)
+              58:    7(fvec4) ImageSampleImplicitLod 54 57
+                              ReturnValue 58
                               FunctionEnd
diff --git a/Test/baseResults/missingBodies.vert.out b/Test/baseResults/missingBodies.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/mixedArrayDecls.frag.out b/Test/baseResults/mixedArrayDecls.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/nonuniform.frag.out b/Test/baseResults/nonuniform.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/runtimeArray.vert.out b/Test/baseResults/runtimeArray.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/specExamplesConf.vert.out b/Test/baseResults/specExamplesConf.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index d1a626d..eb02bad 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -1,6 +1,10 @@
 spv.130.frag
 WARNING: 0:31: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
 
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 205
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
old mode 100755
new mode 100644
index 89bf489..8a59c2f
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,4 +1,8 @@
 spv.140.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 96
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
old mode 100755
new mode 100644
index f759793..70dadf5
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,4 +1,8 @@
 spv.150.geom
+error: SPIRV-Tools Validation Errors
+error: Capability GeometryStreams is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability GeometryStreams
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 71
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
old mode 100755
new mode 100644
index 9de223c..1b2a16b
--- a/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -4,10 +4,8 @@
 // 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
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
old mode 100755
new mode 100644
index def7c57..f935f26
--- a/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -4,10 +4,8 @@
 // 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
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
old mode 100755
new mode 100644
index ebf48e9..d2a83ba
--- a/Test/baseResults/spv.16bitstorage.frag.out
+++ b/Test/baseResults/spv.16bitstorage.frag.out
@@ -4,10 +4,8 @@
 // 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
diff --git a/Test/baseResults/spv.16bitstorage_Error-int.frag.out b/Test/baseResults/spv.16bitstorage_Error-int.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.16bitstorage_Error-uint.frag.out b/Test/baseResults/spv.16bitstorage_Error-uint.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.16bitstorage_Error.frag.out b/Test/baseResults/spv.16bitstorage_Error.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 9cb2c63..a0583cf 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,4 +1,8 @@
 spv.400.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 1118
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index 74a4f0b..45f235f 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,4 +1,8 @@
 spv.420.geom
+error: SPIRV-Tools Validation Errors
+error: Capability GeometryStreams is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability GeometryStreams
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 72
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
old mode 100755
new mode 100644
index 94e7ab5..55a8b3b
--- a/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -4,7 +4,6 @@
 // Id's are bound by 171
 
                               Capability Shader
-                              Capability Int8
                               Capability CapabilityStorageBuffer8BitAccess
                               Capability CapabilityUniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
old mode 100755
new mode 100644
index f4e7b6d..461cec4
--- a/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -4,7 +4,6 @@
 // Id's are bound by 173
 
                               Capability Shader
-                              Capability Int8
                               Capability CapabilityStorageBuffer8BitAccess
                               Capability CapabilityUniformAndStorageBuffer8BitAccess
                               Extension  "SPV_KHR_8bit_storage"
diff --git a/Test/baseResults/spv.8bitstorage_Error-int.frag.out b/Test/baseResults/spv.8bitstorage_Error-int.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.8bitstorage_Error-uint.frag.out b/Test/baseResults/spv.8bitstorage_Error-uint.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
new file mode 100644
index 0000000..1dd88b3
--- /dev/null
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -0,0 +1,163 @@
+spv.AnyHitShader.rahit
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 81
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint AnyHitNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTNVX"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindNVX"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldNVX"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectNVX"
+                              Name 71  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 53(gl_HitTNVX) BuiltIn HitTNVX
+                              Decorate 58(gl_HitKindNVX) BuiltIn HitKindNVX
+                              Decorate 64(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 67(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+                              Decorate 71(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+  53(gl_HitTNVX):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindNVX):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldNVX):     63(ptr) Variable Input
+67(gl_WorldToObjectNVX):     63(ptr) Variable Input
+              69:             TypeVector 28(float) 4
+              70:             TypePointer IncomingRayPayloadNVX 69(fvec4)
+71(incomingPayload):     70(ptr) Variable IncomingRayPayloadNVX
+              72:   28(float) Constant 1056964608
+              73:   69(fvec4) ConstantComposite 72 72 72 72
+              75:     16(int) Constant 1
+              76:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTNVX)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindNVX)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldNVX)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectNVX)
+                              Store 66(v14) 68
+                              Store 71(incomingPayload) 73
+              74:     16(int) Load 18(v2)
+              77:    76(bool) IEqual 74 75
+                              SelectionMerge 79 None
+                              BranchConditional 77 78 80
+              78:               Label
+                                IgnoreIntersectionNVX
+                                Branch 79
+              80:               Label
+                                TerminateRayNVX
+                                Branch 79
+              79:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.AnyHitShader_Errors.rahit.out b/Test/baseResults/spv.AnyHitShader_Errors.rahit.out
new file mode 100644
index 0000000..5a863be
--- /dev/null
+++ b/Test/baseResults/spv.AnyHitShader_Errors.rahit.out
@@ -0,0 +1,8 @@
+spv.AnyHitShader_Errors.rahit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNVX in this stage)
+ERROR: 0:9: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:10: 'traceNVX' : no matching overloaded function found 
+ERROR: 3 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index a19fae9..798f083 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -1,6 +1,10 @@
 spv.AofA.frag
 WARNING: 0:6: '[][]' : Generating SPIR-V array-of-arrays, but Vulkan only supports single array level for this resource 
 
+error: SPIRV-Tools Validation Errors
+error: Only a single level of array is allowed for descriptor set variables
+  %nameAofA = OpVariable %_ptr_Uniform__arr__arr_uAofA_uint_5_uint_3 Uniform
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 104
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
new file mode 100644
index 0000000..5a1d7fc
--- /dev/null
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -0,0 +1,169 @@
+spv.ClosestHitShader.rchit
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 88
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint ClosestHitNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTNVX"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindNVX"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldNVX"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectNVX"
+                              Name 71  "accNV"
+                              Name 85  "localPayload"
+                              Name 87  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 53(gl_HitTNVX) BuiltIn HitTNVX
+                              Decorate 58(gl_HitKindNVX) BuiltIn HitKindNVX
+                              Decorate 64(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 67(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+                              Decorate 71(accNV) DescriptorSet 0
+                              Decorate 71(accNV) Binding 0
+                              Decorate 85(localPayload) Location 0
+                              Decorate 87(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+  53(gl_HitTNVX):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindNVX):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldNVX):     63(ptr) Variable Input
+67(gl_WorldToObjectNVX):     63(ptr) Variable Input
+              69:             TypeAccelerationStructureNVX
+              70:             TypePointer UniformConstant 69
+       71(accNV):     70(ptr) Variable UniformConstant
+              73:      6(int) Constant 0
+              74:      6(int) Constant 1
+              75:      6(int) Constant 2
+              76:      6(int) Constant 3
+              77:   28(float) Constant 1056964608
+              78:   29(fvec3) ConstantComposite 77 77 77
+              79:   28(float) Constant 1065353216
+              80:   29(fvec3) ConstantComposite 79 79 79
+              81:   28(float) Constant 1061158912
+              82:     16(int) Constant 1
+              83:             TypeVector 28(float) 4
+              84:             TypePointer RayPayloadNVX 83(fvec4)
+85(localPayload):     84(ptr) Variable RayPayloadNVX
+              86:             TypePointer IncomingRayPayloadNVX 83(fvec4)
+87(incomingPayload):     86(ptr) Variable IncomingRayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTNVX)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindNVX)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldNVX)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectNVX)
+                              Store 66(v14) 68
+              72:          69 Load 71(accNV)
+                              TraceNVX 72 73 74 75 76 73 78 77 80 81 82
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ClosestHitShader_Errors.rchit.out
new file mode 100644
index 0000000..36352ae
--- /dev/null
+++ b/Test/baseResults/spv.ClosestHitShader_Errors.rchit.out
@@ -0,0 +1,9 @@
+spv.ClosestHitShader_Errors.rchit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNVX in this stage)
+ERROR: 0:9: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:10: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 0:11: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 4 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
new file mode 100644
index 0000000..bc84c6e
--- /dev/null
+++ b/Test/baseResults/spv.IntersectShader.rint.out
@@ -0,0 +1,138 @@
+spv.IntersectShader.rint
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 71
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint IntersectionNVX 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexNVX"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginNVX"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionNVX"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginNVX"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionNVX"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminNVX"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxNVX"
+                              Name 54  "v11"
+                              Name 56  "gl_ObjectToWorldNVX"
+                              Name 58  "v12"
+                              Name 59  "gl_WorldToObjectNVX"
+                              Name 63  "iAttr"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexNVX) BuiltIn InstanceCustomIndexNVX
+                              Decorate 33(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 36(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 39(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 42(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 47(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 50(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 56(gl_ObjectToWorldNVX) BuiltIn ObjectToWorldNVX
+                              Decorate 59(gl_WorldToObjectNVX) BuiltIn WorldToObjectNVX
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexNVX):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginNVX):     32(ptr) Variable Input
+36(gl_WorldRayDirectionNVX):     32(ptr) Variable Input
+39(gl_ObjectRayOriginNVX):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionNVX):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminNVX):     46(ptr) Variable Input
+50(gl_RayTmaxNVX):     46(ptr) Variable Input
+              52:             TypeMatrix 29(fvec3) 4
+              53:             TypePointer Function 52
+              55:             TypePointer Input 52
+56(gl_ObjectToWorldNVX):     55(ptr) Variable Input
+59(gl_WorldToObjectNVX):     55(ptr) Variable Input
+              61:             TypeVector 28(float) 4
+              62:             TypePointer HitAttributeNVX 61(fvec4)
+       63(iAttr):     62(ptr) Variable HitAttributeNVX
+              64:   28(float) Constant 1056964608
+              65:   28(float) Constant 0
+              66:   28(float) Constant 1065353216
+              67:   61(fvec4) ConstantComposite 64 64 65 66
+              68:      6(int) Constant 1
+              69:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         54(v11):     53(ptr) Variable Function
+         58(v12):     53(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexNVX)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginNVX)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionNVX)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginNVX)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionNVX)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminNVX)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxNVX)
+                              Store 49(v10) 51
+              57:          52 Load 56(gl_ObjectToWorldNVX)
+                              Store 54(v11) 57
+              60:          52 Load 59(gl_WorldToObjectNVX)
+                              Store 58(v12) 60
+                              Store 63(iAttr) 67
+              70:    69(bool) ReportIntersectionNVX 64 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.IntersectShader_Errors.rint.out b/Test/baseResults/spv.IntersectShader_Errors.rint.out
new file mode 100644
index 0000000..804ddb4
--- /dev/null
+++ b/Test/baseResults/spv.IntersectShader_Errors.rint.out
@@ -0,0 +1,10 @@
+spv.IntersectShader_Errors.rint
+ERROR: 0:3: 'rayPayloadInNVX' : not supported in this stage: intersection
+ERROR: 0:4: 'rayPayloadNVX' : not supported in this stage: intersection
+ERROR: 0:8: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:9: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:10: 'traceNVX' : no matching overloaded function found 
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
new file mode 100644
index 0000000..5384084
--- /dev/null
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -0,0 +1,113 @@
+spv.MissShader.rmiss
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 60
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MissNVX 4  "main" 11 14 21 24 27 30 35 38
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeNVX"
+                              Name 19  "v2"
+                              Name 21  "gl_WorldRayOriginNVX"
+                              Name 23  "v3"
+                              Name 24  "gl_WorldRayDirectionNVX"
+                              Name 26  "v4"
+                              Name 27  "gl_ObjectRayOriginNVX"
+                              Name 29  "v5"
+                              Name 30  "gl_ObjectRayDirectionNVX"
+                              Name 33  "v6"
+                              Name 35  "gl_RayTminNVX"
+                              Name 37  "v7"
+                              Name 38  "gl_RayTmaxNVX"
+                              Name 42  "accNV"
+                              Name 57  "localPayload"
+                              Name 59  "incomingPayload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 14(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 21(gl_WorldRayOriginNVX) BuiltIn WorldRayOriginNVX
+                              Decorate 24(gl_WorldRayDirectionNVX) BuiltIn WorldRayDirectionNVX
+                              Decorate 27(gl_ObjectRayOriginNVX) BuiltIn ObjectRayOriginNVX
+                              Decorate 30(gl_ObjectRayDirectionNVX) BuiltIn ObjectRayDirectionNVX
+                              Decorate 35(gl_RayTminNVX) BuiltIn RayTminNVX
+                              Decorate 38(gl_RayTmaxNVX) BuiltIn RayTmaxNVX
+                              Decorate 42(accNV) DescriptorSet 0
+                              Decorate 42(accNV) Binding 0
+                              Decorate 57(localPayload) Location 0
+                              Decorate 59(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypePointer Input 7(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+14(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 3
+              18:             TypePointer Function 17(fvec3)
+              20:             TypePointer Input 17(fvec3)
+21(gl_WorldRayOriginNVX):     20(ptr) Variable Input
+24(gl_WorldRayDirectionNVX):     20(ptr) Variable Input
+27(gl_ObjectRayOriginNVX):     20(ptr) Variable Input
+30(gl_ObjectRayDirectionNVX):     20(ptr) Variable Input
+              32:             TypePointer Function 16(float)
+              34:             TypePointer Input 16(float)
+35(gl_RayTminNVX):     34(ptr) Variable Input
+38(gl_RayTmaxNVX):     34(ptr) Variable Input
+              40:             TypeAccelerationStructureNVX
+              41:             TypePointer UniformConstant 40
+       42(accNV):     41(ptr) Variable UniformConstant
+              44:      6(int) Constant 0
+              45:      6(int) Constant 1
+              46:      6(int) Constant 2
+              47:      6(int) Constant 3
+              48:   16(float) Constant 1056964608
+              49:   17(fvec3) ConstantComposite 48 48 48
+              50:   16(float) Constant 1065353216
+              51:   17(fvec3) ConstantComposite 50 50 50
+              52:   16(float) Constant 1061158912
+              53:             TypeInt 32 1
+              54:     53(int) Constant 1
+              55:             TypeVector 16(float) 4
+              56:             TypePointer RayPayloadNVX 55(fvec4)
+57(localPayload):     56(ptr) Variable RayPayloadNVX
+              58:             TypePointer IncomingRayPayloadNVX 55(fvec4)
+59(incomingPayload):     58(ptr) Variable IncomingRayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          19(v2):     18(ptr) Variable Function
+          23(v3):     18(ptr) Variable Function
+          26(v4):     18(ptr) Variable Function
+          29(v5):     18(ptr) Variable Function
+          33(v6):     32(ptr) Variable Function
+          37(v7):     32(ptr) Variable Function
+              12:    7(ivec2) Load 11(gl_LaunchIDNVX)
+                              Store 9(v0) 12
+              15:    7(ivec2) Load 14(gl_LaunchSizeNVX)
+                              Store 13(v1) 15
+              22:   17(fvec3) Load 21(gl_WorldRayOriginNVX)
+                              Store 19(v2) 22
+              25:   17(fvec3) Load 24(gl_WorldRayDirectionNVX)
+                              Store 23(v3) 25
+              28:   17(fvec3) Load 27(gl_ObjectRayOriginNVX)
+                              Store 26(v4) 28
+              31:   17(fvec3) Load 30(gl_ObjectRayDirectionNVX)
+                              Store 29(v5) 31
+              36:   16(float) Load 35(gl_RayTminNVX)
+                              Store 33(v6) 36
+              39:   16(float) Load 38(gl_RayTmaxNVX)
+                              Store 37(v7) 39
+              43:          40 Load 42(accNV)
+                              TraceNVX 43 44 45 46 47 44 49 48 51 52 54
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.MissShader_Errors.rmiss.out b/Test/baseResults/spv.MissShader_Errors.rmiss.out
new file mode 100644
index 0000000..bfc2f6c
--- /dev/null
+++ b/Test/baseResults/spv.MissShader_Errors.rmiss.out
@@ -0,0 +1,21 @@
+spv.MissShader_Errors.rmiss
+ERROR: 0:3: 'hitAttributeNVX' : not supported in this stage: miss
+ERROR: 0:6: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:6: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:7: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:7: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:8: 'gl_InstanceCustomIndexNVX' : undeclared identifier 
+ERROR: 0:8: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:9: 'gl_ObjectToWorldNVX' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:10: 'gl_WorldToObjectNVX' : undeclared identifier 
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:11: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:12: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:13: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:14: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:15: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 16 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
new file mode 100644
index 0000000..ecbee8a
--- /dev/null
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -0,0 +1,46 @@
+spv.RayConstants.rgen
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 27
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationNVX 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 8  "accNV"
+                              Name 26  "payload"
+                              Decorate 8(accNV) DescriptorSet 0
+                              Decorate 8(accNV) Binding 0
+                              Decorate 26(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeAccelerationStructureNVX
+               7:             TypePointer UniformConstant 6
+        8(accNV):      7(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:     10(int) Constant 255
+              12:     10(int) Constant 0
+              13:     10(int) Constant 1
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 3
+              16:   14(float) Constant 0
+              17:   15(fvec3) ConstantComposite 16 16 16
+              18:   14(float) Constant 1056964608
+              19:   14(float) Constant 1065353216
+              20:   15(fvec3) ConstantComposite 19 19 19
+              21:   14(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypeVector 14(float) 4
+              25:             TypePointer RayPayloadNVX 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadNVX
+         4(main):           2 Function None 3
+               5:             Label
+               9:           6 Load 8(accNV)
+                              TraceNVX 9 11 12 13 13 12 17 18 20 21 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
new file mode 100644
index 0000000..ad1ba7c
--- /dev/null
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -0,0 +1,101 @@
+spv.RayGenShader.rgen
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 60
+
+                              Capability RaytracingNVX
+                              Extension  "SPV_NVX_raytracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationNVX 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_NVX_raytracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDNVX"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeNVX"
+                              Name 24  "sy"
+                              Name 29  "accNV"
+                              Name 48  "block"
+                              MemberName 48(block) 0  "arr"
+                              MemberName 48(block) 1  "pad"
+                              Name 50  ""
+                              Name 56  "payload"
+                              Decorate 11(gl_LaunchIDNVX) BuiltIn LaunchIdNVX
+                              Decorate 21(gl_LaunchSizeNVX) BuiltIn LaunchSizeNVX
+                              Decorate 29(accNV) DescriptorSet 0
+                              Decorate 29(accNV) Binding 0
+                              Decorate 46 ArrayStride 4
+                              MemberDecorate 48(block) 0 Offset 0
+                              MemberDecorate 48(block) 1 Offset 16
+                              Decorate 48(block) BufferBlock
+                              Decorate 56(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 2
+              10:             TypePointer Input 9(ivec2)
+11(gl_LaunchIDNVX):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeNVX):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureNVX
+              28:             TypePointer UniformConstant 27
+       29(accNV):     28(ptr) Variable UniformConstant
+              35:             TypeFloat 32
+              36:             TypeVector 35(float) 3
+              37:   35(float) Constant 0
+              38:   36(fvec3) ConstantComposite 37 37 37
+              39:   35(float) Constant 1056964608
+              40:   35(float) Constant 1065353216
+              41:   36(fvec3) ConstantComposite 40 40 40
+              42:   35(float) Constant 1061158912
+              43:             TypeInt 32 1
+              44:     43(int) Constant 1
+              45:      6(int) Constant 4
+              46:             TypeArray 35(float) 45
+              47:             TypeVector 35(float) 4
+       48(block):             TypeStruct 46 47(fvec4)
+              49:             TypePointer ShaderRecordBufferNVX 48(block)
+              50:     49(ptr) Variable ShaderRecordBufferNVX
+              51:     43(int) Constant 0
+              52:     43(int) Constant 3
+              53:             TypePointer ShaderRecordBufferNVX 35(float)
+              55:             TypePointer RayPayloadNVX 47(fvec4)
+     56(payload):     55(ptr) Variable RayPayloadNVX
+              58:             TypePointer ShaderRecordBufferNVX 47(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDNVX) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDNVX) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeNVX) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeNVX) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accNV)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+                              TraceNVX 30 31 32 33 34 12 38 39 41 42 44
+              54:     53(ptr) AccessChain 50 51 52
+                              Store 54 40
+              57:   47(fvec4) Load 56(payload)
+              59:     58(ptr) AccessChain 50 44
+                              Store 59 57
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.RayGenShader_Errors.rgen.out
new file mode 100644
index 0000000..7d9e2c2
--- /dev/null
+++ b/Test/baseResults/spv.RayGenShader_Errors.rgen.out
@@ -0,0 +1,39 @@
+spv.RayGenShader_Errors.rgen
+ERROR: 0:3: 'hitAttributeNVX' : not supported in this stage: ray-generation
+ERROR: 0:4: 'rayPayloadInNVX' : not supported in this stage: ray-generation
+ERROR: 0:5: 'shaderRecordNVX' : can only be used with a buffer 
+ERROR: 0:9: 'binding' : cannot be used with shaderRecordNVX 
+ERROR: 0:12: 'set' : cannot be used with shaderRecordNVX 
+ERROR: 0:23: 'accelerationStructureNVX' : accelerationStructureNVX can only be used in uniform variables or function parameters: a
+ERROR: 0:23: '=' :  cannot convert from ' const int' to ' temp accelerationStructureNVX'
+ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:24: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:25: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:26: 'gl_InstanceCustomIndexNVX' : undeclared identifier 
+ERROR: 0:26: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:27: 'gl_WorldRayOriginNVX' : undeclared identifier 
+ERROR: 0:27: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:28: 'gl_WorldRayDirectionNVX' : undeclared identifier 
+ERROR: 0:28: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:29: 'gl_ObjectRayOriginNVX' : undeclared identifier 
+ERROR: 0:29: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:30: 'gl_ObjectRayDirectionNVX' : undeclared identifier 
+ERROR: 0:30: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:31: 'gl_RayTminNVX' : undeclared identifier 
+ERROR: 0:32: 'gl_RayTmaxNVX' : undeclared identifier 
+ERROR: 0:33: 'gl_ObjectToWorldNVX' : undeclared identifier 
+ERROR: 0:33: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:34: 'gl_WorldToObjectNVX' : undeclared identifier 
+ERROR: 0:34: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:35: 'gl_HitTNVX' : undeclared identifier 
+ERROR: 0:36: 'gl_HitKindNVX' : undeclared identifier 
+ERROR: 0:37: 'reportIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:38: 'ignoreIntersectionNVX' : no matching overloaded function found 
+ERROR: 0:39: 'terminateRayNVX' : no matching overloaded function found 
+ERROR: 32 compilation errors.  No code generated.
+
+
+ERROR: Linking ray-generation stage: Only one shaderRecordNVX buffer block is allowed per stage
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
old mode 100755
new mode 100644
index 556a698..f175a19
--- a/Test/baseResults/spv.builtInXFB.vert.out
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -1,4 +1,8 @@
 spv.builtInXFB.vert
+error: SPIRV-Tools Validation Errors
+error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability TransformFeedback
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 21
diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out
new file mode 100644
index 0000000..f05dbc0
--- /dev/null
+++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -0,0 +1,358 @@
+spv.computeShaderDerivatives.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 212
+
+                              Capability Shader
+                              Capability DerivativeControl
+                              Capability ComputeDerivativeGroupQuadsNV
+                              Extension  "SPV_NV_compute_shader_derivatives"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 2 4 1
+                              ExecutionMode 4 DerivativeGroupQuadsNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_compute_shader_derivatives"
+                              Name 4  "main"
+                              Name 10  "block"
+                              MemberName 10(block) 0  "fDerivativeX"
+                              MemberName 10(block) 1  "fDerivativeY"
+                              MemberName 10(block) 2  "fDerivativeWidth"
+                              MemberName 10(block) 3  "fCoarseDerivativeX"
+                              MemberName 10(block) 4  "fCoarseDerivativeY"
+                              MemberName 10(block) 5  "fCoarseDerivativeWidth"
+                              MemberName 10(block) 6  "fFineDerivativeX"
+                              MemberName 10(block) 7  "fFineDerivativeY"
+                              MemberName 10(block) 8  "fFineDerivativeWidth"
+                              MemberName 10(block) 9  "fX"
+                              MemberName 10(block) 10  "fY"
+                              MemberName 10(block) 11  "v2DerivativeX"
+                              MemberName 10(block) 12  "v2DerivativeY"
+                              MemberName 10(block) 13  "v2DerivativeWidth"
+                              MemberName 10(block) 14  "v2CoarseDerivativeX"
+                              MemberName 10(block) 15  "v2CoarseDerivativeY"
+                              MemberName 10(block) 16  "v2CoarseDerivativeWidth"
+                              MemberName 10(block) 17  "v2FineDerivativeX"
+                              MemberName 10(block) 18  "v2FineDerivativeY"
+                              MemberName 10(block) 19  "v2FineDerivativeWidth"
+                              MemberName 10(block) 20  "v2X"
+                              MemberName 10(block) 21  "v2Y"
+                              MemberName 10(block) 22  "v3DerivativeX"
+                              MemberName 10(block) 23  "v3DerivativeY"
+                              MemberName 10(block) 24  "v3DerivativeWidth"
+                              MemberName 10(block) 25  "v3CoarseDerivativeX"
+                              MemberName 10(block) 26  "v3CoarseDerivativeY"
+                              MemberName 10(block) 27  "v3CoarseDerivativeWidth"
+                              MemberName 10(block) 28  "v3FineDerivativeX"
+                              MemberName 10(block) 29  "v3FineDerivativeY"
+                              MemberName 10(block) 30  "v3FineDerivativeWidth"
+                              MemberName 10(block) 31  "v3X"
+                              MemberName 10(block) 32  "v3Y"
+                              MemberName 10(block) 33  "v4DerivativeX"
+                              MemberName 10(block) 34  "v4DerivativeY"
+                              MemberName 10(block) 35  "v4DerivativeWidth"
+                              MemberName 10(block) 36  "v4CoarseDerivativeX"
+                              MemberName 10(block) 37  "v4CoarseDerivativeY"
+                              MemberName 10(block) 38  "v4CoarseDerivativeWidth"
+                              MemberName 10(block) 39  "v4FineDerivativeX"
+                              MemberName 10(block) 40  "v4FineDerivativeY"
+                              MemberName 10(block) 41  "v4FineDerivativeWidth"
+                              MemberName 10(block) 42  "v4X"
+                              MemberName 10(block) 43  "v4Y"
+                              Name 12  ""
+                              MemberDecorate 10(block) 0 Offset 0
+                              MemberDecorate 10(block) 1 Offset 4
+                              MemberDecorate 10(block) 2 Offset 8
+                              MemberDecorate 10(block) 3 Offset 12
+                              MemberDecorate 10(block) 4 Offset 16
+                              MemberDecorate 10(block) 5 Offset 20
+                              MemberDecorate 10(block) 6 Offset 24
+                              MemberDecorate 10(block) 7 Offset 28
+                              MemberDecorate 10(block) 8 Offset 32
+                              MemberDecorate 10(block) 9 Offset 36
+                              MemberDecorate 10(block) 10 Offset 40
+                              MemberDecorate 10(block) 11 Offset 48
+                              MemberDecorate 10(block) 12 Offset 56
+                              MemberDecorate 10(block) 13 Offset 64
+                              MemberDecorate 10(block) 14 Offset 72
+                              MemberDecorate 10(block) 15 Offset 80
+                              MemberDecorate 10(block) 16 Offset 88
+                              MemberDecorate 10(block) 17 Offset 96
+                              MemberDecorate 10(block) 18 Offset 104
+                              MemberDecorate 10(block) 19 Offset 112
+                              MemberDecorate 10(block) 20 Offset 120
+                              MemberDecorate 10(block) 21 Offset 128
+                              MemberDecorate 10(block) 22 Offset 144
+                              MemberDecorate 10(block) 23 Offset 160
+                              MemberDecorate 10(block) 24 Offset 176
+                              MemberDecorate 10(block) 25 Offset 192
+                              MemberDecorate 10(block) 26 Offset 208
+                              MemberDecorate 10(block) 27 Offset 224
+                              MemberDecorate 10(block) 28 Offset 240
+                              MemberDecorate 10(block) 29 Offset 256
+                              MemberDecorate 10(block) 30 Offset 272
+                              MemberDecorate 10(block) 31 Offset 288
+                              MemberDecorate 10(block) 32 Offset 304
+                              MemberDecorate 10(block) 33 Offset 320
+                              MemberDecorate 10(block) 34 Offset 336
+                              MemberDecorate 10(block) 35 Offset 352
+                              MemberDecorate 10(block) 36 Offset 368
+                              MemberDecorate 10(block) 37 Offset 384
+                              MemberDecorate 10(block) 38 Offset 400
+                              MemberDecorate 10(block) 39 Offset 416
+                              MemberDecorate 10(block) 40 Offset 432
+                              MemberDecorate 10(block) 41 Offset 448
+                              MemberDecorate 10(block) 42 Offset 464
+                              MemberDecorate 10(block) 43 Offset 480
+                              Decorate 10(block) BufferBlock
+                              Decorate 12 DescriptorSet 0
+                              Decorate 211 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypeVector 6(float) 3
+               9:             TypeVector 6(float) 4
+       10(block):             TypeStruct 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4)
+              11:             TypePointer Uniform 10(block)
+              12:     11(ptr) Variable Uniform
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:     13(int) Constant 9
+              16:             TypePointer Uniform 6(float)
+              21:     13(int) Constant 1
+              22:     13(int) Constant 10
+              27:     13(int) Constant 2
+              32:     13(int) Constant 3
+              37:     13(int) Constant 4
+              42:     13(int) Constant 5
+              47:     13(int) Constant 6
+              52:     13(int) Constant 7
+              57:     13(int) Constant 8
+              62:     13(int) Constant 11
+              63:     13(int) Constant 20
+              64:             TypePointer Uniform 7(fvec2)
+              69:     13(int) Constant 12
+              70:     13(int) Constant 21
+              75:     13(int) Constant 13
+              80:     13(int) Constant 14
+              85:     13(int) Constant 15
+              90:     13(int) Constant 16
+              95:     13(int) Constant 17
+             100:     13(int) Constant 18
+             105:     13(int) Constant 19
+             110:     13(int) Constant 22
+             111:     13(int) Constant 31
+             112:             TypePointer Uniform 8(fvec3)
+             117:     13(int) Constant 23
+             118:     13(int) Constant 32
+             123:     13(int) Constant 24
+             128:     13(int) Constant 25
+             133:     13(int) Constant 26
+             138:     13(int) Constant 27
+             143:     13(int) Constant 28
+             148:     13(int) Constant 29
+             153:     13(int) Constant 30
+             158:     13(int) Constant 33
+             159:     13(int) Constant 42
+             160:             TypePointer Uniform 9(fvec4)
+             165:     13(int) Constant 34
+             166:     13(int) Constant 43
+             171:     13(int) Constant 35
+             176:     13(int) Constant 36
+             181:     13(int) Constant 37
+             186:     13(int) Constant 38
+             191:     13(int) Constant 39
+             196:     13(int) Constant 40
+             201:     13(int) Constant 41
+             206:             TypeInt 32 0
+             207:             TypeVector 206(int) 3
+             208:    206(int) Constant 2
+             209:    206(int) Constant 4
+             210:    206(int) Constant 1
+             211:  207(ivec3) ConstantComposite 208 209 210
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 12 15
+              18:    6(float) Load 17
+              19:    6(float) DPdx 18
+              20:     16(ptr) AccessChain 12 14
+                              Store 20 19
+              23:     16(ptr) AccessChain 12 22
+              24:    6(float) Load 23
+              25:    6(float) DPdy 24
+              26:     16(ptr) AccessChain 12 21
+                              Store 26 25
+              28:     16(ptr) AccessChain 12 15
+              29:    6(float) Load 28
+              30:    6(float) Fwidth 29
+              31:     16(ptr) AccessChain 12 27
+                              Store 31 30
+              33:     16(ptr) AccessChain 12 15
+              34:    6(float) Load 33
+              35:    6(float) DPdxCoarse 34
+              36:     16(ptr) AccessChain 12 32
+                              Store 36 35
+              38:     16(ptr) AccessChain 12 22
+              39:    6(float) Load 38
+              40:    6(float) DPdyCoarse 39
+              41:     16(ptr) AccessChain 12 37
+                              Store 41 40
+              43:     16(ptr) AccessChain 12 15
+              44:    6(float) Load 43
+              45:    6(float) FwidthCoarse 44
+              46:     16(ptr) AccessChain 12 42
+                              Store 46 45
+              48:     16(ptr) AccessChain 12 15
+              49:    6(float) Load 48
+              50:    6(float) DPdxFine 49
+              51:     16(ptr) AccessChain 12 47
+                              Store 51 50
+              53:     16(ptr) AccessChain 12 22
+              54:    6(float) Load 53
+              55:    6(float) DPdyFine 54
+              56:     16(ptr) AccessChain 12 52
+                              Store 56 55
+              58:     16(ptr) AccessChain 12 15
+              59:    6(float) Load 58
+              60:    6(float) FwidthFine 59
+              61:     16(ptr) AccessChain 12 57
+                              Store 61 60
+              65:     64(ptr) AccessChain 12 63
+              66:    7(fvec2) Load 65
+              67:    7(fvec2) DPdx 66
+              68:     64(ptr) AccessChain 12 62
+                              Store 68 67
+              71:     64(ptr) AccessChain 12 70
+              72:    7(fvec2) Load 71
+              73:    7(fvec2) DPdy 72
+              74:     64(ptr) AccessChain 12 69
+                              Store 74 73
+              76:     64(ptr) AccessChain 12 63
+              77:    7(fvec2) Load 76
+              78:    7(fvec2) Fwidth 77
+              79:     64(ptr) AccessChain 12 75
+                              Store 79 78
+              81:     64(ptr) AccessChain 12 63
+              82:    7(fvec2) Load 81
+              83:    7(fvec2) DPdxCoarse 82
+              84:     64(ptr) AccessChain 12 80
+                              Store 84 83
+              86:     64(ptr) AccessChain 12 70
+              87:    7(fvec2) Load 86
+              88:    7(fvec2) DPdyCoarse 87
+              89:     64(ptr) AccessChain 12 85
+                              Store 89 88
+              91:     64(ptr) AccessChain 12 63
+              92:    7(fvec2) Load 91
+              93:    7(fvec2) FwidthCoarse 92
+              94:     64(ptr) AccessChain 12 90
+                              Store 94 93
+              96:     64(ptr) AccessChain 12 63
+              97:    7(fvec2) Load 96
+              98:    7(fvec2) DPdxFine 97
+              99:     64(ptr) AccessChain 12 95
+                              Store 99 98
+             101:     64(ptr) AccessChain 12 70
+             102:    7(fvec2) Load 101
+             103:    7(fvec2) DPdyFine 102
+             104:     64(ptr) AccessChain 12 100
+                              Store 104 103
+             106:     64(ptr) AccessChain 12 63
+             107:    7(fvec2) Load 106
+             108:    7(fvec2) FwidthFine 107
+             109:     64(ptr) AccessChain 12 105
+                              Store 109 108
+             113:    112(ptr) AccessChain 12 111
+             114:    8(fvec3) Load 113
+             115:    8(fvec3) DPdx 114
+             116:    112(ptr) AccessChain 12 110
+                              Store 116 115
+             119:    112(ptr) AccessChain 12 118
+             120:    8(fvec3) Load 119
+             121:    8(fvec3) DPdy 120
+             122:    112(ptr) AccessChain 12 117
+                              Store 122 121
+             124:    112(ptr) AccessChain 12 111
+             125:    8(fvec3) Load 124
+             126:    8(fvec3) Fwidth 125
+             127:    112(ptr) AccessChain 12 123
+                              Store 127 126
+             129:    112(ptr) AccessChain 12 111
+             130:    8(fvec3) Load 129
+             131:    8(fvec3) DPdxCoarse 130
+             132:    112(ptr) AccessChain 12 128
+                              Store 132 131
+             134:    112(ptr) AccessChain 12 118
+             135:    8(fvec3) Load 134
+             136:    8(fvec3) DPdyCoarse 135
+             137:    112(ptr) AccessChain 12 133
+                              Store 137 136
+             139:    112(ptr) AccessChain 12 111
+             140:    8(fvec3) Load 139
+             141:    8(fvec3) FwidthCoarse 140
+             142:    112(ptr) AccessChain 12 138
+                              Store 142 141
+             144:    112(ptr) AccessChain 12 111
+             145:    8(fvec3) Load 144
+             146:    8(fvec3) DPdxFine 145
+             147:    112(ptr) AccessChain 12 143
+                              Store 147 146
+             149:    112(ptr) AccessChain 12 118
+             150:    8(fvec3) Load 149
+             151:    8(fvec3) DPdyFine 150
+             152:    112(ptr) AccessChain 12 148
+                              Store 152 151
+             154:    112(ptr) AccessChain 12 111
+             155:    8(fvec3) Load 154
+             156:    8(fvec3) FwidthFine 155
+             157:    112(ptr) AccessChain 12 153
+                              Store 157 156
+             161:    160(ptr) AccessChain 12 159
+             162:    9(fvec4) Load 161
+             163:    9(fvec4) DPdx 162
+             164:    160(ptr) AccessChain 12 158
+                              Store 164 163
+             167:    160(ptr) AccessChain 12 166
+             168:    9(fvec4) Load 167
+             169:    9(fvec4) DPdy 168
+             170:    160(ptr) AccessChain 12 165
+                              Store 170 169
+             172:    160(ptr) AccessChain 12 159
+             173:    9(fvec4) Load 172
+             174:    9(fvec4) Fwidth 173
+             175:    160(ptr) AccessChain 12 171
+                              Store 175 174
+             177:    160(ptr) AccessChain 12 159
+             178:    9(fvec4) Load 177
+             179:    9(fvec4) DPdxCoarse 178
+             180:    160(ptr) AccessChain 12 176
+                              Store 180 179
+             182:    160(ptr) AccessChain 12 166
+             183:    9(fvec4) Load 182
+             184:    9(fvec4) DPdyCoarse 183
+             185:    160(ptr) AccessChain 12 181
+                              Store 185 184
+             187:    160(ptr) AccessChain 12 159
+             188:    9(fvec4) Load 187
+             189:    9(fvec4) FwidthCoarse 188
+             190:    160(ptr) AccessChain 12 186
+                              Store 190 189
+             192:    160(ptr) AccessChain 12 159
+             193:    9(fvec4) Load 192
+             194:    9(fvec4) DPdxFine 193
+             195:    160(ptr) AccessChain 12 191
+                              Store 195 194
+             197:    160(ptr) AccessChain 12 166
+             198:    9(fvec4) Load 197
+             199:    9(fvec4) DPdyFine 198
+             200:    160(ptr) AccessChain 12 196
+                              Store 200 199
+             202:    160(ptr) AccessChain 12 159
+             203:    9(fvec4) Load 202
+             204:    9(fvec4) FwidthFine 203
+             205:    160(ptr) AccessChain 12 201
+                              Store 205 204
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
new file mode 100644
index 0000000..94a3dfc
--- /dev/null
+++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -0,0 +1,358 @@
+spv.computeShaderDerivatives2.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 212
+
+                              Capability Shader
+                              Capability DerivativeControl
+                              Capability ComputeDerivativeGroupLinearNV
+                              Extension  "SPV_NV_compute_shader_derivatives"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 2 4 1
+                              ExecutionMode 4 DerivativeGroupLinearNV
+                              Source ESSL 320
+                              SourceExtension  "GL_NV_compute_shader_derivatives"
+                              Name 4  "main"
+                              Name 10  "block"
+                              MemberName 10(block) 0  "fDerivativeX"
+                              MemberName 10(block) 1  "fDerivativeY"
+                              MemberName 10(block) 2  "fDerivativeWidth"
+                              MemberName 10(block) 3  "fCoarseDerivativeX"
+                              MemberName 10(block) 4  "fCoarseDerivativeY"
+                              MemberName 10(block) 5  "fCoarseDerivativeWidth"
+                              MemberName 10(block) 6  "fFineDerivativeX"
+                              MemberName 10(block) 7  "fFineDerivativeY"
+                              MemberName 10(block) 8  "fFineDerivativeWidth"
+                              MemberName 10(block) 9  "fX"
+                              MemberName 10(block) 10  "fY"
+                              MemberName 10(block) 11  "v2DerivativeX"
+                              MemberName 10(block) 12  "v2DerivativeY"
+                              MemberName 10(block) 13  "v2DerivativeWidth"
+                              MemberName 10(block) 14  "v2CoarseDerivativeX"
+                              MemberName 10(block) 15  "v2CoarseDerivativeY"
+                              MemberName 10(block) 16  "v2CoarseDerivativeWidth"
+                              MemberName 10(block) 17  "v2FineDerivativeX"
+                              MemberName 10(block) 18  "v2FineDerivativeY"
+                              MemberName 10(block) 19  "v2FineDerivativeWidth"
+                              MemberName 10(block) 20  "v2X"
+                              MemberName 10(block) 21  "v2Y"
+                              MemberName 10(block) 22  "v3DerivativeX"
+                              MemberName 10(block) 23  "v3DerivativeY"
+                              MemberName 10(block) 24  "v3DerivativeWidth"
+                              MemberName 10(block) 25  "v3CoarseDerivativeX"
+                              MemberName 10(block) 26  "v3CoarseDerivativeY"
+                              MemberName 10(block) 27  "v3CoarseDerivativeWidth"
+                              MemberName 10(block) 28  "v3FineDerivativeX"
+                              MemberName 10(block) 29  "v3FineDerivativeY"
+                              MemberName 10(block) 30  "v3FineDerivativeWidth"
+                              MemberName 10(block) 31  "v3X"
+                              MemberName 10(block) 32  "v3Y"
+                              MemberName 10(block) 33  "v4DerivativeX"
+                              MemberName 10(block) 34  "v4DerivativeY"
+                              MemberName 10(block) 35  "v4DerivativeWidth"
+                              MemberName 10(block) 36  "v4CoarseDerivativeX"
+                              MemberName 10(block) 37  "v4CoarseDerivativeY"
+                              MemberName 10(block) 38  "v4CoarseDerivativeWidth"
+                              MemberName 10(block) 39  "v4FineDerivativeX"
+                              MemberName 10(block) 40  "v4FineDerivativeY"
+                              MemberName 10(block) 41  "v4FineDerivativeWidth"
+                              MemberName 10(block) 42  "v4X"
+                              MemberName 10(block) 43  "v4Y"
+                              Name 12  ""
+                              MemberDecorate 10(block) 0 Offset 0
+                              MemberDecorate 10(block) 1 Offset 4
+                              MemberDecorate 10(block) 2 Offset 8
+                              MemberDecorate 10(block) 3 Offset 12
+                              MemberDecorate 10(block) 4 Offset 16
+                              MemberDecorate 10(block) 5 Offset 20
+                              MemberDecorate 10(block) 6 Offset 24
+                              MemberDecorate 10(block) 7 Offset 28
+                              MemberDecorate 10(block) 8 Offset 32
+                              MemberDecorate 10(block) 9 Offset 36
+                              MemberDecorate 10(block) 10 Offset 40
+                              MemberDecorate 10(block) 11 Offset 48
+                              MemberDecorate 10(block) 12 Offset 56
+                              MemberDecorate 10(block) 13 Offset 64
+                              MemberDecorate 10(block) 14 Offset 72
+                              MemberDecorate 10(block) 15 Offset 80
+                              MemberDecorate 10(block) 16 Offset 88
+                              MemberDecorate 10(block) 17 Offset 96
+                              MemberDecorate 10(block) 18 Offset 104
+                              MemberDecorate 10(block) 19 Offset 112
+                              MemberDecorate 10(block) 20 Offset 120
+                              MemberDecorate 10(block) 21 Offset 128
+                              MemberDecorate 10(block) 22 Offset 144
+                              MemberDecorate 10(block) 23 Offset 160
+                              MemberDecorate 10(block) 24 Offset 176
+                              MemberDecorate 10(block) 25 Offset 192
+                              MemberDecorate 10(block) 26 Offset 208
+                              MemberDecorate 10(block) 27 Offset 224
+                              MemberDecorate 10(block) 28 Offset 240
+                              MemberDecorate 10(block) 29 Offset 256
+                              MemberDecorate 10(block) 30 Offset 272
+                              MemberDecorate 10(block) 31 Offset 288
+                              MemberDecorate 10(block) 32 Offset 304
+                              MemberDecorate 10(block) 33 Offset 320
+                              MemberDecorate 10(block) 34 Offset 336
+                              MemberDecorate 10(block) 35 Offset 352
+                              MemberDecorate 10(block) 36 Offset 368
+                              MemberDecorate 10(block) 37 Offset 384
+                              MemberDecorate 10(block) 38 Offset 400
+                              MemberDecorate 10(block) 39 Offset 416
+                              MemberDecorate 10(block) 40 Offset 432
+                              MemberDecorate 10(block) 41 Offset 448
+                              MemberDecorate 10(block) 42 Offset 464
+                              MemberDecorate 10(block) 43 Offset 480
+                              Decorate 10(block) BufferBlock
+                              Decorate 12 DescriptorSet 0
+                              Decorate 211 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypeVector 6(float) 3
+               9:             TypeVector 6(float) 4
+       10(block):             TypeStruct 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 7(fvec2) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 8(fvec3) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4) 9(fvec4)
+              11:             TypePointer Uniform 10(block)
+              12:     11(ptr) Variable Uniform
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:     13(int) Constant 9
+              16:             TypePointer Uniform 6(float)
+              21:     13(int) Constant 1
+              22:     13(int) Constant 10
+              27:     13(int) Constant 2
+              32:     13(int) Constant 3
+              37:     13(int) Constant 4
+              42:     13(int) Constant 5
+              47:     13(int) Constant 6
+              52:     13(int) Constant 7
+              57:     13(int) Constant 8
+              62:     13(int) Constant 11
+              63:     13(int) Constant 20
+              64:             TypePointer Uniform 7(fvec2)
+              69:     13(int) Constant 12
+              70:     13(int) Constant 21
+              75:     13(int) Constant 13
+              80:     13(int) Constant 14
+              85:     13(int) Constant 15
+              90:     13(int) Constant 16
+              95:     13(int) Constant 17
+             100:     13(int) Constant 18
+             105:     13(int) Constant 19
+             110:     13(int) Constant 22
+             111:     13(int) Constant 31
+             112:             TypePointer Uniform 8(fvec3)
+             117:     13(int) Constant 23
+             118:     13(int) Constant 32
+             123:     13(int) Constant 24
+             128:     13(int) Constant 25
+             133:     13(int) Constant 26
+             138:     13(int) Constant 27
+             143:     13(int) Constant 28
+             148:     13(int) Constant 29
+             153:     13(int) Constant 30
+             158:     13(int) Constant 33
+             159:     13(int) Constant 42
+             160:             TypePointer Uniform 9(fvec4)
+             165:     13(int) Constant 34
+             166:     13(int) Constant 43
+             171:     13(int) Constant 35
+             176:     13(int) Constant 36
+             181:     13(int) Constant 37
+             186:     13(int) Constant 38
+             191:     13(int) Constant 39
+             196:     13(int) Constant 40
+             201:     13(int) Constant 41
+             206:             TypeInt 32 0
+             207:             TypeVector 206(int) 3
+             208:    206(int) Constant 2
+             209:    206(int) Constant 4
+             210:    206(int) Constant 1
+             211:  207(ivec3) ConstantComposite 208 209 210
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 12 15
+              18:    6(float) Load 17
+              19:    6(float) DPdx 18
+              20:     16(ptr) AccessChain 12 14
+                              Store 20 19
+              23:     16(ptr) AccessChain 12 22
+              24:    6(float) Load 23
+              25:    6(float) DPdy 24
+              26:     16(ptr) AccessChain 12 21
+                              Store 26 25
+              28:     16(ptr) AccessChain 12 15
+              29:    6(float) Load 28
+              30:    6(float) Fwidth 29
+              31:     16(ptr) AccessChain 12 27
+                              Store 31 30
+              33:     16(ptr) AccessChain 12 15
+              34:    6(float) Load 33
+              35:    6(float) DPdxCoarse 34
+              36:     16(ptr) AccessChain 12 32
+                              Store 36 35
+              38:     16(ptr) AccessChain 12 22
+              39:    6(float) Load 38
+              40:    6(float) DPdyCoarse 39
+              41:     16(ptr) AccessChain 12 37
+                              Store 41 40
+              43:     16(ptr) AccessChain 12 15
+              44:    6(float) Load 43
+              45:    6(float) FwidthCoarse 44
+              46:     16(ptr) AccessChain 12 42
+                              Store 46 45
+              48:     16(ptr) AccessChain 12 15
+              49:    6(float) Load 48
+              50:    6(float) DPdxFine 49
+              51:     16(ptr) AccessChain 12 47
+                              Store 51 50
+              53:     16(ptr) AccessChain 12 22
+              54:    6(float) Load 53
+              55:    6(float) DPdyFine 54
+              56:     16(ptr) AccessChain 12 52
+                              Store 56 55
+              58:     16(ptr) AccessChain 12 15
+              59:    6(float) Load 58
+              60:    6(float) FwidthFine 59
+              61:     16(ptr) AccessChain 12 57
+                              Store 61 60
+              65:     64(ptr) AccessChain 12 63
+              66:    7(fvec2) Load 65
+              67:    7(fvec2) DPdx 66
+              68:     64(ptr) AccessChain 12 62
+                              Store 68 67
+              71:     64(ptr) AccessChain 12 70
+              72:    7(fvec2) Load 71
+              73:    7(fvec2) DPdy 72
+              74:     64(ptr) AccessChain 12 69
+                              Store 74 73
+              76:     64(ptr) AccessChain 12 63
+              77:    7(fvec2) Load 76
+              78:    7(fvec2) Fwidth 77
+              79:     64(ptr) AccessChain 12 75
+                              Store 79 78
+              81:     64(ptr) AccessChain 12 63
+              82:    7(fvec2) Load 81
+              83:    7(fvec2) DPdxCoarse 82
+              84:     64(ptr) AccessChain 12 80
+                              Store 84 83
+              86:     64(ptr) AccessChain 12 70
+              87:    7(fvec2) Load 86
+              88:    7(fvec2) DPdyCoarse 87
+              89:     64(ptr) AccessChain 12 85
+                              Store 89 88
+              91:     64(ptr) AccessChain 12 63
+              92:    7(fvec2) Load 91
+              93:    7(fvec2) FwidthCoarse 92
+              94:     64(ptr) AccessChain 12 90
+                              Store 94 93
+              96:     64(ptr) AccessChain 12 63
+              97:    7(fvec2) Load 96
+              98:    7(fvec2) DPdxFine 97
+              99:     64(ptr) AccessChain 12 95
+                              Store 99 98
+             101:     64(ptr) AccessChain 12 70
+             102:    7(fvec2) Load 101
+             103:    7(fvec2) DPdyFine 102
+             104:     64(ptr) AccessChain 12 100
+                              Store 104 103
+             106:     64(ptr) AccessChain 12 63
+             107:    7(fvec2) Load 106
+             108:    7(fvec2) FwidthFine 107
+             109:     64(ptr) AccessChain 12 105
+                              Store 109 108
+             113:    112(ptr) AccessChain 12 111
+             114:    8(fvec3) Load 113
+             115:    8(fvec3) DPdx 114
+             116:    112(ptr) AccessChain 12 110
+                              Store 116 115
+             119:    112(ptr) AccessChain 12 118
+             120:    8(fvec3) Load 119
+             121:    8(fvec3) DPdy 120
+             122:    112(ptr) AccessChain 12 117
+                              Store 122 121
+             124:    112(ptr) AccessChain 12 111
+             125:    8(fvec3) Load 124
+             126:    8(fvec3) Fwidth 125
+             127:    112(ptr) AccessChain 12 123
+                              Store 127 126
+             129:    112(ptr) AccessChain 12 111
+             130:    8(fvec3) Load 129
+             131:    8(fvec3) DPdxCoarse 130
+             132:    112(ptr) AccessChain 12 128
+                              Store 132 131
+             134:    112(ptr) AccessChain 12 118
+             135:    8(fvec3) Load 134
+             136:    8(fvec3) DPdyCoarse 135
+             137:    112(ptr) AccessChain 12 133
+                              Store 137 136
+             139:    112(ptr) AccessChain 12 111
+             140:    8(fvec3) Load 139
+             141:    8(fvec3) FwidthCoarse 140
+             142:    112(ptr) AccessChain 12 138
+                              Store 142 141
+             144:    112(ptr) AccessChain 12 111
+             145:    8(fvec3) Load 144
+             146:    8(fvec3) DPdxFine 145
+             147:    112(ptr) AccessChain 12 143
+                              Store 147 146
+             149:    112(ptr) AccessChain 12 118
+             150:    8(fvec3) Load 149
+             151:    8(fvec3) DPdyFine 150
+             152:    112(ptr) AccessChain 12 148
+                              Store 152 151
+             154:    112(ptr) AccessChain 12 111
+             155:    8(fvec3) Load 154
+             156:    8(fvec3) FwidthFine 155
+             157:    112(ptr) AccessChain 12 153
+                              Store 157 156
+             161:    160(ptr) AccessChain 12 159
+             162:    9(fvec4) Load 161
+             163:    9(fvec4) DPdx 162
+             164:    160(ptr) AccessChain 12 158
+                              Store 164 163
+             167:    160(ptr) AccessChain 12 166
+             168:    9(fvec4) Load 167
+             169:    9(fvec4) DPdy 168
+             170:    160(ptr) AccessChain 12 165
+                              Store 170 169
+             172:    160(ptr) AccessChain 12 159
+             173:    9(fvec4) Load 172
+             174:    9(fvec4) Fwidth 173
+             175:    160(ptr) AccessChain 12 171
+                              Store 175 174
+             177:    160(ptr) AccessChain 12 159
+             178:    9(fvec4) Load 177
+             179:    9(fvec4) DPdxCoarse 178
+             180:    160(ptr) AccessChain 12 176
+                              Store 180 179
+             182:    160(ptr) AccessChain 12 166
+             183:    9(fvec4) Load 182
+             184:    9(fvec4) DPdyCoarse 183
+             185:    160(ptr) AccessChain 12 181
+                              Store 185 184
+             187:    160(ptr) AccessChain 12 159
+             188:    9(fvec4) Load 187
+             189:    9(fvec4) FwidthCoarse 188
+             190:    160(ptr) AccessChain 12 186
+                              Store 190 189
+             192:    160(ptr) AccessChain 12 159
+             193:    9(fvec4) Load 192
+             194:    9(fvec4) DPdxFine 193
+             195:    160(ptr) AccessChain 12 191
+                              Store 195 194
+             197:    160(ptr) AccessChain 12 166
+             198:    9(fvec4) Load 197
+             199:    9(fvec4) DPdyFine 198
+             200:    160(ptr) AccessChain 12 196
+                              Store 200 199
+             202:    160(ptr) AccessChain 12 159
+             203:    9(fvec4) Load 202
+             204:    9(fvec4) FwidthFine 203
+             205:    160(ptr) AccessChain 12 201
+                              Store 205 204
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out
old mode 100755
new mode 100644
index eb25382..2f074de
--- a/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -7,6 +7,8 @@
 WARNING: 0:25: '' : attribute with arguments not recognized, skipping 
 WARNING: 0:26: '' : attribute with arguments not recognized, skipping 
 
+error: SPIRV-Tools Validation Errors
+error: Invalid loop control operand: 4 has invalid mask component 4
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 118
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index facaf9e..7ba0052 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -1,4 +1,6 @@
 spv.debugInfo.frag
+error: SPIRV-Tools Validation Errors
+error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (under OpenGL 4.5 semantics).
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 124
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
old mode 100755
new mode 100644
index 6f7f2b9..44f5ddd
--- a/Test/baseResults/spv.explicittypes.frag.out
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -1,4 +1,8 @@
 spv.explicittypes.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 576
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index b6d37f4..b9ca339 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,4 +1,8 @@
 spv.float16.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 534
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index 67ddd61..7632737 100644
--- a/Test/baseResults/spv.float16Fetch.frag.out
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -1,4 +1,8 @@
 spv.float16Fetch.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 5923
@@ -23,7 +27,6 @@
                               Capability StorageInputOutput16
                               Capability Float16ImageAMD
                               Capability ImageGatherBiasLodAMD
-                              Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_half_float_fetch"
                               Extension  "SPV_AMD_texture_gather_bias_lod"
                               Extension  "SPV_KHR_16bit_storage"
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
index 40c6677..9ee7d7f 100644
--- a/Test/baseResults/spv.float32.frag.out
+++ b/Test/baseResults/spv.float32.frag.out
@@ -1,4 +1,8 @@
 spv.float32.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 533
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index 4913954..3f095c1 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -1,4 +1,8 @@
 spv.float64.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 524
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
new file mode 100644
index 0000000..ffb3527
--- /dev/null
+++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
@@ -0,0 +1,69 @@
+spv.fragmentShaderBarycentric.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability FragmentBarycentricNV
+                              Extension  "SPV_NV_fragment_shader_barycentric"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 11 21
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_fragment_shader_barycentric"
+                              Name 4  "main"
+                              Name 8  "value"
+                              Name 11  "gl_BaryCoordNV"
+                              Name 17  "vertices"
+                              MemberName 17(vertices) 0  "attrib"
+                              Name 21  "v"
+                              Decorate 8(value) Location 1
+                              Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordNV
+                              Decorate 17(vertices) Block
+                              Decorate 21(v) Location 0
+                              Decorate 21(v) PerVertexNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+        8(value):      7(ptr) Variable Output
+               9:             TypeVector 6(float) 3
+              10:             TypePointer Input 9(fvec3)
+11(gl_BaryCoordNV):     10(ptr) Variable Input
+              12:             TypeInt 32 0
+              13:     12(int) Constant 0
+              14:             TypePointer Input 6(float)
+    17(vertices):             TypeStruct 6(float)
+              18:     12(int) Constant 3
+              19:             TypeArray 17(vertices) 18
+              20:             TypePointer Input 19
+           21(v):     20(ptr) Variable Input
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+              27:     12(int) Constant 1
+              30:     22(int) Constant 1
+              35:     12(int) Constant 2
+              38:     22(int) Constant 2
+         4(main):           2 Function None 3
+               5:             Label
+              15:     14(ptr) AccessChain 11(gl_BaryCoordNV) 13
+              16:    6(float) Load 15
+              24:     14(ptr) AccessChain 21(v) 23 23
+              25:    6(float) Load 24
+              26:    6(float) FMul 16 25
+              28:     14(ptr) AccessChain 11(gl_BaryCoordNV) 27
+              29:    6(float) Load 28
+              31:     14(ptr) AccessChain 21(v) 30 23
+              32:    6(float) Load 31
+              33:    6(float) FMul 29 32
+              34:    6(float) FAdd 26 33
+              36:     14(ptr) AccessChain 11(gl_BaryCoordNV) 35
+              37:    6(float) Load 36
+              39:     14(ptr) AccessChain 21(v) 38 23
+              40:    6(float) Load 39
+              41:    6(float) FMul 37 40
+              42:    6(float) FAdd 34 41
+                              Store 8(value) 42
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
new file mode 100644
index 0000000..05dce7a
--- /dev/null
+++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
@@ -0,0 +1,65 @@
+spv.fragmentShaderBarycentric2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 42
+
+                              Capability Shader
+                              Capability FragmentBarycentricNV
+                              Extension  "SPV_NV_fragment_shader_barycentric"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 11 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 320
+                              SourceExtension  "GL_NV_fragment_shader_barycentric"
+                              Name 4  "main"
+                              Name 8  "value"
+                              Name 11  "gl_BaryCoordNoPerspNV"
+                              Name 20  "vertexIDs"
+                              Decorate 8(value) Location 1
+                              Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspNV
+                              Decorate 20(vertexIDs) Location 0
+                              Decorate 20(vertexIDs) PerVertexNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+        8(value):      7(ptr) Variable Output
+               9:             TypeVector 6(float) 3
+              10:             TypePointer Input 9(fvec3)
+11(gl_BaryCoordNoPerspNV):     10(ptr) Variable Input
+              12:             TypeInt 32 0
+              13:     12(int) Constant 0
+              14:             TypePointer Input 6(float)
+              17:     12(int) Constant 3
+              18:             TypeArray 6(float) 17
+              19:             TypePointer Input 18
+   20(vertexIDs):     19(ptr) Variable Input
+              21:             TypeInt 32 1
+              22:     21(int) Constant 0
+              26:     12(int) Constant 1
+              29:     21(int) Constant 1
+              34:     12(int) Constant 2
+              37:     21(int) Constant 2
+         4(main):           2 Function None 3
+               5:             Label
+              15:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13
+              16:    6(float) Load 15
+              23:     14(ptr) AccessChain 20(vertexIDs) 22
+              24:    6(float) Load 23
+              25:    6(float) FMul 16 24
+              27:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 26
+              28:    6(float) Load 27
+              30:     14(ptr) AccessChain 20(vertexIDs) 29
+              31:    6(float) Load 30
+              32:    6(float) FMul 28 31
+              33:    6(float) FAdd 25 32
+              35:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 34
+              36:    6(float) Load 35
+              38:     14(ptr) AccessChain 20(vertexIDs) 37
+              39:    6(float) Load 38
+              40:    6(float) FMul 36 39
+              41:    6(float) FAdd 33 40
+                              Store 8(value) 41
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 2c35a0c..2f925b3 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,4 +1,8 @@
 spv.image.frag
+error: SPIRV-Tools Validation Errors
+error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability ImageRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 376
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 4c65a36..db9177d 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,4 +1,8 @@
 spv.imageLoadStoreLod.frag
+error: SPIRV-Tools Validation Errors
+error: Image Operand Lod can only be used with ExplicitLod opcodes and OpImageFetch
+  %19 = OpImageRead %v4float %15 %int_1 Lod %int_3
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 82
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
index c404375..526373b 100644
--- a/Test/baseResults/spv.int16.amd.frag.out
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -1,4 +1,8 @@
 spv.int16.amd.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 560
@@ -10,7 +14,6 @@
                               Capability Int16
                               Capability StorageUniform16
                               Capability StorageInputOutput16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 84128ab..3ba5c07 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,4 +1,8 @@
 spv.int16.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 523
@@ -10,8 +14,6 @@
                               Capability Int16
                               Capability Int8
                               Capability StorageUniform16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
index d72de0d..3b93428 100644
--- a/Test/baseResults/spv.int32.frag.out
+++ b/Test/baseResults/spv.int32.frag.out
@@ -1,4 +1,8 @@
 spv.int32.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 493
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index 14922b2..1c65384 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -1,4 +1,8 @@
 spv.int8.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 518
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index 02783b9..4113cc9 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,4 +1,8 @@
 spv.memoryQualifier.frag
+error: SPIRV-Tools Validation Errors
+error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability ImageRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 97
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
new file mode 100644
index 0000000..d4e6a4a
--- /dev/null
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -0,0 +1,239 @@
+spv.memoryScopeSemantics.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 142
+
+                              Capability Shader
+                              Capability Int64
+                              Capability Int64Atomics
+                              Capability CapabilityVulkanMemoryModelKHR
+                              Capability CapabilityVulkanMemoryModelDeviceScopeKHR
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 8  "origi"
+                              Name 10  "atomi"
+                              Name 21  "origu"
+                              Name 23  "atomu"
+                              Name 24  "value"
+                              Name 36  "imagei"
+                              Name 45  "imageu"
+                              Name 65  "BufferU"
+                              MemberName 65(BufferU) 0  "x"
+                              Name 67  "bufferu"
+                              Name 72  "y"
+                              Name 77  "BufferI"
+                              MemberName 77(BufferI) 0  "x"
+                              Name 79  "bufferi"
+                              Name 83  "A"
+                              MemberName 83(A) 0  "x"
+                              Name 84  "BufferJ"
+                              MemberName 84(BufferJ) 0  "a"
+                              Name 87  "bufferj"
+                              Name 98  "BufferK"
+                              MemberName 98(BufferK) 0  "x"
+                              Name 100  "bufferk"
+                              Name 109  "imagej"
+                              Name 121  "samp"
+                              Name 132  "atomu64"
+                              Name 137  "atomi64"
+                              Decorate 36(imagei) DescriptorSet 0
+                              Decorate 36(imagei) Binding 1
+                              Decorate 45(imageu) DescriptorSet 0
+                              Decorate 45(imageu) Binding 0
+                              MemberDecorate 65(BufferU) 0 Offset 0
+                              Decorate 65(BufferU) BufferBlock
+                              Decorate 67(bufferu) DescriptorSet 0
+                              Decorate 67(bufferu) Binding 2
+                              MemberDecorate 77(BufferI) 0 Offset 0
+                              Decorate 77(BufferI) BufferBlock
+                              Decorate 79(bufferi) DescriptorSet 0
+                              Decorate 79(bufferi) Binding 3
+                              Decorate 82 ArrayStride 4
+                              MemberDecorate 83(A) 0 Offset 0
+                              MemberDecorate 84(BufferJ) 0 Offset 0
+                              Decorate 84(BufferJ) BufferBlock
+                              Decorate 87(bufferj) DescriptorSet 0
+                              Decorate 87(bufferj) Binding 4
+                              MemberDecorate 98(BufferK) 0 Offset 0
+                              Decorate 98(BufferK) Block
+                              Decorate 100(bufferk) DescriptorSet 0
+                              Decorate 100(bufferk) Binding 7
+                              Decorate 109(imagej) DescriptorSet 0
+                              Decorate 109(imagej) Binding 5
+                              Decorate 121(samp) DescriptorSet 0
+                              Decorate 121(samp) Binding 6
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Workgroup 6(int)
+       10(atomi):      9(ptr) Variable Workgroup
+              11:      6(int) Constant 3
+              12:      6(int) Constant 1
+              13:      6(int) Constant 320
+              14:      6(int) Constant 4
+              15:             TypeInt 32 0
+              16:     15(int) Constant 5
+              17:     15(int) Constant 0
+              18:     15(int) Constant 324
+              20:             TypePointer Function 15(int)
+              22:             TypePointer Workgroup 15(int)
+       23(atomu):     22(ptr) Variable Workgroup
+       24(value):     22(ptr) Variable Workgroup
+              26:     15(int) Constant 2
+              28:      6(int) Constant 64
+              29:      6(int) Constant 2
+              30:     15(int) Constant 66
+              33:     15(int) Constant 68
+              34:             TypeImage 6(int) 2D nonsampled format:R32i
+              35:             TypePointer UniformConstant 34
+      36(imagei):     35(ptr) Variable UniformConstant
+              37:             TypeVector 6(int) 2
+              38:      6(int) Constant 0
+              39:   37(ivec2) ConstantComposite 38 38
+              40:             TypePointer Image 6(int)
+              43:             TypeImage 15(int) 2D nonsampled format:R32ui
+              44:             TypePointer UniformConstant 43
+      45(imageu):     44(ptr) Variable UniformConstant
+              46:     15(int) Constant 3
+              47:             TypePointer Image 15(int)
+              50:     15(int) Constant 4
+              52:     15(int) Constant 7
+              57:      6(int) Constant 7
+              61:     15(int) Constant 10
+              63:     15(int) Constant 322
+     65(BufferU):             TypeStruct 15(int)
+              66:             TypePointer Uniform 65(BufferU)
+     67(bufferu):     66(ptr) Variable Uniform
+              68:             TypePointer Uniform 15(int)
+              70:     15(int) Constant 1
+     77(BufferI):             TypeStruct 15(int)
+              78:             TypePointer Uniform 77(BufferI)
+     79(bufferi):     78(ptr) Variable Uniform
+              82:             TypeArray 15(int) 26
+           83(A):             TypeStruct 82
+     84(BufferJ):             TypeStruct 83(A)
+              85:             TypeArray 84(BufferJ) 26
+              86:             TypePointer Uniform 85
+     87(bufferj):     86(ptr) Variable Uniform
+              94:             TypePointer Uniform 83(A)
+     98(BufferK):             TypeStruct 15(int)
+              99:             TypePointer Uniform 98(BufferK)
+    100(bufferk):     99(ptr) Variable Uniform
+             105:             TypeVector 6(int) 4
+             107:             TypeArray 34 26
+             108:             TypePointer UniformConstant 107
+     109(imagej):    108(ptr) Variable UniformConstant
+             115:  105(ivec4) ConstantComposite 38 38 38 38
+             116:             TypeFloat 32
+             117:             TypeImage 116(float) 2D sampled format:Unknown
+             118:             TypeSampledImage 117
+             119:             TypeArray 118 26
+             120:             TypePointer UniformConstant 119
+       121(samp):    120(ptr) Variable UniformConstant
+             122:             TypePointer UniformConstant 118
+             125:             TypeVector 116(float) 2
+             126:  116(float) Constant 0
+             127:  125(fvec2) ConstantComposite 126 126
+             128:             TypeVector 116(float) 4
+             130:             TypeInt 64 0
+             131:             TypePointer Workgroup 130(int64_t)
+    132(atomu64):    131(ptr) Variable Workgroup
+             133:130(int64_t) Constant 7 0
+             135:             TypeInt 64 1
+             136:             TypePointer Workgroup 135(int64_t)
+    137(atomi64):    136(ptr) Variable Workgroup
+             138:135(int64_t) Constant 10 0
+         4(main):           2 Function None 3
+               5:             Label
+        8(origi):      7(ptr) Variable Function
+       21(origu):     20(ptr) Variable Function
+           72(y):     20(ptr) Variable Function
+              19:      6(int) AtomicIAdd 10(atomi) 12 18 11
+                              Store 8(origi) 19
+              25:     15(int) Load 24(value) MakePointerVisibleKHR 26
+              27:     15(int) AtomicAnd 23(atomu) 16 17 25
+                              Store 21(origu) 27
+              31:      6(int) AtomicLoad 10(atomi) 12 30
+                              Store 8(origi) 31
+              32:     15(int) Load 24(value) MakePointerVisibleKHR 26
+                              AtomicStore 23(atomu) 12 33 32
+              41:     40(ptr) ImageTexelPointer 36(imagei) 39 17
+              42:      6(int) AtomicLoad 41 12 30
+                              Store 8(origi) 42
+              48:     47(ptr) ImageTexelPointer 45(imageu) 39 17
+              49:     15(int) AtomicIAdd 48 12 30 46
+                              Store 21(origu) 49
+              51:     47(ptr) ImageTexelPointer 45(imageu) 39 17
+                              AtomicStore 51 12 33 50
+              53:     15(int) AtomicOr 23(atomu) 12 17 52
+                              Store 21(origu) 53
+              54:     15(int) AtomicXor 23(atomu) 12 17 52
+                              Store 21(origu) 54
+              55:     15(int) Load 24(value) MakePointerVisibleKHR 26
+              56:     15(int) AtomicUMin 23(atomu) 12 17 55
+                              Store 21(origu) 56
+              58:      6(int) AtomicSMax 10(atomi) 12 17 57
+                              Store 8(origi) 58
+              59:      6(int) Load 8(origi)
+              60:      6(int) AtomicExchange 10(atomi) 12 17 59
+                              Store 8(origi) 60
+              62:     15(int) Load 24(value) MakePointerVisibleKHR 26
+              64:     15(int) AtomicCompareExchange 23(atomu) 12 63 63 62 61
+                              Store 21(origu) 64
+              69:     68(ptr) AccessChain 67(bufferu) 38
+              71:     15(int) AtomicIAdd 69 12 18 70
+                              MemoryBarrier 26 18
+                              ControlBarrier 26 26 63
+                              ControlBarrier 26 26 17
+              73:     68(ptr) AccessChain 67(bufferu) 38
+              74:     15(int) Load 73 MakePointerVisibleKHR NonPrivatePointerKHR 26
+                              Store 72(y) 74
+              75:     15(int) Load 72(y)
+              76:     68(ptr) AccessChain 67(bufferu) 38
+                              Store 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 26
+              80:     68(ptr) AccessChain 79(bufferi) 38
+              81:     15(int) Load 80 MakePointerVisibleKHR NonPrivatePointerKHR 16
+                              Store 72(y) 81
+              88:     68(ptr) AccessChain 87(bufferj) 38 38 38 12
+              89:     15(int) Load 88 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
+                              Store 72(y) 89
+              90:     15(int) Load 72(y)
+              91:     68(ptr) AccessChain 79(bufferi) 38
+                              Store 91 90 MakePointerAvailableKHR NonPrivatePointerKHR 16
+              92:     15(int) Load 72(y)
+              93:     68(ptr) AccessChain 87(bufferj) 38 38 38 12
+                              Store 93 92 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
+              95:     94(ptr) AccessChain 87(bufferj) 12 38
+              96:       83(A) Load 95 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 46
+              97:     94(ptr) AccessChain 87(bufferj) 38 38
+                              Store 97 96 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 46
+             101:     68(ptr) AccessChain 100(bufferk) 38
+             102:     15(int) Load 101 NonPrivatePointerKHR 
+             103:     68(ptr) AccessChain 79(bufferi) 38
+                              Store 103 102 MakePointerAvailableKHR NonPrivatePointerKHR 16
+             104:          34 Load 36(imagei)
+             106:  105(ivec4) ImageRead 104 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16
+             110:     35(ptr) AccessChain 109(imagej) 38
+             111:          34 Load 110
+             112:  105(ivec4) ImageRead 111 39 NonPrivateTexelKHR 
+             113:     35(ptr) AccessChain 109(imagej) 12
+             114:          34 Load 113
+                              ImageWrite 114 39 115 NonPrivateTexelKHR 
+             123:    122(ptr) AccessChain 121(samp) 38
+             124:         118 Load 123
+             129:  128(fvec4) ImageSampleExplicitLod 124 127 Lod NonPrivateTexelKHR 126
+             134:130(int64_t) AtomicUMax 132(atomu64) 12 17 133
+                              Store 132(atomu64) 134 MakePointerAvailableKHR 26
+             139:130(int64_t) Load 132(atomu64) MakePointerVisibleKHR 26
+             140:135(int64_t) Bitcast 139
+             141:135(int64_t) AtomicCompareExchange 137(atomi64) 12 63 63 140 138
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
new file mode 100644
index 0000000..c4149d8
--- /dev/null
+++ b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out
@@ -0,0 +1,17 @@
+spv.memoryScopeSemantics_Error.comp
+ERROR: 0:15: 'atomicStore' : gl_SemanticsAcquire must not be used with (image) atomic store 
+ERROR: 0:16: 'imageAtomicLoad' : gl_SemanticsRelease must not be used with (image) atomic load 
+ERROR: 0:17: 'atomicStore' : gl_SemanticsAcquireRelease must not be used with (image) atomic load/store 
+ERROR: 0:18: 'atomicStore' : Invalid semantics value 
+ERROR: 0:19: 'imageAtomicLoad' : Invalid storage class semantics value 
+ERROR: 0:20: 'memoryBarrier' : Semantics must include exactly one of gl_SemanticsRelease, gl_SemanticsAcquire, or gl_SemanticsAcquireRelease 
+ERROR: 0:21: 'memoryBarrier' : Storage class semantics must not be zero 
+ERROR: 0:22: 'memoryBarrier' : Semantics must include exactly one of gl_SemanticsRelease, gl_SemanticsAcquire, or gl_SemanticsAcquireRelease 
+ERROR: 0:23: 'atomicAdd' : Semantics must not include multiple of gl_SemanticsRelease, gl_SemanticsAcquire, or gl_SemanticsAcquireRelease 
+ERROR: 0:24: 'atomicCompSwap' : semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease 
+ERROR: 0:25: 'memoryBarrier' : gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease 
+ERROR: 0:26: 'memoryBarrier' : gl_SemanticsMakeAvailable requires gl_SemanticsRelease or gl_SemanticsAcquireRelease 
+ERROR: 12 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
new file mode 100644
index 0000000..ef4ff4d
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -0,0 +1,259 @@
+spv.meshShaderBuiltins.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 147
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability MultiViewport
+                              Capability DrawParameters
+                              Capability ShaderViewportMaskNV
+                              Capability MeshShadingNV
+                              Extension  "SPV_KHR_shader_draw_parameters"
+                              Extension  "SPV_NV_mesh_shader"
+                              Extension  "SPV_NV_viewport_array2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 17 34 89 129 140 144
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 460
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 30  "gl_MeshPerVertexNV"
+                              MemberName 30(gl_MeshPerVertexNV) 0  "gl_Position"
+                              MemberName 30(gl_MeshPerVertexNV) 1  "gl_PointSize"
+                              MemberName 30(gl_MeshPerVertexNV) 2  "gl_ClipDistance"
+                              MemberName 30(gl_MeshPerVertexNV) 3  "gl_CullDistance"
+                              MemberName 30(gl_MeshPerVertexNV) 4  "gl_PositionPerViewNV"
+                              MemberName 30(gl_MeshPerVertexNV) 5  "gl_ClipDistancePerViewNV"
+                              MemberName 30(gl_MeshPerVertexNV) 6  "gl_CullDistancePerViewNV"
+                              Name 34  "gl_MeshVerticesNV"
+                              Name 85  "gl_MeshPerPrimitiveNV"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 0  "gl_PrimitiveID"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 1  "gl_Layer"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 2  "gl_ViewportIndex"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 3  "gl_ViewportMask"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 4  "gl_LayerPerViewNV"
+                              MemberName 85(gl_MeshPerPrimitiveNV) 5  "gl_ViewportMaskPerViewNV"
+                              Name 89  "gl_MeshPrimitivesNV"
+                              Name 129  "gl_PrimitiveIndicesNV"
+                              Name 140  "gl_DrawID"
+                              Name 144  "gl_PrimitiveCountNV"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 30(gl_MeshPerVertexNV) 0 BuiltIn Position
+                              MemberDecorate 30(gl_MeshPerVertexNV) 1 BuiltIn PointSize
+                              MemberDecorate 30(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance
+                              MemberDecorate 30(gl_MeshPerVertexNV) 3 BuiltIn CullDistance
+                              MemberDecorate 30(gl_MeshPerVertexNV) 4 PerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 5 PerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 6 PerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV
+                              Decorate 30(gl_MeshPerVertexNV) Block
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 4 PerViewNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 5 PerViewNV
+                              MemberDecorate 85(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
+                              Decorate 85(gl_MeshPerPrimitiveNV) Block
+                              Decorate 129(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
+                              Decorate 140(gl_DrawID) BuiltIn DrawIndex
+                              Decorate 144(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
+                              Decorate 146 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:             TypeFloat 32
+              21:             TypeVector 20(float) 4
+              22:      6(int) Constant 4
+              23:             TypeArray 20(float) 22
+              24:      6(int) Constant 3
+              25:             TypeArray 20(float) 24
+              26:             TypeArray 21(fvec4) 22
+              27:      6(int) Constant 8
+              28:             TypeArray 20(float) 27
+              29:             TypeArray 28 22
+30(gl_MeshPerVertexNV):             TypeStruct 21(fvec4) 20(float) 23 25 26 29 29
+              31:      6(int) Constant 81
+              32:             TypeArray 30(gl_MeshPerVertexNV) 31
+              33:             TypePointer Output 32
+34(gl_MeshVerticesNV):     33(ptr) Variable Output
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:   20(float) Constant 1065353216
+              39:   21(fvec4) ConstantComposite 38 38 38 38
+              40:             TypePointer Output 21(fvec4)
+              43:     36(int) Constant 1
+              44:   20(float) Constant 1073741824
+              45:             TypePointer Output 20(float)
+              48:     36(int) Constant 2
+              49:     36(int) Constant 3
+              50:   20(float) Constant 1077936128
+              53:   20(float) Constant 1082130432
+              55:      6(int) Constant 1
+              56:      6(int) Constant 264
+              57:      6(int) Constant 2
+              82:             TypeArray 36(int) 55
+              83:             TypeArray 36(int) 22
+              84:             TypeArray 82 22
+85(gl_MeshPerPrimitiveNV):             TypeStruct 36(int) 36(int) 36(int) 82 83 84
+              86:      6(int) Constant 32
+              87:             TypeArray 85(gl_MeshPerPrimitiveNV) 86
+              88:             TypePointer Output 87
+89(gl_MeshPrimitivesNV):     88(ptr) Variable Output
+              91:     36(int) Constant 6
+              92:             TypePointer Output 36(int)
+              95:     36(int) Constant 7
+              98:     36(int) Constant 8
+             101:     36(int) Constant 9
+             127:             TypeArray 6(int) 31
+             128:             TypePointer Output 127
+129(gl_PrimitiveIndicesNV):    128(ptr) Variable Output
+             130:      6(int) Constant 257
+             131:             TypePointer Output 6(int)
+             139:             TypePointer Input 36(int)
+  140(gl_DrawID):    139(ptr) Variable Input
+             143:      6(int) Constant 16909060
+144(gl_PrimitiveCountNV):    131(ptr) Variable Output
+             145:      6(int) Constant 96
+             146:    9(ivec3) ConstantComposite 86 55 55
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+              35:      6(int) Load 8(iid)
+              41:     40(ptr) AccessChain 34(gl_MeshVerticesNV) 35 37
+                              Store 41 39
+              42:      6(int) Load 8(iid)
+              46:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 42 43
+                              Store 46 44
+              47:      6(int) Load 8(iid)
+              51:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 47 48 49
+                              Store 51 50
+              52:      6(int) Load 8(iid)
+              54:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 52 49 48
+                              Store 54 53
+                              MemoryBarrier 55 56
+                              ControlBarrier 57 57 56
+              58:      6(int) Load 8(iid)
+              59:      6(int) IAdd 58 55
+              60:      6(int) Load 8(iid)
+              61:     40(ptr) AccessChain 34(gl_MeshVerticesNV) 60 37
+              62:   21(fvec4) Load 61
+              63:     40(ptr) AccessChain 34(gl_MeshVerticesNV) 59 37
+                              Store 63 62
+              64:      6(int) Load 8(iid)
+              65:      6(int) IAdd 64 55
+              66:      6(int) Load 8(iid)
+              67:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 66 43
+              68:   20(float) Load 67
+              69:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 65 43
+                              Store 69 68
+              70:      6(int) Load 8(iid)
+              71:      6(int) IAdd 70 55
+              72:      6(int) Load 8(iid)
+              73:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 72 48 49
+              74:   20(float) Load 73
+              75:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 71 48 49
+                              Store 75 74
+              76:      6(int) Load 8(iid)
+              77:      6(int) IAdd 76 55
+              78:      6(int) Load 8(iid)
+              79:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 78 49 48
+              80:   20(float) Load 79
+              81:     45(ptr) AccessChain 34(gl_MeshVerticesNV) 77 49 48
+                              Store 81 80
+                              MemoryBarrier 55 56
+                              ControlBarrier 57 57 56
+              90:      6(int) Load 8(iid)
+              93:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 90 37
+                              Store 93 91
+              94:      6(int) Load 8(iid)
+              96:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 94 43
+                              Store 96 95
+              97:      6(int) Load 8(iid)
+              99:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 97 48
+                              Store 99 98
+             100:      6(int) Load 8(iid)
+             102:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 100 49 37
+                              Store 102 101
+                              MemoryBarrier 55 56
+                              ControlBarrier 57 57 56
+             103:      6(int) Load 8(iid)
+             104:      6(int) IAdd 103 55
+             105:      6(int) Load 8(iid)
+             106:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 105 37
+             107:     36(int) Load 106
+             108:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 104 37
+                              Store 108 107
+             109:      6(int) Load 8(iid)
+             110:      6(int) IAdd 109 55
+             111:      6(int) Load 8(iid)
+             112:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 111 43
+             113:     36(int) Load 112
+             114:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 110 43
+                              Store 114 113
+             115:      6(int) Load 8(iid)
+             116:      6(int) IAdd 115 55
+             117:      6(int) Load 8(iid)
+             118:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 117 48
+             119:     36(int) Load 118
+             120:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 116 48
+                              Store 120 119
+             121:      6(int) Load 8(iid)
+             122:      6(int) IAdd 121 55
+             123:      6(int) Load 8(iid)
+             124:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 123 49 37
+             125:     36(int) Load 124
+             126:     92(ptr) AccessChain 89(gl_MeshPrimitivesNV) 122 49 37
+                              Store 126 125
+                              MemoryBarrier 55 56
+                              ControlBarrier 57 57 56
+             132:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 37
+                              Store 132 130
+             133:      6(int) Load 16(gid)
+             134:      6(int) Load 16(gid)
+             135:      6(int) ISub 134 55
+             136:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 135
+             137:      6(int) Load 136
+             138:    131(ptr) AccessChain 129(gl_PrimitiveIndicesNV) 133
+                              Store 138 137
+             141:     36(int) Load 140(gl_DrawID)
+             142:      6(int) Bitcast 141
+             143:         142 WritePackedPrimitiveIndices4x8NV
+                              Store 144(gl_PrimitiveCountNV) 145
+                              MemoryBarrier 55 56
+                              ControlBarrier 57 57 56
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
new file mode 100644
index 0000000..c79a5c3
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -0,0 +1,212 @@
+spv.meshShaderPerViewBuiltins.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 124
+
+                              Capability MultiViewport
+                              Capability PerViewAttributesNV
+                              Capability MeshShadingNV
+                              Extension  "SPV_NVX_multiview_per_view_attributes"
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 20 21 38 70
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "viewID"
+                              Name 20  "gl_MeshViewIndicesNV"
+                              Name 21  "gl_MeshViewCountNV"
+                              Name 34  "gl_MeshPerVertexNV"
+                              MemberName 34(gl_MeshPerVertexNV) 0  "gl_Position"
+                              MemberName 34(gl_MeshPerVertexNV) 1  "gl_PointSize"
+                              MemberName 34(gl_MeshPerVertexNV) 2  "gl_ClipDistance"
+                              MemberName 34(gl_MeshPerVertexNV) 3  "gl_CullDistance"
+                              MemberName 34(gl_MeshPerVertexNV) 4  "gl_PositionPerViewNV"
+                              MemberName 34(gl_MeshPerVertexNV) 5  "gl_ClipDistancePerViewNV"
+                              MemberName 34(gl_MeshPerVertexNV) 6  "gl_CullDistancePerViewNV"
+                              Name 38  "gl_MeshVerticesNV"
+                              Name 66  "gl_MeshPerPrimitiveNV"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 0  "gl_PrimitiveID"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 1  "gl_Layer"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 2  "gl_ViewportIndex"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 3  "gl_ViewportMask"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 4  "gl_LayerPerViewNV"
+                              MemberName 66(gl_MeshPerPrimitiveNV) 5  "gl_ViewportMaskPerViewNV"
+                              Name 70  "gl_MeshPrimitivesNV"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
+                              Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 0 BuiltIn Position
+                              MemberDecorate 34(gl_MeshPerVertexNV) 1 BuiltIn PointSize
+                              MemberDecorate 34(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance
+                              MemberDecorate 34(gl_MeshPerVertexNV) 3 BuiltIn CullDistance
+                              MemberDecorate 34(gl_MeshPerVertexNV) 4 PerViewNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 5 PerViewNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 6 PerViewNV
+                              MemberDecorate 34(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV
+                              Decorate 34(gl_MeshPerVertexNV) Block
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 4 PerViewNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 5 PerViewNV
+                              MemberDecorate 66(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
+                              Decorate 66(gl_MeshPerPrimitiveNV) Block
+                              Decorate 123 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 4
+              18:             TypeArray 6(int) 17
+              19:             TypePointer Input 18
+20(gl_MeshViewIndicesNV):     19(ptr) Variable Input
+21(gl_MeshViewCountNV):     13(ptr) Variable Input
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 4
+              28:      6(int) Constant 1
+              29:             TypeArray 26(float) 28
+              30:             TypeArray 27(fvec4) 17
+              31:      6(int) Constant 8
+              32:             TypeArray 26(float) 31
+              33:             TypeArray 32 17
+34(gl_MeshPerVertexNV):             TypeStruct 27(fvec4) 26(float) 29 29 30 33 33
+              35:      6(int) Constant 81
+              36:             TypeArray 34(gl_MeshPerVertexNV) 35
+              37:             TypePointer Output 36
+38(gl_MeshVerticesNV):     37(ptr) Variable Output
+              40:             TypeInt 32 1
+              41:     40(int) Constant 4
+              43:   26(float) Constant 1065353216
+              44:   26(float) Constant 1073741824
+              45:   26(float) Constant 1077936128
+              46:   26(float) Constant 1082130432
+              47:   27(fvec4) ConstantComposite 43 44 45 46
+              48:             TypePointer Output 27(fvec4)
+              51:     40(int) Constant 5
+              53:     40(int) Constant 2
+              54:   26(float) Constant 1084227584
+              55:             TypePointer Output 26(float)
+              58:     40(int) Constant 6
+              60:     40(int) Constant 3
+              61:   26(float) Constant 1086324736
+              63:             TypeArray 40(int) 28
+              64:             TypeArray 40(int) 17
+              65:             TypeArray 63 17
+66(gl_MeshPerPrimitiveNV):             TypeStruct 40(int) 40(int) 40(int) 63 64 65
+              67:      6(int) Constant 32
+              68:             TypeArray 66(gl_MeshPerPrimitiveNV) 67
+              69:             TypePointer Output 68
+70(gl_MeshPrimitivesNV):     69(ptr) Variable Output
+              73:     40(int) Constant 7
+              74:             TypePointer Output 40(int)
+              78:     40(int) Constant 0
+              79:     40(int) Constant 8
+              81:      6(int) Constant 264
+              82:      6(int) Constant 2
+             123:    9(ivec3) ConstantComposite 67 28 28
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+      16(viewID):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              22:      6(int) Load 21(gl_MeshViewCountNV)
+              23:      6(int) UMod 22 17
+              24:     13(ptr) AccessChain 20(gl_MeshViewIndicesNV) 23
+              25:      6(int) Load 24
+                              Store 16(viewID) 25
+              39:      6(int) Load 8(iid)
+              42:      6(int) Load 16(viewID)
+              49:     48(ptr) AccessChain 38(gl_MeshVerticesNV) 39 41 42
+                              Store 49 47
+              50:      6(int) Load 8(iid)
+              52:      6(int) Load 16(viewID)
+              56:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 50 51 52 53
+                              Store 56 54
+              57:      6(int) Load 8(iid)
+              59:      6(int) Load 16(viewID)
+              62:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 57 58 59 60
+                              Store 62 61
+              71:      6(int) Load 8(iid)
+              72:      6(int) Load 16(viewID)
+              75:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 71 41 72
+                              Store 75 73
+              76:      6(int) Load 8(iid)
+              77:      6(int) Load 16(viewID)
+              80:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 76 51 77 78
+                              Store 80 79
+                              MemoryBarrier 28 81
+                              ControlBarrier 82 82 81
+              83:      6(int) Load 8(iid)
+              84:      6(int) IAdd 83 28
+              85:      6(int) Load 16(viewID)
+              86:      6(int) Load 8(iid)
+              87:      6(int) Load 16(viewID)
+              88:     48(ptr) AccessChain 38(gl_MeshVerticesNV) 86 41 87
+              89:   27(fvec4) Load 88
+              90:     48(ptr) AccessChain 38(gl_MeshVerticesNV) 84 41 85
+                              Store 90 89
+              91:      6(int) Load 8(iid)
+              92:      6(int) IAdd 91 28
+              93:      6(int) Load 16(viewID)
+              94:      6(int) Load 8(iid)
+              95:      6(int) Load 16(viewID)
+              96:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 94 51 95 53
+              97:   26(float) Load 96
+              98:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 92 51 93 53
+                              Store 98 97
+              99:      6(int) Load 8(iid)
+             100:      6(int) IAdd 99 28
+             101:      6(int) Load 16(viewID)
+             102:      6(int) Load 8(iid)
+             103:      6(int) Load 16(viewID)
+             104:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 102 58 103 60
+             105:   26(float) Load 104
+             106:     55(ptr) AccessChain 38(gl_MeshVerticesNV) 100 58 101 60
+                              Store 106 105
+             107:      6(int) Load 8(iid)
+             108:      6(int) IAdd 107 28
+             109:      6(int) Load 16(viewID)
+             110:      6(int) Load 8(iid)
+             111:      6(int) Load 16(viewID)
+             112:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 110 41 111
+             113:     40(int) Load 112
+             114:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 108 41 109
+                              Store 114 113
+             115:      6(int) Load 8(iid)
+             116:      6(int) IAdd 115 28
+             117:      6(int) Load 16(viewID)
+             118:      6(int) Load 8(iid)
+             119:      6(int) Load 16(viewID)
+             120:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 118 51 119 78
+             121:     40(int) Load 120
+             122:     74(ptr) AccessChain 70(gl_MeshPrimitivesNV) 116 51 117 78
+                              Store 122 121
+                              MemoryBarrier 28 81
+                              ControlBarrier 82 82 81
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
new file mode 100644
index 0000000..7e7a37d
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -0,0 +1,156 @@
+spv.meshShaderPerViewUserDefined.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 90
+
+                              Capability MeshShadingNV
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 20 21 35 67
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "viewID"
+                              Name 20  "gl_MeshViewIndicesNV"
+                              Name 21  "gl_MeshViewCountNV"
+                              Name 31  "block"
+                              MemberName 31(block) 0  "color1"
+                              MemberName 31(block) 1  "color2"
+                              MemberName 31(block) 2  "color3"
+                              MemberName 31(block) 3  "color4"
+                              Name 35  "b"
+                              Name 64  "perviewBlock"
+                              MemberName 64(perviewBlock) 0  "color5"
+                              MemberName 64(perviewBlock) 1  "color6"
+                              MemberName 64(perviewBlock) 2  "color7"
+                              MemberName 64(perviewBlock) 3  "color8"
+                              Name 67  "b2"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
+                              Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+                              MemberDecorate 31(block) 0 PerPrimitiveNV
+                              MemberDecorate 31(block) 0 PerViewNV
+                              MemberDecorate 31(block) 1 PerPrimitiveNV
+                              MemberDecorate 31(block) 2 PerViewNV
+                              Decorate 31(block) Block
+                              Decorate 35(b) Location 0
+                              MemberDecorate 64(perviewBlock) 0 PerPrimitiveNV
+                              MemberDecorate 64(perviewBlock) 0 PerViewNV
+                              MemberDecorate 64(perviewBlock) 1 PerPrimitiveNV
+                              MemberDecorate 64(perviewBlock) 1 PerViewNV
+                              MemberDecorate 64(perviewBlock) 2 PerViewNV
+                              MemberDecorate 64(perviewBlock) 3 PerViewNV
+                              Decorate 64(perviewBlock) Block
+                              Decorate 67(b2) Location 10
+                              Decorate 89 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 4
+              18:             TypeArray 6(int) 17
+              19:             TypePointer Input 18
+20(gl_MeshViewIndicesNV):     19(ptr) Variable Input
+21(gl_MeshViewCountNV):     13(ptr) Variable Input
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 4
+              28:      6(int) Constant 3
+              29:             TypeArray 27(fvec4) 28
+              30:             TypeArray 29 17
+       31(block):             TypeStruct 30 29 30 27(fvec4)
+              32:      6(int) Constant 81
+              33:             TypeArray 31(block) 32
+              34:             TypePointer Output 33
+           35(b):     34(ptr) Variable Output
+              37:             TypeInt 32 1
+              38:     37(int) Constant 0
+              40:     37(int) Constant 2
+              41:   26(float) Constant 1065353216
+              42:   27(fvec4) ConstantComposite 41 41 41 41
+              43:             TypePointer Output 27(fvec4)
+              46:     37(int) Constant 1
+              47:   26(float) Constant 1073741824
+              48:   27(fvec4) ConstantComposite 47 47 47 47
+              52:   26(float) Constant 1077936128
+              53:   27(fvec4) ConstantComposite 52 52 52 52
+              56:     37(int) Constant 3
+              57:   26(float) Constant 1082130432
+              58:   27(fvec4) ConstantComposite 57 57 57 57
+              60:      6(int) Constant 1
+              61:      6(int) Constant 264
+              62:      6(int) Constant 2
+              63:             TypeArray 27(fvec4) 17
+64(perviewBlock):             TypeStruct 63 30 30 63
+              65:             TypeArray 64(perviewBlock) 32
+              66:             TypePointer Output 65
+          67(b2):     66(ptr) Variable Output
+              70:   26(float) Constant 1084227584
+              71:   27(fvec4) ConstantComposite 70 70 70 70
+              75:   26(float) Constant 1086324736
+              76:   27(fvec4) ConstantComposite 75 75 75 75
+              80:   26(float) Constant 1088421888
+              81:   27(fvec4) ConstantComposite 80 80 80 80
+              85:   26(float) Constant 1090519040
+              86:   27(fvec4) ConstantComposite 85 85 85 85
+              88:      6(int) Constant 32
+              89:    9(ivec3) ConstantComposite 88 60 60
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+      16(viewID):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              22:      6(int) Load 21(gl_MeshViewCountNV)
+              23:      6(int) UMod 22 17
+              24:     13(ptr) AccessChain 20(gl_MeshViewIndicesNV) 23
+              25:      6(int) Load 24
+                              Store 16(viewID) 25
+              36:      6(int) Load 8(iid)
+              39:      6(int) Load 16(viewID)
+              44:     43(ptr) AccessChain 35(b) 36 38 39 40
+                              Store 44 42
+              45:      6(int) Load 8(iid)
+              49:     43(ptr) AccessChain 35(b) 45 46 46
+                              Store 49 48
+              50:      6(int) Load 8(iid)
+              51:      6(int) Load 16(viewID)
+              54:     43(ptr) AccessChain 35(b) 50 40 51 40
+                              Store 54 53
+              55:      6(int) Load 8(iid)
+              59:     43(ptr) AccessChain 35(b) 55 56
+                              Store 59 58
+                              MemoryBarrier 60 61
+                              ControlBarrier 62 62 61
+              68:      6(int) Load 8(iid)
+              69:      6(int) Load 16(viewID)
+              72:     43(ptr) AccessChain 67(b2) 68 38 69
+                              Store 72 71
+              73:      6(int) Load 8(iid)
+              74:      6(int) Load 16(viewID)
+              77:     43(ptr) AccessChain 67(b2) 73 46 74 46
+                              Store 77 76
+              78:      6(int) Load 8(iid)
+              79:      6(int) Load 16(viewID)
+              82:     43(ptr) AccessChain 67(b2) 78 40 79 40
+                              Store 82 81
+              83:      6(int) Load 8(iid)
+              84:      6(int) Load 16(viewID)
+              87:     43(ptr) AccessChain 67(b2) 83 56 84
+                              Store 87 86
+                              MemoryBarrier 60 61
+                              ControlBarrier 62 62 61
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
new file mode 100644
index 0000000..198f812
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -0,0 +1,128 @@
+spv.meshShaderSharedMem.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 77
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability MeshShadingNV
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 17
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 20  "i"
+                              Name 34  "mem"
+                              Name 37  "block0"
+                              MemberName 37(block0) 0  "uni_value"
+                              Name 39  ""
+                              Name 55  "uni_image"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 37(block0) 0 Offset 0
+                              Decorate 37(block0) Block
+                              Decorate 39 DescriptorSet 0
+                              Decorate 55(uni_image) DescriptorSet 0
+                              Decorate 55(uni_image) NonReadable
+                              Decorate 76 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              27:      6(int) Constant 10
+              28:             TypeBool
+              30:             TypeFloat 32
+              31:             TypeVector 30(float) 4
+              32:             TypeArray 31(fvec4) 27
+              33:             TypePointer Workgroup 32
+         34(mem):     33(ptr) Variable Workgroup
+      37(block0):             TypeStruct 6(int)
+              38:             TypePointer Uniform 37(block0)
+              39:     38(ptr) Variable Uniform
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              42:             TypePointer Uniform 6(int)
+              48:             TypePointer Workgroup 31(fvec4)
+              51:     40(int) Constant 1
+              53:             TypeImage 30(float) 2D nonsampled format:Unknown
+              54:             TypePointer UniformConstant 53
+   55(uni_image):     54(ptr) Variable UniformConstant
+              59:             TypeVector 40(int) 2
+              69:      6(int) Constant 1
+              73:      6(int) Constant 264
+              74:      6(int) Constant 2
+              75:      6(int) Constant 32
+              76:    9(ivec3) ConstantComposite 75 69 69
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+           20(i):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              Store 20(i) 12
+                              Branch 21
+              21:             Label
+                              LoopMerge 23 24 None
+                              Branch 25
+              25:             Label
+              26:      6(int) Load 20(i)
+              29:    28(bool) ULessThan 26 27
+                              BranchConditional 29 22 23
+              22:               Label
+              35:      6(int)   Load 20(i)
+              36:      6(int)   Load 20(i)
+              43:     42(ptr)   AccessChain 39 41
+              44:      6(int)   Load 43
+              45:      6(int)   IAdd 36 44
+              46:   30(float)   ConvertUToF 45
+              47:   31(fvec4)   CompositeConstruct 46 46 46 46
+              49:     48(ptr)   AccessChain 34(mem) 35
+                                Store 49 47
+                                Branch 24
+              24:               Label
+              50:      6(int)   Load 20(i)
+              52:      6(int)   IAdd 50 51
+                                Store 20(i) 52
+                                Branch 21
+              23:             Label
+              56:          53 Load 55(uni_image)
+              57:      6(int) Load 8(iid)
+              58:     40(int) Bitcast 57
+              60:   59(ivec2) CompositeConstruct 58 58
+              61:      6(int) Load 16(gid)
+              62:     48(ptr) AccessChain 34(mem) 61
+              63:   31(fvec4) Load 62
+                              ImageWrite 56 60 63
+              64:          53 Load 55(uni_image)
+              65:      6(int) Load 8(iid)
+              66:     40(int) Bitcast 65
+              67:   59(ivec2) CompositeConstruct 66 66
+              68:      6(int) Load 16(gid)
+              70:      6(int) IAdd 68 69
+              71:     48(ptr) AccessChain 34(mem) 70
+              72:   31(fvec4) Load 71
+                              ImageWrite 64 67 72
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
new file mode 100644
index 0000000..93b2a45
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -0,0 +1,107 @@
+spv.meshShaderTaskMem.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 58
+
+                              Capability MeshShadingNV
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 22 30
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 18  "outBlock"
+                              MemberName 18(outBlock) 0  "gid5"
+                              MemberName 18(outBlock) 1  "gid6"
+                              Name 22  "myblk"
+                              Name 28  "taskBlock"
+                              MemberName 28(taskBlock) 0  "gid1"
+                              MemberName 28(taskBlock) 1  "gid2"
+                              Name 30  "mytask"
+                              Name 36  "bufferBlock"
+                              MemberName 36(bufferBlock) 0  "gid3"
+                              MemberName 36(bufferBlock) 1  "gid4"
+                              Name 38  "mybuf"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 18(outBlock) Block
+                              Decorate 22(myblk) Location 0
+                              Decorate 27 ArrayStride 4
+                              MemberDecorate 28(taskBlock) 0 PerTaskNV
+                              MemberDecorate 28(taskBlock) 0 Offset 0
+                              MemberDecorate 28(taskBlock) 1 PerTaskNV
+                              MemberDecorate 28(taskBlock) 1 Offset 16
+                              Decorate 28(taskBlock) Block
+                              Decorate 35 ArrayStride 4
+                              MemberDecorate 36(bufferBlock) 0 Offset 0
+                              MemberDecorate 36(bufferBlock) 1 Offset 16
+                              Decorate 36(bufferBlock) BufferBlock
+                              Decorate 38(mybuf) DescriptorSet 0
+                              Decorate 57 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+    18(outBlock):             TypeStruct 16(float) 17(fvec4)
+              19:      6(int) Constant 81
+              20:             TypeArray 18(outBlock) 19
+              21:             TypePointer Output 20
+       22(myblk):     21(ptr) Variable Output
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              26:      6(int) Constant 2
+              27:             TypeArray 16(float) 26
+   28(taskBlock):             TypeStruct 27 17(fvec4)
+              29:             TypePointer Input 28(taskBlock)
+      30(mytask):     29(ptr) Variable Input
+              31:     24(int) Constant 1
+              32:             TypePointer Input 16(float)
+              35:             TypeArray 16(float) 26
+ 36(bufferBlock):             TypeStruct 35 17(fvec4)
+              37:             TypePointer Uniform 36(bufferBlock)
+       38(mybuf):     37(ptr) Variable Uniform
+              39:             TypePointer Uniform 16(float)
+              43:             TypePointer Output 16(float)
+              46:             TypePointer Input 17(fvec4)
+              49:             TypePointer Uniform 17(fvec4)
+              53:             TypePointer Output 17(fvec4)
+              55:      6(int) Constant 32
+              56:      6(int) Constant 1
+              57:    9(ivec3) ConstantComposite 55 56 56
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              23:      6(int) Load 8(iid)
+              33:     32(ptr) AccessChain 30(mytask) 25 31
+              34:   16(float) Load 33
+              40:     39(ptr) AccessChain 38(mybuf) 25 31
+              41:   16(float) Load 40
+              42:   16(float) FAdd 34 41
+              44:     43(ptr) AccessChain 22(myblk) 23 25
+                              Store 44 42
+              45:      6(int) Load 8(iid)
+              47:     46(ptr) AccessChain 30(mytask) 31
+              48:   17(fvec4) Load 47
+              50:     49(ptr) AccessChain 38(mybuf) 31
+              51:   17(fvec4) Load 50
+              52:   17(fvec4) FAdd 48 51
+              54:     53(ptr) AccessChain 22(myblk) 45 31
+                              Store 54 52
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
new file mode 100644
index 0000000..c3ec915
--- /dev/null
+++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
@@ -0,0 +1,203 @@
+spv.meshShaderUserDefined.mesh
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 138
+
+                              Capability MeshShadingNV
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshNV 4  "main" 11 17 34 101
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 30  "myblock"
+                              MemberName 30(myblock) 0  "f"
+                              MemberName 30(myblock) 1  "fArr"
+                              MemberName 30(myblock) 2  "pos"
+                              MemberName 30(myblock) 3  "posArr"
+                              MemberName 30(myblock) 4  "m"
+                              MemberName 30(myblock) 5  "mArr"
+                              Name 34  "blk"
+                              Name 97  "myblock2"
+                              MemberName 97(myblock2) 0  "f"
+                              MemberName 97(myblock2) 1  "pos"
+                              MemberName 97(myblock2) 2  "m"
+                              Name 101  "blk2"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 30(myblock) 0 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 1 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 2 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 3 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 4 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 5 PerPrimitiveNV
+                              Decorate 30(myblock) Block
+                              Decorate 34(blk) Location 0
+                              Decorate 97(myblock2) Block
+                              Decorate 101(blk2) Location 20
+                              Decorate 137 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:             TypeFloat 32
+              21:      6(int) Constant 4
+              22:             TypeArray 20(float) 21
+              23:             TypeVector 20(float) 3
+              24:             TypeVector 20(float) 4
+              25:             TypeArray 24(fvec4) 21
+              26:             TypeMatrix 24(fvec4) 4
+              27:             TypeMatrix 23(fvec3) 3
+              28:      6(int) Constant 2
+              29:             TypeArray 27 28
+     30(myblock):             TypeStruct 20(float) 22 23(fvec3) 25 26 29
+              31:      6(int) Constant 32
+              32:             TypeArray 30(myblock) 31
+              33:             TypePointer Output 32
+         34(blk):     33(ptr) Variable Output
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:   20(float) Constant 1093664768
+              39:             TypePointer Output 20(float)
+              42:      6(int) Constant 1
+              44:     36(int) Constant 1
+              52:     36(int) Constant 2
+              53:   20(float) Constant 1096810496
+              54:   20(float) Constant 1097859072
+              55:   20(float) Constant 1095761920
+              56:   23(fvec3) ConstantComposite 53 54 55
+              57:             TypePointer Output 23(fvec3)
+              63:     36(int) Constant 3
+              68:             TypePointer Output 24(fvec4)
+              74:     36(int) Constant 4
+              75:   20(float) Constant 1098907648
+              76:   24(fvec4) ConstantComposite 55 53 54 75
+              81:     36(int) Constant 5
+              84:      6(int) Constant 3
+              91:   20(float) Constant 1099431936
+              92:   20(float) Constant 1099956224
+              93:   20(float) Constant 1100480512
+              94:   23(fvec3) ConstantComposite 91 92 93
+              96:      6(int) Constant 264
+    97(myblock2):             TypeStruct 20(float) 24(fvec4) 26
+              98:      6(int) Constant 81
+              99:             TypeArray 97(myblock2) 98
+             100:             TypePointer Output 99
+       101(blk2):    100(ptr) Variable Output
+             107:   20(float) Constant 1101004800
+             111:   20(float) Constant 1101529088
+             112:   20(float) Constant 1102053376
+             113:   20(float) Constant 1102577664
+             114:   20(float) Constant 1103101952
+             115:   24(fvec4) ConstantComposite 111 112 113 114
+             127:   20(float) Constant 1105723392
+             137:    9(ivec3) ConstantComposite 31 42 42
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+              35:      6(int) Load 8(iid)
+              40:     39(ptr) AccessChain 34(blk) 35 37
+                              Store 40 38
+              41:      6(int) Load 8(iid)
+              43:      6(int) IAdd 41 42
+              45:      6(int) Load 16(gid)
+              46:      6(int) Load 8(iid)
+              47:     39(ptr) AccessChain 34(blk) 46 37
+              48:   20(float) Load 47
+              49:     39(ptr) AccessChain 34(blk) 43 44 45
+                              Store 49 48
+              50:      6(int) Load 8(iid)
+              51:      6(int) UDiv 50 28
+              58:     57(ptr) AccessChain 34(blk) 51 52
+              59:   23(fvec3) Load 58
+              60:   23(fvec3) VectorShuffle 59 56 5 3 4
+                              Store 58 60
+              61:      6(int) Load 8(iid)
+              62:      6(int) IMul 61 28
+              64:      6(int) Load 8(iid)
+              65:      6(int) UDiv 64 28
+              66:     57(ptr) AccessChain 34(blk) 65 52
+              67:   23(fvec3) Load 66
+              69:     68(ptr) AccessChain 34(blk) 62 63 44
+              70:   24(fvec4) Load 69
+              71:   24(fvec4) VectorShuffle 70 67 0 4 5 6
+                              Store 69 71
+              72:      6(int) Load 8(iid)
+              73:      6(int) UDiv 72 21
+              77:     68(ptr) AccessChain 34(blk) 73 74 52
+              78:   24(fvec4) Load 77
+              79:   24(fvec4) VectorShuffle 78 76 7 6 5 4
+                              Store 77 79
+              80:      6(int) Load 8(iid)
+              82:      6(int) Load 8(iid)
+              83:      6(int) UDiv 82 21
+              85:     39(ptr) AccessChain 34(blk) 83 74 52 84
+              86:   20(float) Load 85
+              87:     39(ptr) AccessChain 34(blk) 80 81 37 44 42
+                              Store 87 86
+              88:      6(int) Load 8(iid)
+              89:      6(int) IMul 88 21
+              90:      6(int) Load 16(gid)
+              95:     57(ptr) AccessChain 34(blk) 89 81 44 90
+                              Store 95 94
+                              MemoryBarrier 42 96
+                              ControlBarrier 28 28 96
+             102:      6(int) Load 8(iid)
+             103:      6(int) Load 8(iid)
+             104:      6(int) ISub 103 42
+             105:     39(ptr) AccessChain 101(blk2) 104 37
+             106:   20(float) Load 105
+             108:   20(float) FAdd 106 107
+             109:     39(ptr) AccessChain 101(blk2) 102 37
+                              Store 109 108
+             110:      6(int) Load 8(iid)
+             116:     68(ptr) AccessChain 101(blk2) 110 44
+                              Store 116 115
+             117:      6(int) Load 8(iid)
+             118:      6(int) IAdd 117 42
+             119:      6(int) Load 16(gid)
+             120:      6(int) Load 8(iid)
+             121:     68(ptr) AccessChain 101(blk2) 120 44
+             122:   24(fvec4) Load 121
+             123:     68(ptr) AccessChain 101(blk2) 118 52 119
+                              Store 123 122
+             124:      6(int) Load 8(iid)
+             125:      6(int) IAdd 124 42
+             126:      6(int) Load 16(gid)
+             128:     39(ptr) AccessChain 101(blk2) 125 52 126 28
+                              Store 128 127
+             129:      6(int) Load 8(iid)
+             130:      6(int) IAdd 129 28
+             131:      6(int) Load 8(iid)
+             132:      6(int) IAdd 131 42
+             133:      6(int) Load 16(gid)
+             134:     68(ptr) AccessChain 101(blk2) 132 52 133
+             135:   24(fvec4) Load 134
+             136:     68(ptr) AccessChain 101(blk2) 130 52 63
+                              Store 136 135
+                              MemoryBarrier 42 96
+                              ControlBarrier 28 28 96
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out
new file mode 100644
index 0000000..9ac27fa
--- /dev/null
+++ b/Test/baseResults/spv.meshTaskShader.task.out
@@ -0,0 +1,172 @@
+spv.meshTaskShader.task
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 104
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability MeshShadingNV
+                              Extension  "SPV_NV_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskNV 4  "main" 11 17 80 101
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 20  "i"
+                              Name 34  "mem"
+                              Name 37  "block0"
+                              MemberName 37(block0) 0  "uni_value"
+                              Name 39  ""
+                              Name 55  "uni_image"
+                              Name 78  "Task"
+                              MemberName 78(Task) 0  "dummy"
+                              MemberName 78(Task) 1  "submesh"
+                              Name 80  "mytask"
+                              Name 101  "gl_TaskCountNV"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 37(block0) 0 Offset 0
+                              Decorate 37(block0) Block
+                              Decorate 39 DescriptorSet 0
+                              Decorate 55(uni_image) DescriptorSet 0
+                              Decorate 55(uni_image) Binding 0
+                              Decorate 55(uni_image) NonReadable
+                              Decorate 77 ArrayStride 8
+                              MemberDecorate 78(Task) 0 PerTaskNV
+                              MemberDecorate 78(Task) 0 Offset 0
+                              MemberDecorate 78(Task) 1 PerTaskNV
+                              MemberDecorate 78(Task) 1 Offset 8
+                              Decorate 78(Task) Block
+                              Decorate 101(gl_TaskCountNV) BuiltIn TaskCountNV
+                              Decorate 103 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              27:      6(int) Constant 10
+              28:             TypeBool
+              30:             TypeFloat 32
+              31:             TypeVector 30(float) 4
+              32:             TypeArray 31(fvec4) 27
+              33:             TypePointer Workgroup 32
+         34(mem):     33(ptr) Variable Workgroup
+      37(block0):             TypeStruct 6(int)
+              38:             TypePointer Uniform 37(block0)
+              39:     38(ptr) Variable Uniform
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              42:             TypePointer Uniform 6(int)
+              48:             TypePointer Workgroup 31(fvec4)
+              51:     40(int) Constant 1
+              53:             TypeImage 30(float) 2D nonsampled format:Unknown
+              54:             TypePointer UniformConstant 53
+   55(uni_image):     54(ptr) Variable UniformConstant
+              59:             TypeVector 40(int) 2
+              69:      6(int) Constant 1
+              73:      6(int) Constant 264
+              74:      6(int) Constant 2
+              75:             TypeVector 30(float) 2
+              76:      6(int) Constant 3
+              77:             TypeArray 75(fvec2) 76
+        78(Task):             TypeStruct 75(fvec2) 77
+              79:             TypePointer Output 78(Task)
+      80(mytask):     79(ptr) Variable Output
+              81:   30(float) Constant 1106247680
+              82:   30(float) Constant 1106771968
+              83:   75(fvec2) ConstantComposite 81 82
+              84:             TypePointer Output 75(fvec2)
+              86:   30(float) Constant 1107296256
+              87:   30(float) Constant 1107558400
+              88:   75(fvec2) ConstantComposite 86 87
+              90:   30(float) Constant 1107820544
+              91:   30(float) Constant 1108082688
+              92:   75(fvec2) ConstantComposite 90 91
+              94:     40(int) Constant 2
+             100:             TypePointer Output 6(int)
+101(gl_TaskCountNV):    100(ptr) Variable Output
+             102:      6(int) Constant 32
+             103:    9(ivec3) ConstantComposite 102 69 69
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+           20(i):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              Store 20(i) 12
+                              Branch 21
+              21:             Label
+                              LoopMerge 23 24 None
+                              Branch 25
+              25:             Label
+              26:      6(int) Load 20(i)
+              29:    28(bool) ULessThan 26 27
+                              BranchConditional 29 22 23
+              22:               Label
+              35:      6(int)   Load 20(i)
+              36:      6(int)   Load 20(i)
+              43:     42(ptr)   AccessChain 39 41
+              44:      6(int)   Load 43
+              45:      6(int)   IAdd 36 44
+              46:   30(float)   ConvertUToF 45
+              47:   31(fvec4)   CompositeConstruct 46 46 46 46
+              49:     48(ptr)   AccessChain 34(mem) 35
+                                Store 49 47
+                                Branch 24
+              24:               Label
+              50:      6(int)   Load 20(i)
+              52:      6(int)   IAdd 50 51
+                                Store 20(i) 52
+                                Branch 21
+              23:             Label
+              56:          53 Load 55(uni_image)
+              57:      6(int) Load 8(iid)
+              58:     40(int) Bitcast 57
+              60:   59(ivec2) CompositeConstruct 58 58
+              61:      6(int) Load 16(gid)
+              62:     48(ptr) AccessChain 34(mem) 61
+              63:   31(fvec4) Load 62
+                              ImageWrite 56 60 63
+              64:          53 Load 55(uni_image)
+              65:      6(int) Load 8(iid)
+              66:     40(int) Bitcast 65
+              67:   59(ivec2) CompositeConstruct 66 66
+              68:      6(int) Load 16(gid)
+              70:      6(int) IAdd 68 69
+              71:     48(ptr) AccessChain 34(mem) 70
+              72:   31(fvec4) Load 71
+                              ImageWrite 64 67 72
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+              85:     84(ptr) AccessChain 80(mytask) 41
+                              Store 85 83
+              89:     84(ptr) AccessChain 80(mytask) 51 41
+                              Store 89 88
+              93:     84(ptr) AccessChain 80(mytask) 51 51
+                              Store 93 92
+              95:      6(int) Load 16(gid)
+              96:      6(int) UMod 95 74
+              97:     84(ptr) AccessChain 80(mytask) 51 96
+              98:   75(fvec2) Load 97
+              99:     84(ptr) AccessChain 80(mytask) 51 94
+                              Store 99 98
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+                              Store 101(gl_TaskCountNV) 76
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 5d4508b..7874b94 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,4 +1,8 @@
 spv.multiviewPerViewAttributes.tesc
+error: SPIRV-Tools Validation Errors
+error: OpMemberName Member <id> '5' index is larger than Type <id> '27[gl_PositionPerViewNV]'s member count.
+  OpMemberName %gl_PerVertex_0 5 "gl_PositionPerViewNV"
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 37
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
old mode 100755
new mode 100644
index 5ddd8a5..5e462be
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,4 +1,8 @@
 spv.newTexture.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 284
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
old mode 100755
new mode 100644
index b593ce9..a7e627a
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -1,4 +1,8 @@
 spv.paramMemory.frag
+error: SPIRV-Tools Validation Errors
+error: OpFunctionCall Argument <id> '38[image1]'s type does not match Function <id> '8's parameter type.
+  %41 = OpFunctionCall %v4float %image_load_I21_vi2_ %image1 %param
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 69
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
old mode 100755
new mode 100644
index 33f0d95..b737a35
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,4 +1,8 @@
 spv.queryL.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 224
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 470cd42..ae7e824 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,4 +1,8 @@
 spv.sampleMaskOverrideCoverage.frag
+error: SPIRV-Tools Validation Errors
+error: Operand 2 of Decorate requires one of these capabilities: SampleMaskOverrideCoverageNV 
+  OpDecorate %gl_SampleMask OverrideCoverageNV
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 20
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index a834efd..b9fefd7 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,4 +1,8 @@
 spv.separate.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 319
@@ -28,33 +32,33 @@
                               Name 84  "itexCubeArray"
                               Name 91  "utexCubeArray"
                               Name 98  "tex1DArray"
-                              Name 106  "itex1DArray"
-                              Name 113  "utex1D"
-                              Name 120  "itex1D"
-                              Name 127  "utex1DArray"
-                              Name 134  "texBuffer"
-                              Name 146  "tex2DArray"
-                              Name 158  "itex2D"
-                              Name 165  "itex3D"
-                              Name 172  "itexCube"
-                              Name 179  "itex2DArray"
-                              Name 186  "utex2D"
-                              Name 193  "utex3D"
-                              Name 200  "utexCube"
-                              Name 207  "utex2DArray"
-                              Name 214  "itex2DRect"
-                              Name 221  "utex2DRect"
-                              Name 228  "itexBuffer"
-                              Name 235  "utexBuffer"
-                              Name 242  "tex2DMS"
-                              Name 249  "itex2DMS"
-                              Name 256  "utex2DMS"
-                              Name 263  "tex2DMSArray"
-                              Name 270  "itex2DMSArray"
-                              Name 277  "utex2DMSArray"
-                              Name 284  "tex1D"
-                              Name 294  "tex3D"
-                              Name 305  "tex2DRect"
+                              Name 105  "itex1DArray"
+                              Name 112  "utex1D"
+                              Name 119  "itex1D"
+                              Name 126  "utex1DArray"
+                              Name 133  "texBuffer"
+                              Name 145  "tex2DArray"
+                              Name 157  "itex2D"
+                              Name 164  "itex3D"
+                              Name 171  "itexCube"
+                              Name 178  "itex2DArray"
+                              Name 185  "utex2D"
+                              Name 192  "utex3D"
+                              Name 199  "utexCube"
+                              Name 206  "utex2DArray"
+                              Name 213  "itex2DRect"
+                              Name 220  "utex2DRect"
+                              Name 227  "itexBuffer"
+                              Name 234  "utexBuffer"
+                              Name 241  "tex2DMS"
+                              Name 248  "itex2DMS"
+                              Name 255  "utex2DMS"
+                              Name 262  "tex2DMSArray"
+                              Name 269  "itex2DMSArray"
+                              Name 276  "utex2DMSArray"
+                              Name 283  "tex1D"
+                              Name 293  "tex3D"
+                              Name 304  "tex2DRect"
                               Decorate 14(t2d) DescriptorSet 0
                               Decorate 18(s) DescriptorSet 0
                               Decorate 31(t3d) DescriptorSet 0
@@ -67,33 +71,33 @@
                               Decorate 84(itexCubeArray) DescriptorSet 0
                               Decorate 91(utexCubeArray) DescriptorSet 0
                               Decorate 98(tex1DArray) DescriptorSet 0
-                              Decorate 106(itex1DArray) DescriptorSet 0
-                              Decorate 113(utex1D) DescriptorSet 0
-                              Decorate 120(itex1D) DescriptorSet 0
-                              Decorate 127(utex1DArray) DescriptorSet 0
-                              Decorate 134(texBuffer) DescriptorSet 0
-                              Decorate 146(tex2DArray) DescriptorSet 0
-                              Decorate 158(itex2D) DescriptorSet 0
-                              Decorate 165(itex3D) DescriptorSet 0
-                              Decorate 172(itexCube) DescriptorSet 0
-                              Decorate 179(itex2DArray) DescriptorSet 0
-                              Decorate 186(utex2D) DescriptorSet 0
-                              Decorate 193(utex3D) DescriptorSet 0
-                              Decorate 200(utexCube) DescriptorSet 0
-                              Decorate 207(utex2DArray) DescriptorSet 0
-                              Decorate 214(itex2DRect) DescriptorSet 0
-                              Decorate 221(utex2DRect) DescriptorSet 0
-                              Decorate 228(itexBuffer) DescriptorSet 0
-                              Decorate 235(utexBuffer) DescriptorSet 0
-                              Decorate 242(tex2DMS) DescriptorSet 0
-                              Decorate 249(itex2DMS) DescriptorSet 0
-                              Decorate 256(utex2DMS) DescriptorSet 0
-                              Decorate 263(tex2DMSArray) DescriptorSet 0
-                              Decorate 270(itex2DMSArray) DescriptorSet 0
-                              Decorate 277(utex2DMSArray) DescriptorSet 0
-                              Decorate 284(tex1D) DescriptorSet 0
-                              Decorate 294(tex3D) DescriptorSet 0
-                              Decorate 305(tex2DRect) DescriptorSet 0
+                              Decorate 105(itex1DArray) DescriptorSet 0
+                              Decorate 112(utex1D) DescriptorSet 0
+                              Decorate 119(itex1D) DescriptorSet 0
+                              Decorate 126(utex1DArray) DescriptorSet 0
+                              Decorate 133(texBuffer) DescriptorSet 0
+                              Decorate 145(tex2DArray) DescriptorSet 0
+                              Decorate 157(itex2D) DescriptorSet 0
+                              Decorate 164(itex3D) DescriptorSet 0
+                              Decorate 171(itexCube) DescriptorSet 0
+                              Decorate 178(itex2DArray) DescriptorSet 0
+                              Decorate 185(utex2D) DescriptorSet 0
+                              Decorate 192(utex3D) DescriptorSet 0
+                              Decorate 199(utexCube) DescriptorSet 0
+                              Decorate 206(utex2DArray) DescriptorSet 0
+                              Decorate 213(itex2DRect) DescriptorSet 0
+                              Decorate 220(utex2DRect) DescriptorSet 0
+                              Decorate 227(itexBuffer) DescriptorSet 0
+                              Decorate 234(utexBuffer) DescriptorSet 0
+                              Decorate 241(tex2DMS) DescriptorSet 0
+                              Decorate 248(itex2DMS) DescriptorSet 0
+                              Decorate 255(utex2DMS) DescriptorSet 0
+                              Decorate 262(tex2DMSArray) DescriptorSet 0
+                              Decorate 269(itex2DMSArray) DescriptorSet 0
+                              Decorate 276(utex2DMSArray) DescriptorSet 0
+                              Decorate 283(tex1D) DescriptorSet 0
+                              Decorate 293(tex3D) DescriptorSet 0
+                              Decorate 304(tex2DRect) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
@@ -147,127 +151,127 @@
               90:             TypePointer UniformConstant 89
 91(utexCubeArray):     90(ptr) Variable UniformConstant
               94:             TypeSampledImage 89
-              96:             TypeImage 8(float) 1D array sampled format:Unknown
+              96:             TypeImage 8(float) 1D depth array sampled format:Unknown
               97:             TypePointer UniformConstant 96
   98(tex1DArray):     97(ptr) Variable UniformConstant
-             101:             TypeImage 8(float) 1D depth array sampled format:Unknown
-             102:             TypeSampledImage 101
-             104:             TypeImage 32(int) 1D array sampled format:Unknown
-             105:             TypePointer UniformConstant 104
-106(itex1DArray):    105(ptr) Variable UniformConstant
-             109:             TypeSampledImage 104
-             111:             TypeImage 27(int) 1D sampled format:Unknown
-             112:             TypePointer UniformConstant 111
-     113(utex1D):    112(ptr) Variable UniformConstant
-             116:             TypeSampledImage 111
-             118:             TypeImage 32(int) 1D sampled format:Unknown
-             119:             TypePointer UniformConstant 118
-     120(itex1D):    119(ptr) Variable UniformConstant
-             123:             TypeSampledImage 118
-             125:             TypeImage 27(int) 1D array sampled format:Unknown
-             126:             TypePointer UniformConstant 125
-127(utex1DArray):    126(ptr) Variable UniformConstant
-             130:             TypeSampledImage 125
-             132:             TypeImage 8(float) Buffer sampled format:Unknown
-             133:             TypePointer UniformConstant 132
-  134(texBuffer):    133(ptr) Variable UniformConstant
-             137:             TypeSampledImage 132
-             141:             TypeImage 8(float) Cube depth sampled format:Unknown
-             142:             TypeSampledImage 141
-             144:             TypeImage 8(float) 2D array sampled format:Unknown
-             145:             TypePointer UniformConstant 144
- 146(tex2DArray):    145(ptr) Variable UniformConstant
-             149:             TypeSampledImage 144
-             153:             TypeImage 8(float) 2D depth array sampled format:Unknown
-             154:             TypeSampledImage 153
-             156:             TypeImage 32(int) 2D sampled format:Unknown
-             157:             TypePointer UniformConstant 156
-     158(itex2D):    157(ptr) Variable UniformConstant
-             161:             TypeSampledImage 156
-             163:             TypeImage 32(int) 3D sampled format:Unknown
-             164:             TypePointer UniformConstant 163
-     165(itex3D):    164(ptr) Variable UniformConstant
-             168:             TypeSampledImage 163
-             170:             TypeImage 32(int) Cube sampled format:Unknown
-             171:             TypePointer UniformConstant 170
-   172(itexCube):    171(ptr) Variable UniformConstant
-             175:             TypeSampledImage 170
-             177:             TypeImage 32(int) 2D array sampled format:Unknown
-             178:             TypePointer UniformConstant 177
-179(itex2DArray):    178(ptr) Variable UniformConstant
-             182:             TypeSampledImage 177
-             184:             TypeImage 27(int) 2D sampled format:Unknown
-             185:             TypePointer UniformConstant 184
-     186(utex2D):    185(ptr) Variable UniformConstant
-             189:             TypeSampledImage 184
-             191:             TypeImage 27(int) 3D sampled format:Unknown
-             192:             TypePointer UniformConstant 191
-     193(utex3D):    192(ptr) Variable UniformConstant
-             196:             TypeSampledImage 191
-             198:             TypeImage 27(int) Cube sampled format:Unknown
-             199:             TypePointer UniformConstant 198
-   200(utexCube):    199(ptr) Variable UniformConstant
-             203:             TypeSampledImage 198
-             205:             TypeImage 27(int) 2D array sampled format:Unknown
-             206:             TypePointer UniformConstant 205
-207(utex2DArray):    206(ptr) Variable UniformConstant
-             210:             TypeSampledImage 205
-             212:             TypeImage 32(int) Rect sampled format:Unknown
-             213:             TypePointer UniformConstant 212
- 214(itex2DRect):    213(ptr) Variable UniformConstant
-             217:             TypeSampledImage 212
-             219:             TypeImage 27(int) Rect sampled format:Unknown
-             220:             TypePointer UniformConstant 219
- 221(utex2DRect):    220(ptr) Variable UniformConstant
-             224:             TypeSampledImage 219
-             226:             TypeImage 32(int) Buffer sampled format:Unknown
-             227:             TypePointer UniformConstant 226
- 228(itexBuffer):    227(ptr) Variable UniformConstant
-             231:             TypeSampledImage 226
-             233:             TypeImage 27(int) Buffer sampled format:Unknown
-             234:             TypePointer UniformConstant 233
- 235(utexBuffer):    234(ptr) Variable UniformConstant
-             238:             TypeSampledImage 233
-             240:             TypeImage 8(float) 2D multi-sampled sampled format:Unknown
-             241:             TypePointer UniformConstant 240
-    242(tex2DMS):    241(ptr) Variable UniformConstant
-             245:             TypeSampledImage 240
-             247:             TypeImage 32(int) 2D multi-sampled sampled format:Unknown
-             248:             TypePointer UniformConstant 247
-   249(itex2DMS):    248(ptr) Variable UniformConstant
-             252:             TypeSampledImage 247
-             254:             TypeImage 27(int) 2D multi-sampled sampled format:Unknown
-             255:             TypePointer UniformConstant 254
-   256(utex2DMS):    255(ptr) Variable UniformConstant
-             259:             TypeSampledImage 254
-             261:             TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
-             262:             TypePointer UniformConstant 261
-263(tex2DMSArray):    262(ptr) Variable UniformConstant
-             266:             TypeSampledImage 261
-             268:             TypeImage 32(int) 2D array multi-sampled sampled format:Unknown
-             269:             TypePointer UniformConstant 268
-270(itex2DMSArray):    269(ptr) Variable UniformConstant
-             273:             TypeSampledImage 268
-             275:             TypeImage 27(int) 2D array multi-sampled sampled format:Unknown
-             276:             TypePointer UniformConstant 275
-277(utex2DMSArray):    276(ptr) Variable UniformConstant
-             280:             TypeSampledImage 275
-             282:             TypeImage 8(float) 1D sampled format:Unknown
-             283:             TypePointer UniformConstant 282
-      284(tex1D):    283(ptr) Variable UniformConstant
-             287:             TypeSampledImage 282
-             291:             TypeImage 8(float) 1D depth sampled format:Unknown
-             292:             TypeSampledImage 291
-      294(tex3D):     36(ptr) Variable UniformConstant
-             300:             TypeImage 8(float) 2D depth sampled format:Unknown
-             301:             TypeSampledImage 300
-             303:             TypeImage 8(float) Rect sampled format:Unknown
-             304:             TypePointer UniformConstant 303
-  305(tex2DRect):    304(ptr) Variable UniformConstant
-             308:             TypeSampledImage 303
-             312:             TypeImage 8(float) Rect depth sampled format:Unknown
-             313:             TypeSampledImage 312
-             317:             TypeSampledImage 96
+             101:             TypeSampledImage 96
+             103:             TypeImage 32(int) 1D array sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+105(itex1DArray):    104(ptr) Variable UniformConstant
+             108:             TypeSampledImage 103
+             110:             TypeImage 27(int) 1D sampled format:Unknown
+             111:             TypePointer UniformConstant 110
+     112(utex1D):    111(ptr) Variable UniformConstant
+             115:             TypeSampledImage 110
+             117:             TypeImage 32(int) 1D sampled format:Unknown
+             118:             TypePointer UniformConstant 117
+     119(itex1D):    118(ptr) Variable UniformConstant
+             122:             TypeSampledImage 117
+             124:             TypeImage 27(int) 1D array sampled format:Unknown
+             125:             TypePointer UniformConstant 124
+126(utex1DArray):    125(ptr) Variable UniformConstant
+             129:             TypeSampledImage 124
+             131:             TypeImage 8(float) Buffer sampled format:Unknown
+             132:             TypePointer UniformConstant 131
+  133(texBuffer):    132(ptr) Variable UniformConstant
+             136:             TypeSampledImage 131
+             140:             TypeImage 8(float) Cube depth sampled format:Unknown
+             141:             TypeSampledImage 140
+             143:             TypeImage 8(float) 2D array sampled format:Unknown
+             144:             TypePointer UniformConstant 143
+ 145(tex2DArray):    144(ptr) Variable UniformConstant
+             148:             TypeSampledImage 143
+             152:             TypeImage 8(float) 2D depth array sampled format:Unknown
+             153:             TypeSampledImage 152
+             155:             TypeImage 32(int) 2D sampled format:Unknown
+             156:             TypePointer UniformConstant 155
+     157(itex2D):    156(ptr) Variable UniformConstant
+             160:             TypeSampledImage 155
+             162:             TypeImage 32(int) 3D sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+     164(itex3D):    163(ptr) Variable UniformConstant
+             167:             TypeSampledImage 162
+             169:             TypeImage 32(int) Cube sampled format:Unknown
+             170:             TypePointer UniformConstant 169
+   171(itexCube):    170(ptr) Variable UniformConstant
+             174:             TypeSampledImage 169
+             176:             TypeImage 32(int) 2D array sampled format:Unknown
+             177:             TypePointer UniformConstant 176
+178(itex2DArray):    177(ptr) Variable UniformConstant
+             181:             TypeSampledImage 176
+             183:             TypeImage 27(int) 2D sampled format:Unknown
+             184:             TypePointer UniformConstant 183
+     185(utex2D):    184(ptr) Variable UniformConstant
+             188:             TypeSampledImage 183
+             190:             TypeImage 27(int) 3D sampled format:Unknown
+             191:             TypePointer UniformConstant 190
+     192(utex3D):    191(ptr) Variable UniformConstant
+             195:             TypeSampledImage 190
+             197:             TypeImage 27(int) Cube sampled format:Unknown
+             198:             TypePointer UniformConstant 197
+   199(utexCube):    198(ptr) Variable UniformConstant
+             202:             TypeSampledImage 197
+             204:             TypeImage 27(int) 2D array sampled format:Unknown
+             205:             TypePointer UniformConstant 204
+206(utex2DArray):    205(ptr) Variable UniformConstant
+             209:             TypeSampledImage 204
+             211:             TypeImage 32(int) Rect sampled format:Unknown
+             212:             TypePointer UniformConstant 211
+ 213(itex2DRect):    212(ptr) Variable UniformConstant
+             216:             TypeSampledImage 211
+             218:             TypeImage 27(int) Rect sampled format:Unknown
+             219:             TypePointer UniformConstant 218
+ 220(utex2DRect):    219(ptr) Variable UniformConstant
+             223:             TypeSampledImage 218
+             225:             TypeImage 32(int) Buffer sampled format:Unknown
+             226:             TypePointer UniformConstant 225
+ 227(itexBuffer):    226(ptr) Variable UniformConstant
+             230:             TypeSampledImage 225
+             232:             TypeImage 27(int) Buffer sampled format:Unknown
+             233:             TypePointer UniformConstant 232
+ 234(utexBuffer):    233(ptr) Variable UniformConstant
+             237:             TypeSampledImage 232
+             239:             TypeImage 8(float) 2D multi-sampled sampled format:Unknown
+             240:             TypePointer UniformConstant 239
+    241(tex2DMS):    240(ptr) Variable UniformConstant
+             244:             TypeSampledImage 239
+             246:             TypeImage 32(int) 2D multi-sampled sampled format:Unknown
+             247:             TypePointer UniformConstant 246
+   248(itex2DMS):    247(ptr) Variable UniformConstant
+             251:             TypeSampledImage 246
+             253:             TypeImage 27(int) 2D multi-sampled sampled format:Unknown
+             254:             TypePointer UniformConstant 253
+   255(utex2DMS):    254(ptr) Variable UniformConstant
+             258:             TypeSampledImage 253
+             260:             TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
+             261:             TypePointer UniformConstant 260
+262(tex2DMSArray):    261(ptr) Variable UniformConstant
+             265:             TypeSampledImage 260
+             267:             TypeImage 32(int) 2D array multi-sampled sampled format:Unknown
+             268:             TypePointer UniformConstant 267
+269(itex2DMSArray):    268(ptr) Variable UniformConstant
+             272:             TypeSampledImage 267
+             274:             TypeImage 27(int) 2D array multi-sampled sampled format:Unknown
+             275:             TypePointer UniformConstant 274
+276(utex2DMSArray):    275(ptr) Variable UniformConstant
+             279:             TypeSampledImage 274
+             281:             TypeImage 8(float) 1D sampled format:Unknown
+             282:             TypePointer UniformConstant 281
+      283(tex1D):    282(ptr) Variable UniformConstant
+             286:             TypeSampledImage 281
+             290:             TypeImage 8(float) 1D depth sampled format:Unknown
+             291:             TypeSampledImage 290
+      293(tex3D):     36(ptr) Variable UniformConstant
+             299:             TypeImage 8(float) 2D depth sampled format:Unknown
+             300:             TypeSampledImage 299
+             302:             TypeImage 8(float) Rect sampled format:Unknown
+             303:             TypePointer UniformConstant 302
+  304(tex2DRect):    303(ptr) Variable UniformConstant
+             307:             TypeSampledImage 302
+             311:             TypeImage 8(float) Rect depth sampled format:Unknown
+             312:             TypeSampledImage 311
+             316:             TypeImage 8(float) 1D array sampled format:Unknown
+             317:             TypeSampledImage 316
          4(main):           2 Function None 3
                5:             Label
               15:          12 Load 14(t2d)
@@ -316,105 +320,105 @@
               95:          94 SampledImage 92 93
               99:          96 Load 98(tex1DArray)
              100:          16 Load 77(sShadow)
-             103:         102 SampledImage 99 100
-             107:         104 Load 106(itex1DArray)
-             108:          16 Load 18(s)
-             110:         109 SampledImage 107 108
-             114:         111 Load 113(utex1D)
-             115:          16 Load 18(s)
-             117:         116 SampledImage 114 115
-             121:         118 Load 120(itex1D)
-             122:          16 Load 18(s)
-             124:         123 SampledImage 121 122
-             128:         125 Load 127(utex1DArray)
-             129:          16 Load 18(s)
-             131:         130 SampledImage 128 129
-             135:         132 Load 134(texBuffer)
-             136:          16 Load 18(s)
-             138:         137 SampledImage 135 136
-             139:          62 Load 64(texCube)
-             140:          16 Load 77(sShadow)
-             143:         142 SampledImage 139 140
-             147:         144 Load 146(tex2DArray)
-             148:          16 Load 18(s)
-             150:         149 SampledImage 147 148
-             151:         144 Load 146(tex2DArray)
-             152:          16 Load 77(sShadow)
-             155:         154 SampledImage 151 152
-             159:         156 Load 158(itex2D)
-             160:          16 Load 18(s)
-             162:         161 SampledImage 159 160
-             166:         163 Load 165(itex3D)
-             167:          16 Load 18(s)
-             169:         168 SampledImage 166 167
-             173:         170 Load 172(itexCube)
-             174:          16 Load 18(s)
-             176:         175 SampledImage 173 174
-             180:         177 Load 179(itex2DArray)
-             181:          16 Load 18(s)
-             183:         182 SampledImage 180 181
-             187:         184 Load 186(utex2D)
-             188:          16 Load 18(s)
-             190:         189 SampledImage 187 188
-             194:         191 Load 193(utex3D)
-             195:          16 Load 18(s)
-             197:         196 SampledImage 194 195
-             201:         198 Load 200(utexCube)
-             202:          16 Load 18(s)
-             204:         203 SampledImage 201 202
-             208:         205 Load 207(utex2DArray)
-             209:          16 Load 18(s)
-             211:         210 SampledImage 208 209
-             215:         212 Load 214(itex2DRect)
-             216:          16 Load 18(s)
-             218:         217 SampledImage 215 216
-             222:         219 Load 221(utex2DRect)
-             223:          16 Load 18(s)
-             225:         224 SampledImage 222 223
-             229:         226 Load 228(itexBuffer)
-             230:          16 Load 18(s)
-             232:         231 SampledImage 229 230
-             236:         233 Load 235(utexBuffer)
-             237:          16 Load 18(s)
-             239:         238 SampledImage 236 237
-             243:         240 Load 242(tex2DMS)
-             244:          16 Load 18(s)
-             246:         245 SampledImage 243 244
-             250:         247 Load 249(itex2DMS)
-             251:          16 Load 18(s)
-             253:         252 SampledImage 250 251
-             257:         254 Load 256(utex2DMS)
-             258:          16 Load 18(s)
-             260:         259 SampledImage 257 258
-             264:         261 Load 263(tex2DMSArray)
-             265:          16 Load 18(s)
-             267:         266 SampledImage 264 265
-             271:         268 Load 270(itex2DMSArray)
-             272:          16 Load 18(s)
-             274:         273 SampledImage 271 272
-             278:         275 Load 277(utex2DMSArray)
-             279:          16 Load 18(s)
-             281:         280 SampledImage 278 279
-             285:         282 Load 284(tex1D)
-             286:          16 Load 18(s)
-             288:         287 SampledImage 285 286
-             289:         282 Load 284(tex1D)
-             290:          16 Load 77(sShadow)
-             293:         292 SampledImage 289 290
-             295:          26 Load 294(tex3D)
-             296:          16 Load 18(s)
-             297:          45 SampledImage 295 296
-             298:          12 Load 58(tex2D)
-             299:          16 Load 77(sShadow)
-             302:         301 SampledImage 298 299
-             306:         303 Load 305(tex2DRect)
-             307:          16 Load 18(s)
-             309:         308 SampledImage 306 307
-             310:         303 Load 305(tex2DRect)
-             311:          16 Load 77(sShadow)
-             314:         313 SampledImage 310 311
-             315:          96 Load 98(tex1DArray)
-             316:          16 Load 18(s)
-             318:         317 SampledImage 315 316
+             102:         101 SampledImage 99 100
+             106:         103 Load 105(itex1DArray)
+             107:          16 Load 18(s)
+             109:         108 SampledImage 106 107
+             113:         110 Load 112(utex1D)
+             114:          16 Load 18(s)
+             116:         115 SampledImage 113 114
+             120:         117 Load 119(itex1D)
+             121:          16 Load 18(s)
+             123:         122 SampledImage 120 121
+             127:         124 Load 126(utex1DArray)
+             128:          16 Load 18(s)
+             130:         129 SampledImage 127 128
+             134:         131 Load 133(texBuffer)
+             135:          16 Load 18(s)
+             137:         136 SampledImage 134 135
+             138:          62 Load 64(texCube)
+             139:          16 Load 77(sShadow)
+             142:         141 SampledImage 138 139
+             146:         143 Load 145(tex2DArray)
+             147:          16 Load 18(s)
+             149:         148 SampledImage 146 147
+             150:         143 Load 145(tex2DArray)
+             151:          16 Load 77(sShadow)
+             154:         153 SampledImage 150 151
+             158:         155 Load 157(itex2D)
+             159:          16 Load 18(s)
+             161:         160 SampledImage 158 159
+             165:         162 Load 164(itex3D)
+             166:          16 Load 18(s)
+             168:         167 SampledImage 165 166
+             172:         169 Load 171(itexCube)
+             173:          16 Load 18(s)
+             175:         174 SampledImage 172 173
+             179:         176 Load 178(itex2DArray)
+             180:          16 Load 18(s)
+             182:         181 SampledImage 179 180
+             186:         183 Load 185(utex2D)
+             187:          16 Load 18(s)
+             189:         188 SampledImage 186 187
+             193:         190 Load 192(utex3D)
+             194:          16 Load 18(s)
+             196:         195 SampledImage 193 194
+             200:         197 Load 199(utexCube)
+             201:          16 Load 18(s)
+             203:         202 SampledImage 200 201
+             207:         204 Load 206(utex2DArray)
+             208:          16 Load 18(s)
+             210:         209 SampledImage 207 208
+             214:         211 Load 213(itex2DRect)
+             215:          16 Load 18(s)
+             217:         216 SampledImage 214 215
+             221:         218 Load 220(utex2DRect)
+             222:          16 Load 18(s)
+             224:         223 SampledImage 221 222
+             228:         225 Load 227(itexBuffer)
+             229:          16 Load 18(s)
+             231:         230 SampledImage 228 229
+             235:         232 Load 234(utexBuffer)
+             236:          16 Load 18(s)
+             238:         237 SampledImage 235 236
+             242:         239 Load 241(tex2DMS)
+             243:          16 Load 18(s)
+             245:         244 SampledImage 242 243
+             249:         246 Load 248(itex2DMS)
+             250:          16 Load 18(s)
+             252:         251 SampledImage 249 250
+             256:         253 Load 255(utex2DMS)
+             257:          16 Load 18(s)
+             259:         258 SampledImage 256 257
+             263:         260 Load 262(tex2DMSArray)
+             264:          16 Load 18(s)
+             266:         265 SampledImage 263 264
+             270:         267 Load 269(itex2DMSArray)
+             271:          16 Load 18(s)
+             273:         272 SampledImage 270 271
+             277:         274 Load 276(utex2DMSArray)
+             278:          16 Load 18(s)
+             280:         279 SampledImage 277 278
+             284:         281 Load 283(tex1D)
+             285:          16 Load 18(s)
+             287:         286 SampledImage 284 285
+             288:         281 Load 283(tex1D)
+             289:          16 Load 77(sShadow)
+             292:         291 SampledImage 288 289
+             294:          26 Load 293(tex3D)
+             295:          16 Load 18(s)
+             296:          45 SampledImage 294 295
+             297:          12 Load 58(tex2D)
+             298:          16 Load 77(sShadow)
+             301:         300 SampledImage 297 298
+             305:         302 Load 304(tex2DRect)
+             306:          16 Load 18(s)
+             308:         307 SampledImage 305 306
+             309:         302 Load 304(tex2DRect)
+             310:          16 Load 77(sShadow)
+             313:         312 SampledImage 309 310
+             314:          96 Load 98(tex1DArray)
+             315:          16 Load 18(s)
+             318:         317 SampledImage 314 315
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index df70095..5219a3a 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,4 +1,8 @@
 spv.shaderBallotAMD.comp
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 1343
@@ -10,8 +14,6 @@
                               Capability Groups
                               Capability Int16
                               Capability StorageUniformBufferBlock16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_AMD_shader_ballot"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out
new file mode 100644
index 0000000..2ada2b5
--- /dev/null
+++ b/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -0,0 +1,849 @@
+spv.shaderImageFootprint.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 622
+
+                              Capability Shader
+                              Capability MinLod
+                              Capability Bad
+                              Extension  "SPV_NV_shader_image_footprint"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 21 24 76 125 225 275 277 387
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_shader_texture_footprint"
+                              Name 4  "main"
+                              Name 8  "result2D"
+                              MemberName 8(result2D) 0  "ret2D"
+                              MemberName 8(result2D) 1  "anchor2D"
+                              MemberName 8(result2D) 2  "offset2D"
+                              MemberName 8(result2D) 3  "mask2D"
+                              MemberName 8(result2D) 4  "lod2D"
+                              MemberName 8(result2D) 5  "granularity2D"
+                              Name 10  ""
+                              Name 17  "sample2D"
+                              Name 21  "P2"
+                              Name 24  "granularity"
+                              Name 28  "gl_TextureFootprint2DNV"
+                              MemberName 28(gl_TextureFootprint2DNV) 0  "anchor"
+                              MemberName 28(gl_TextureFootprint2DNV) 1  "offset"
+                              MemberName 28(gl_TextureFootprint2DNV) 2  "mask"
+                              MemberName 28(gl_TextureFootprint2DNV) 3  "lod"
+                              MemberName 28(gl_TextureFootprint2DNV) 4  "granularity"
+                              Name 30  "fp2D"
+                              Name 31  "ResType"
+                              Name 76  "bias"
+                              Name 78  "ResType"
+                              Name 125  "lodClamp"
+                              Name 128  "ResType"
+                              Name 178  "ResType"
+                              Name 225  "lod"
+                              Name 228  "ResType"
+                              Name 275  "dx"
+                              Name 277  "dy"
+                              Name 280  "ResType"
+                              Name 331  "ResType"
+                              Name 377  "result3D"
+                              MemberName 377(result3D) 0  "ret3D"
+                              MemberName 377(result3D) 1  "anchor3D"
+                              MemberName 377(result3D) 2  "offset3D"
+                              MemberName 377(result3D) 3  "mask3D"
+                              MemberName 377(result3D) 4  "lod3D"
+                              MemberName 377(result3D) 5  "granularity3D"
+                              Name 379  ""
+                              Name 383  "sample3D"
+                              Name 387  "P3"
+                              Name 390  "gl_TextureFootprint3DNV"
+                              MemberName 390(gl_TextureFootprint3DNV) 0  "anchor"
+                              MemberName 390(gl_TextureFootprint3DNV) 1  "offset"
+                              MemberName 390(gl_TextureFootprint3DNV) 2  "mask"
+                              MemberName 390(gl_TextureFootprint3DNV) 3  "lod"
+                              MemberName 390(gl_TextureFootprint3DNV) 4  "granularity"
+                              Name 392  "fp3D"
+                              Name 393  "ResType"
+                              Name 429  "ResType"
+                              Name 478  "ResType"
+                              Name 528  "ResType"
+                              Name 577  "ResType"
+                              MemberDecorate 8(result2D) 0 Offset 0
+                              MemberDecorate 8(result2D) 1 Offset 8
+                              MemberDecorate 8(result2D) 2 Offset 16
+                              MemberDecorate 8(result2D) 3 Offset 24
+                              MemberDecorate 8(result2D) 4 Offset 32
+                              MemberDecorate 8(result2D) 5 Offset 36
+                              Decorate 8(result2D) BufferBlock
+                              Decorate 10 DescriptorSet 0
+                              Decorate 17(sample2D) DescriptorSet 0
+                              Decorate 21(P2) Location 0
+                              Decorate 24(granularity) Flat
+                              Decorate 24(granularity) Location 3
+                              Decorate 76(bias) Location 9
+                              Decorate 125(lodClamp) Location 4
+                              Decorate 225(lod) Location 5
+                              Decorate 275(dx) Location 6
+                              Decorate 277(dy) Location 8
+                              MemberDecorate 377(result3D) 0 Offset 0
+                              MemberDecorate 377(result3D) 1 Offset 16
+                              MemberDecorate 377(result3D) 2 Offset 32
+                              MemberDecorate 377(result3D) 3 Offset 48
+                              MemberDecorate 377(result3D) 4 Offset 56
+                              MemberDecorate 377(result3D) 5 Offset 60
+                              Decorate 377(result3D) BufferBlock
+                              Decorate 379 DescriptorSet 0
+                              Decorate 383(sample3D) DescriptorSet 0
+                              Decorate 387(P3) Location 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+     8(result2D):             TypeStruct 6(int) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+               9:             TypePointer Uniform 8(result2D)
+              10:      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypeFloat 32
+              14:             TypeImage 13(float) 2D sampled format:Unknown
+              15:             TypeSampledImage 14
+              16:             TypePointer UniformConstant 15
+    17(sample2D):     16(ptr) Variable UniformConstant
+              19:             TypeVector 13(float) 2
+              20:             TypePointer Input 19(fvec2)
+          21(P2):     20(ptr) Variable Input
+              23:             TypePointer Input 11(int)
+ 24(granularity):     23(ptr) Variable Input
+              26:             TypeBool
+              27:    26(bool) ConstantTrue
+28(gl_TextureFootprint2DNV):             TypeStruct 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+              29:             TypePointer Function 28(gl_TextureFootprint2DNV)
+     31(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+              34:             TypePointer Function 7(ivec2)
+              36:     11(int) Constant 1
+              39:     11(int) Constant 2
+              42:     11(int) Constant 3
+              44:             TypePointer Function 6(int)
+              46:     11(int) Constant 4
+              50:      6(int) Constant 1
+              51:      6(int) Constant 0
+              53:             TypePointer Uniform 6(int)
+              57:             TypePointer Uniform 7(ivec2)
+              68:     11(int) Constant 5
+              75:             TypePointer Input 13(float)
+        76(bias):     75(ptr) Variable Input
+     78(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+   125(lodClamp):     75(ptr) Variable Input
+    128(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+    178(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+        225(lod):     75(ptr) Variable Input
+    228(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+         275(dx):     20(ptr) Variable Input
+         277(dy):     20(ptr) Variable Input
+    280(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+    331(ResType):             TypeStruct 26(bool) 7(ivec2) 7(ivec2) 7(ivec2) 6(int) 6(int)
+             376:             TypeVector 6(int) 3
+   377(result3D):             TypeStruct 6(int) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+             378:             TypePointer Uniform 377(result3D)
+             379:    378(ptr) Variable Uniform
+             380:             TypeImage 13(float) 3D sampled format:Unknown
+             381:             TypeSampledImage 380
+             382:             TypePointer UniformConstant 381
+   383(sample3D):    382(ptr) Variable UniformConstant
+             385:             TypeVector 13(float) 3
+             386:             TypePointer Input 385(fvec3)
+         387(P3):    386(ptr) Variable Input
+390(gl_TextureFootprint3DNV):             TypeStruct 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+             391:             TypePointer Function 390(gl_TextureFootprint3DNV)
+    393(ResType):             TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+             396:             TypePointer Function 376(ivec3)
+             411:             TypePointer Uniform 376(ivec3)
+    429(ResType):             TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+    478(ResType):             TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+    528(ResType):             TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+    577(ResType):             TypeStruct 26(bool) 376(ivec3) 376(ivec3) 7(ivec2) 6(int) 6(int)
+         4(main):           2 Function None 3
+               5:             Label
+        30(fp2D):     29(ptr) Variable Function
+       392(fp3D):    391(ptr) Variable Function
+              18:          15 Load 17(sample2D)
+              22:   19(fvec2) Load 21(P2)
+              25:     11(int) Load 24(granularity)
+              32: 31(ResType) ImageSampleFootprintNV 18 22 25 27
+              33:    7(ivec2) CompositeExtract 32 1
+              35:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 35 33
+              37:    7(ivec2) CompositeExtract 32 2
+              38:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 38 37
+              40:    7(ivec2) CompositeExtract 32 3
+              41:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 41 40
+              43:      6(int) CompositeExtract 32 4
+              45:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 45 43
+              47:      6(int) CompositeExtract 32 5
+              48:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 48 47
+              49:    26(bool) CompositeExtract 32 0
+              52:      6(int) Select 49 50 51
+              54:     53(ptr) AccessChain 10 12
+                              Store 54 52
+              55:     34(ptr) AccessChain 30(fp2D) 12
+              56:    7(ivec2) Load 55
+              58:     57(ptr) AccessChain 10 36
+                              Store 58 56
+              59:     34(ptr) AccessChain 30(fp2D) 36
+              60:    7(ivec2) Load 59
+              61:     57(ptr) AccessChain 10 39
+                              Store 61 60
+              62:     34(ptr) AccessChain 30(fp2D) 39
+              63:    7(ivec2) Load 62
+              64:     57(ptr) AccessChain 10 42
+                              Store 64 63
+              65:     44(ptr) AccessChain 30(fp2D) 42
+              66:      6(int) Load 65
+              67:     53(ptr) AccessChain 10 46
+                              Store 67 66
+              69:     44(ptr) AccessChain 30(fp2D) 46
+              70:      6(int) Load 69
+              71:     53(ptr) AccessChain 10 68
+                              Store 71 70
+              72:          15 Load 17(sample2D)
+              73:   19(fvec2) Load 21(P2)
+              74:     11(int) Load 24(granularity)
+              77:   13(float) Load 76(bias)
+              79: 78(ResType) ImageSampleFootprintNV 72 73 74 27 Bias 77
+              80:    7(ivec2) CompositeExtract 79 1
+              81:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 81 80
+              82:    7(ivec2) CompositeExtract 79 2
+              83:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 83 82
+              84:    7(ivec2) CompositeExtract 79 3
+              85:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 85 84
+              86:      6(int) CompositeExtract 79 4
+              87:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 87 86
+              88:      6(int) CompositeExtract 79 5
+              89:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 89 88
+              90:    26(bool) CompositeExtract 79 0
+              91:      6(int) Select 90 50 51
+              92:     53(ptr) AccessChain 10 12
+                              Store 92 91
+              93:     34(ptr) AccessChain 30(fp2D) 12
+              94:    7(ivec2) Load 93
+              95:     57(ptr) AccessChain 10 36
+              96:    7(ivec2) Load 95
+              97:    7(ivec2) IAdd 96 94
+              98:     57(ptr) AccessChain 10 36
+                              Store 98 97
+              99:     34(ptr) AccessChain 30(fp2D) 36
+             100:    7(ivec2) Load 99
+             101:     57(ptr) AccessChain 10 39
+             102:    7(ivec2) Load 101
+             103:    7(ivec2) IAdd 102 100
+             104:     57(ptr) AccessChain 10 39
+                              Store 104 103
+             105:     34(ptr) AccessChain 30(fp2D) 39
+             106:    7(ivec2) Load 105
+             107:     57(ptr) AccessChain 10 42
+             108:    7(ivec2) Load 107
+             109:    7(ivec2) IAdd 108 106
+             110:     57(ptr) AccessChain 10 42
+                              Store 110 109
+             111:     44(ptr) AccessChain 30(fp2D) 42
+             112:      6(int) Load 111
+             113:     53(ptr) AccessChain 10 46
+             114:      6(int) Load 113
+             115:      6(int) IAdd 114 112
+             116:     53(ptr) AccessChain 10 46
+                              Store 116 115
+             117:     44(ptr) AccessChain 30(fp2D) 46
+             118:      6(int) Load 117
+             119:     53(ptr) AccessChain 10 68
+             120:      6(int) Load 119
+             121:      6(int) IAdd 120 118
+             122:     53(ptr) AccessChain 10 68
+                              Store 122 121
+             123:          15 Load 17(sample2D)
+             124:   19(fvec2) Load 21(P2)
+             126:   13(float) Load 125(lodClamp)
+             127:     11(int) Load 24(granularity)
+             129:128(ResType) ImageSampleFootprintNV 123 124 127 27 MinLod 126
+             130:    7(ivec2) CompositeExtract 129 1
+             131:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 131 130
+             132:    7(ivec2) CompositeExtract 129 2
+             133:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 133 132
+             134:    7(ivec2) CompositeExtract 129 3
+             135:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 135 134
+             136:      6(int) CompositeExtract 129 4
+             137:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 137 136
+             138:      6(int) CompositeExtract 129 5
+             139:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 139 138
+             140:    26(bool) CompositeExtract 129 0
+             141:      6(int) Select 140 50 51
+             142:     53(ptr) AccessChain 10 12
+                              Store 142 141
+             143:     34(ptr) AccessChain 30(fp2D) 12
+             144:    7(ivec2) Load 143
+             145:     57(ptr) AccessChain 10 36
+             146:    7(ivec2) Load 145
+             147:    7(ivec2) IAdd 146 144
+             148:     57(ptr) AccessChain 10 36
+                              Store 148 147
+             149:     34(ptr) AccessChain 30(fp2D) 36
+             150:    7(ivec2) Load 149
+             151:     57(ptr) AccessChain 10 39
+             152:    7(ivec2) Load 151
+             153:    7(ivec2) IAdd 152 150
+             154:     57(ptr) AccessChain 10 39
+                              Store 154 153
+             155:     34(ptr) AccessChain 30(fp2D) 39
+             156:    7(ivec2) Load 155
+             157:     57(ptr) AccessChain 10 42
+             158:    7(ivec2) Load 157
+             159:    7(ivec2) IAdd 158 156
+             160:     57(ptr) AccessChain 10 42
+                              Store 160 159
+             161:     44(ptr) AccessChain 30(fp2D) 42
+             162:      6(int) Load 161
+             163:     53(ptr) AccessChain 10 46
+             164:      6(int) Load 163
+             165:      6(int) IAdd 164 162
+             166:     53(ptr) AccessChain 10 46
+                              Store 166 165
+             167:     44(ptr) AccessChain 30(fp2D) 46
+             168:      6(int) Load 167
+             169:     53(ptr) AccessChain 10 68
+             170:      6(int) Load 169
+             171:      6(int) IAdd 170 168
+             172:     53(ptr) AccessChain 10 68
+                              Store 172 171
+             173:          15 Load 17(sample2D)
+             174:   19(fvec2) Load 21(P2)
+             175:   13(float) Load 125(lodClamp)
+             176:     11(int) Load 24(granularity)
+             177:   13(float) Load 76(bias)
+             179:178(ResType) ImageSampleFootprintNV 173 174 176 27 Bias MinLod 177 175
+             180:    7(ivec2) CompositeExtract 179 1
+             181:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 181 180
+             182:    7(ivec2) CompositeExtract 179 2
+             183:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 183 182
+             184:    7(ivec2) CompositeExtract 179 3
+             185:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 185 184
+             186:      6(int) CompositeExtract 179 4
+             187:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 187 186
+             188:      6(int) CompositeExtract 179 5
+             189:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 189 188
+             190:    26(bool) CompositeExtract 179 0
+             191:      6(int) Select 190 50 51
+             192:     53(ptr) AccessChain 10 12
+                              Store 192 191
+             193:     34(ptr) AccessChain 30(fp2D) 12
+             194:    7(ivec2) Load 193
+             195:     57(ptr) AccessChain 10 36
+             196:    7(ivec2) Load 195
+             197:    7(ivec2) IAdd 196 194
+             198:     57(ptr) AccessChain 10 36
+                              Store 198 197
+             199:     34(ptr) AccessChain 30(fp2D) 36
+             200:    7(ivec2) Load 199
+             201:     57(ptr) AccessChain 10 39
+             202:    7(ivec2) Load 201
+             203:    7(ivec2) IAdd 202 200
+             204:     57(ptr) AccessChain 10 39
+                              Store 204 203
+             205:     34(ptr) AccessChain 30(fp2D) 39
+             206:    7(ivec2) Load 205
+             207:     57(ptr) AccessChain 10 42
+             208:    7(ivec2) Load 207
+             209:    7(ivec2) IAdd 208 206
+             210:     57(ptr) AccessChain 10 42
+                              Store 210 209
+             211:     44(ptr) AccessChain 30(fp2D) 42
+             212:      6(int) Load 211
+             213:     53(ptr) AccessChain 10 46
+             214:      6(int) Load 213
+             215:      6(int) IAdd 214 212
+             216:     53(ptr) AccessChain 10 46
+                              Store 216 215
+             217:     44(ptr) AccessChain 30(fp2D) 46
+             218:      6(int) Load 217
+             219:     53(ptr) AccessChain 10 68
+             220:      6(int) Load 219
+             221:      6(int) IAdd 220 218
+             222:     53(ptr) AccessChain 10 68
+                              Store 222 221
+             223:          15 Load 17(sample2D)
+             224:   19(fvec2) Load 21(P2)
+             226:   13(float) Load 225(lod)
+             227:     11(int) Load 24(granularity)
+             229:228(ResType) ImageSampleFootprintNV 223 224 227 27 Lod 226
+             230:    7(ivec2) CompositeExtract 229 1
+             231:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 231 230
+             232:    7(ivec2) CompositeExtract 229 2
+             233:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 233 232
+             234:    7(ivec2) CompositeExtract 229 3
+             235:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 235 234
+             236:      6(int) CompositeExtract 229 4
+             237:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 237 236
+             238:      6(int) CompositeExtract 229 5
+             239:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 239 238
+             240:    26(bool) CompositeExtract 229 0
+             241:      6(int) Select 240 50 51
+             242:     53(ptr) AccessChain 10 12
+                              Store 242 241
+             243:     34(ptr) AccessChain 30(fp2D) 12
+             244:    7(ivec2) Load 243
+             245:     57(ptr) AccessChain 10 36
+             246:    7(ivec2) Load 245
+             247:    7(ivec2) IAdd 246 244
+             248:     57(ptr) AccessChain 10 36
+                              Store 248 247
+             249:     34(ptr) AccessChain 30(fp2D) 36
+             250:    7(ivec2) Load 249
+             251:     57(ptr) AccessChain 10 39
+             252:    7(ivec2) Load 251
+             253:    7(ivec2) IAdd 252 250
+             254:     57(ptr) AccessChain 10 39
+                              Store 254 253
+             255:     34(ptr) AccessChain 30(fp2D) 39
+             256:    7(ivec2) Load 255
+             257:     57(ptr) AccessChain 10 42
+             258:    7(ivec2) Load 257
+             259:    7(ivec2) IAdd 258 256
+             260:     57(ptr) AccessChain 10 42
+                              Store 260 259
+             261:     44(ptr) AccessChain 30(fp2D) 42
+             262:      6(int) Load 261
+             263:     53(ptr) AccessChain 10 46
+             264:      6(int) Load 263
+             265:      6(int) IAdd 264 262
+             266:     53(ptr) AccessChain 10 46
+                              Store 266 265
+             267:     44(ptr) AccessChain 30(fp2D) 46
+             268:      6(int) Load 267
+             269:     53(ptr) AccessChain 10 68
+             270:      6(int) Load 269
+             271:      6(int) IAdd 270 268
+             272:     53(ptr) AccessChain 10 68
+                              Store 272 271
+             273:          15 Load 17(sample2D)
+             274:   19(fvec2) Load 21(P2)
+             276:   19(fvec2) Load 275(dx)
+             278:   19(fvec2) Load 277(dy)
+             279:     11(int) Load 24(granularity)
+             281:280(ResType) ImageSampleFootprintNV 273 274 279 27 Grad 276 278
+             282:    7(ivec2) CompositeExtract 281 1
+             283:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 283 282
+             284:    7(ivec2) CompositeExtract 281 2
+             285:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 285 284
+             286:    7(ivec2) CompositeExtract 281 3
+             287:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 287 286
+             288:      6(int) CompositeExtract 281 4
+             289:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 289 288
+             290:      6(int) CompositeExtract 281 5
+             291:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 291 290
+             292:    26(bool) CompositeExtract 281 0
+             293:      6(int) Select 292 50 51
+             294:     53(ptr) AccessChain 10 12
+                              Store 294 293
+             295:     34(ptr) AccessChain 30(fp2D) 12
+             296:    7(ivec2) Load 295
+             297:     57(ptr) AccessChain 10 36
+             298:    7(ivec2) Load 297
+             299:    7(ivec2) IAdd 298 296
+             300:     57(ptr) AccessChain 10 36
+                              Store 300 299
+             301:     34(ptr) AccessChain 30(fp2D) 36
+             302:    7(ivec2) Load 301
+             303:     57(ptr) AccessChain 10 39
+             304:    7(ivec2) Load 303
+             305:    7(ivec2) IAdd 304 302
+             306:     57(ptr) AccessChain 10 39
+                              Store 306 305
+             307:     34(ptr) AccessChain 30(fp2D) 39
+             308:    7(ivec2) Load 307
+             309:     57(ptr) AccessChain 10 42
+             310:    7(ivec2) Load 309
+             311:    7(ivec2) IAdd 310 308
+             312:     57(ptr) AccessChain 10 42
+                              Store 312 311
+             313:     44(ptr) AccessChain 30(fp2D) 42
+             314:      6(int) Load 313
+             315:     53(ptr) AccessChain 10 46
+             316:      6(int) Load 315
+             317:      6(int) IAdd 316 314
+             318:     53(ptr) AccessChain 10 46
+                              Store 318 317
+             319:     44(ptr) AccessChain 30(fp2D) 46
+             320:      6(int) Load 319
+             321:     53(ptr) AccessChain 10 68
+             322:      6(int) Load 321
+             323:      6(int) IAdd 322 320
+             324:     53(ptr) AccessChain 10 68
+                              Store 324 323
+             325:          15 Load 17(sample2D)
+             326:   19(fvec2) Load 21(P2)
+             327:   19(fvec2) Load 275(dx)
+             328:   19(fvec2) Load 277(dy)
+             329:   13(float) Load 125(lodClamp)
+             330:     11(int) Load 24(granularity)
+             332:331(ResType) ImageSampleFootprintNV 325 326 330 27 Grad MinLod 327 328 329
+             333:    7(ivec2) CompositeExtract 332 1
+             334:     34(ptr) AccessChain 30(fp2D) 12
+                              Store 334 333
+             335:    7(ivec2) CompositeExtract 332 2
+             336:     34(ptr) AccessChain 30(fp2D) 36
+                              Store 336 335
+             337:    7(ivec2) CompositeExtract 332 3
+             338:     34(ptr) AccessChain 30(fp2D) 39
+                              Store 338 337
+             339:      6(int) CompositeExtract 332 4
+             340:     44(ptr) AccessChain 30(fp2D) 42
+                              Store 340 339
+             341:      6(int) CompositeExtract 332 5
+             342:     44(ptr) AccessChain 30(fp2D) 46
+                              Store 342 341
+             343:    26(bool) CompositeExtract 332 0
+             344:      6(int) Select 343 50 51
+             345:     53(ptr) AccessChain 10 12
+                              Store 345 344
+             346:     34(ptr) AccessChain 30(fp2D) 12
+             347:    7(ivec2) Load 346
+             348:     57(ptr) AccessChain 10 36
+             349:    7(ivec2) Load 348
+             350:    7(ivec2) IAdd 349 347
+             351:     57(ptr) AccessChain 10 36
+                              Store 351 350
+             352:     34(ptr) AccessChain 30(fp2D) 36
+             353:    7(ivec2) Load 352
+             354:     57(ptr) AccessChain 10 39
+             355:    7(ivec2) Load 354
+             356:    7(ivec2) IAdd 355 353
+             357:     57(ptr) AccessChain 10 39
+                              Store 357 356
+             358:     34(ptr) AccessChain 30(fp2D) 39
+             359:    7(ivec2) Load 358
+             360:     57(ptr) AccessChain 10 42
+             361:    7(ivec2) Load 360
+             362:    7(ivec2) IAdd 361 359
+             363:     57(ptr) AccessChain 10 42
+                              Store 363 362
+             364:     44(ptr) AccessChain 30(fp2D) 42
+             365:      6(int) Load 364
+             366:     53(ptr) AccessChain 10 46
+             367:      6(int) Load 366
+             368:      6(int) IAdd 367 365
+             369:     53(ptr) AccessChain 10 46
+                              Store 369 368
+             370:     44(ptr) AccessChain 30(fp2D) 46
+             371:      6(int) Load 370
+             372:     53(ptr) AccessChain 10 68
+             373:      6(int) Load 372
+             374:      6(int) IAdd 373 371
+             375:     53(ptr) AccessChain 10 68
+                              Store 375 374
+             384:         381 Load 383(sample3D)
+             388:  385(fvec3) Load 387(P3)
+             389:     11(int) Load 24(granularity)
+             394:393(ResType) ImageSampleFootprintNV 384 388 389 27
+             395:  376(ivec3) CompositeExtract 394 1
+             397:    396(ptr) AccessChain 392(fp3D) 12
+                              Store 397 395
+             398:  376(ivec3) CompositeExtract 394 2
+             399:    396(ptr) AccessChain 392(fp3D) 36
+                              Store 399 398
+             400:    7(ivec2) CompositeExtract 394 3
+             401:     34(ptr) AccessChain 392(fp3D) 39
+                              Store 401 400
+             402:      6(int) CompositeExtract 394 4
+             403:     44(ptr) AccessChain 392(fp3D) 42
+                              Store 403 402
+             404:      6(int) CompositeExtract 394 5
+             405:     44(ptr) AccessChain 392(fp3D) 46
+                              Store 405 404
+             406:    26(bool) CompositeExtract 394 0
+             407:      6(int) Select 406 50 51
+             408:     53(ptr) AccessChain 379 12
+                              Store 408 407
+             409:    396(ptr) AccessChain 392(fp3D) 12
+             410:  376(ivec3) Load 409
+             412:    411(ptr) AccessChain 379 36
+                              Store 412 410
+             413:    396(ptr) AccessChain 392(fp3D) 36
+             414:  376(ivec3) Load 413
+             415:    411(ptr) AccessChain 379 39
+                              Store 415 414
+             416:     34(ptr) AccessChain 392(fp3D) 39
+             417:    7(ivec2) Load 416
+             418:     57(ptr) AccessChain 379 42
+                              Store 418 417
+             419:     44(ptr) AccessChain 392(fp3D) 42
+             420:      6(int) Load 419
+             421:     53(ptr) AccessChain 379 46
+                              Store 421 420
+             422:     44(ptr) AccessChain 392(fp3D) 46
+             423:      6(int) Load 422
+             424:     53(ptr) AccessChain 379 68
+                              Store 424 423
+             425:         381 Load 383(sample3D)
+             426:  385(fvec3) Load 387(P3)
+             427:     11(int) Load 24(granularity)
+             428:   13(float) Load 76(bias)
+             430:429(ResType) ImageSampleFootprintNV 425 426 427 27 Bias 428
+             431:  376(ivec3) CompositeExtract 430 1
+             432:    396(ptr) AccessChain 392(fp3D) 12
+                              Store 432 431
+             433:  376(ivec3) CompositeExtract 430 2
+             434:    396(ptr) AccessChain 392(fp3D) 36
+                              Store 434 433
+             435:    7(ivec2) CompositeExtract 430 3
+             436:     34(ptr) AccessChain 392(fp3D) 39
+                              Store 436 435
+             437:      6(int) CompositeExtract 430 4
+             438:     44(ptr) AccessChain 392(fp3D) 42
+                              Store 438 437
+             439:      6(int) CompositeExtract 430 5
+             440:     44(ptr) AccessChain 392(fp3D) 46
+                              Store 440 439
+             441:    26(bool) CompositeExtract 430 0
+             442:      6(int) Select 441 50 51
+             443:     53(ptr) AccessChain 379 12
+                              Store 443 442
+             444:    396(ptr) AccessChain 392(fp3D) 12
+             445:  376(ivec3) Load 444
+             446:    411(ptr) AccessChain 379 36
+             447:  376(ivec3) Load 446
+             448:  376(ivec3) IAdd 447 445
+             449:    411(ptr) AccessChain 379 36
+                              Store 449 448
+             450:    396(ptr) AccessChain 392(fp3D) 36
+             451:  376(ivec3) Load 450
+             452:    411(ptr) AccessChain 379 39
+             453:  376(ivec3) Load 452
+             454:  376(ivec3) IAdd 453 451
+             455:    411(ptr) AccessChain 379 39
+                              Store 455 454
+             456:     34(ptr) AccessChain 392(fp3D) 39
+             457:    7(ivec2) Load 456
+             458:     57(ptr) AccessChain 379 42
+             459:    7(ivec2) Load 458
+             460:    7(ivec2) IAdd 459 457
+             461:     57(ptr) AccessChain 379 42
+                              Store 461 460
+             462:     44(ptr) AccessChain 392(fp3D) 42
+             463:      6(int) Load 462
+             464:     53(ptr) AccessChain 379 46
+             465:      6(int) Load 464
+             466:      6(int) IAdd 465 463
+             467:     53(ptr) AccessChain 379 46
+                              Store 467 466
+             468:     44(ptr) AccessChain 392(fp3D) 46
+             469:      6(int) Load 468
+             470:     53(ptr) AccessChain 379 68
+             471:      6(int) Load 470
+             472:      6(int) IAdd 471 469
+             473:     53(ptr) AccessChain 379 68
+                              Store 473 472
+             474:         381 Load 383(sample3D)
+             475:  385(fvec3) Load 387(P3)
+             476:   13(float) Load 125(lodClamp)
+             477:     11(int) Load 24(granularity)
+             479:478(ResType) ImageSampleFootprintNV 474 475 477 27 MinLod 476
+             480:  376(ivec3) CompositeExtract 479 1
+             481:    396(ptr) AccessChain 392(fp3D) 12
+                              Store 481 480
+             482:  376(ivec3) CompositeExtract 479 2
+             483:    396(ptr) AccessChain 392(fp3D) 36
+                              Store 483 482
+             484:    7(ivec2) CompositeExtract 479 3
+             485:     34(ptr) AccessChain 392(fp3D) 39
+                              Store 485 484
+             486:      6(int) CompositeExtract 479 4
+             487:     44(ptr) AccessChain 392(fp3D) 42
+                              Store 487 486
+             488:      6(int) CompositeExtract 479 5
+             489:     44(ptr) AccessChain 392(fp3D) 46
+                              Store 489 488
+             490:    26(bool) CompositeExtract 479 0
+             491:      6(int) Select 490 50 51
+             492:     53(ptr) AccessChain 379 12
+                              Store 492 491
+             493:    396(ptr) AccessChain 392(fp3D) 12
+             494:  376(ivec3) Load 493
+             495:    411(ptr) AccessChain 379 36
+             496:  376(ivec3) Load 495
+             497:  376(ivec3) IAdd 496 494
+             498:    411(ptr) AccessChain 379 36
+                              Store 498 497
+             499:    396(ptr) AccessChain 392(fp3D) 36
+             500:  376(ivec3) Load 499
+             501:    411(ptr) AccessChain 379 39
+             502:  376(ivec3) Load 501
+             503:  376(ivec3) IAdd 502 500
+             504:    411(ptr) AccessChain 379 39
+                              Store 504 503
+             505:     34(ptr) AccessChain 392(fp3D) 39
+             506:    7(ivec2) Load 505
+             507:     57(ptr) AccessChain 379 42
+             508:    7(ivec2) Load 507
+             509:    7(ivec2) IAdd 508 506
+             510:     57(ptr) AccessChain 379 42
+                              Store 510 509
+             511:     44(ptr) AccessChain 392(fp3D) 42
+             512:      6(int) Load 511
+             513:     53(ptr) AccessChain 379 46
+             514:      6(int) Load 513
+             515:      6(int) IAdd 514 512
+             516:     53(ptr) AccessChain 379 46
+                              Store 516 515
+             517:     44(ptr) AccessChain 392(fp3D) 46
+             518:      6(int) Load 517
+             519:     53(ptr) AccessChain 379 68
+             520:      6(int) Load 519
+             521:      6(int) IAdd 520 518
+             522:     53(ptr) AccessChain 379 68
+                              Store 522 521
+             523:         381 Load 383(sample3D)
+             524:  385(fvec3) Load 387(P3)
+             525:   13(float) Load 125(lodClamp)
+             526:     11(int) Load 24(granularity)
+             527:   13(float) Load 76(bias)
+             529:528(ResType) ImageSampleFootprintNV 523 524 526 27 Bias MinLod 527 525
+             530:  376(ivec3) CompositeExtract 529 1
+             531:    396(ptr) AccessChain 392(fp3D) 12
+                              Store 531 530
+             532:  376(ivec3) CompositeExtract 529 2
+             533:    396(ptr) AccessChain 392(fp3D) 36
+                              Store 533 532
+             534:    7(ivec2) CompositeExtract 529 3
+             535:     34(ptr) AccessChain 392(fp3D) 39
+                              Store 535 534
+             536:      6(int) CompositeExtract 529 4
+             537:     44(ptr) AccessChain 392(fp3D) 42
+                              Store 537 536
+             538:      6(int) CompositeExtract 529 5
+             539:     44(ptr) AccessChain 392(fp3D) 46
+                              Store 539 538
+             540:    26(bool) CompositeExtract 529 0
+             541:      6(int) Select 540 50 51
+             542:     53(ptr) AccessChain 379 12
+                              Store 542 541
+             543:    396(ptr) AccessChain 392(fp3D) 12
+             544:  376(ivec3) Load 543
+             545:    411(ptr) AccessChain 379 36
+             546:  376(ivec3) Load 545
+             547:  376(ivec3) IAdd 546 544
+             548:    411(ptr) AccessChain 379 36
+                              Store 548 547
+             549:    396(ptr) AccessChain 392(fp3D) 36
+             550:  376(ivec3) Load 549
+             551:    411(ptr) AccessChain 379 39
+             552:  376(ivec3) Load 551
+             553:  376(ivec3) IAdd 552 550
+             554:    411(ptr) AccessChain 379 39
+                              Store 554 553
+             555:     34(ptr) AccessChain 392(fp3D) 39
+             556:    7(ivec2) Load 555
+             557:     57(ptr) AccessChain 379 42
+             558:    7(ivec2) Load 557
+             559:    7(ivec2) IAdd 558 556
+             560:     57(ptr) AccessChain 379 42
+                              Store 560 559
+             561:     44(ptr) AccessChain 392(fp3D) 42
+             562:      6(int) Load 561
+             563:     53(ptr) AccessChain 379 46
+             564:      6(int) Load 563
+             565:      6(int) IAdd 564 562
+             566:     53(ptr) AccessChain 379 46
+                              Store 566 565
+             567:     44(ptr) AccessChain 392(fp3D) 46
+             568:      6(int) Load 567
+             569:     53(ptr) AccessChain 379 68
+             570:      6(int) Load 569
+             571:      6(int) IAdd 570 568
+             572:     53(ptr) AccessChain 379 68
+                              Store 572 571
+             573:         381 Load 383(sample3D)
+             574:  385(fvec3) Load 387(P3)
+             575:   13(float) Load 225(lod)
+             576:     11(int) Load 24(granularity)
+             578:577(ResType) ImageSampleFootprintNV 573 574 576 27 Lod 575
+             579:  376(ivec3) CompositeExtract 578 1
+             580:    396(ptr) AccessChain 392(fp3D) 12
+                              Store 580 579
+             581:  376(ivec3) CompositeExtract 578 2
+             582:    396(ptr) AccessChain 392(fp3D) 36
+                              Store 582 581
+             583:    7(ivec2) CompositeExtract 578 3
+             584:     34(ptr) AccessChain 392(fp3D) 39
+                              Store 584 583
+             585:      6(int) CompositeExtract 578 4
+             586:     44(ptr) AccessChain 392(fp3D) 42
+                              Store 586 585
+             587:      6(int) CompositeExtract 578 5
+             588:     44(ptr) AccessChain 392(fp3D) 46
+                              Store 588 587
+             589:    26(bool) CompositeExtract 578 0
+             590:      6(int) Select 589 50 51
+             591:     53(ptr) AccessChain 379 12
+                              Store 591 590
+             592:    396(ptr) AccessChain 392(fp3D) 12
+             593:  376(ivec3) Load 592
+             594:    411(ptr) AccessChain 379 36
+             595:  376(ivec3) Load 594
+             596:  376(ivec3) IAdd 595 593
+             597:    411(ptr) AccessChain 379 36
+                              Store 597 596
+             598:    396(ptr) AccessChain 392(fp3D) 36
+             599:  376(ivec3) Load 598
+             600:    411(ptr) AccessChain 379 39
+             601:  376(ivec3) Load 600
+             602:  376(ivec3) IAdd 601 599
+             603:    411(ptr) AccessChain 379 39
+                              Store 603 602
+             604:     34(ptr) AccessChain 392(fp3D) 39
+             605:    7(ivec2) Load 604
+             606:     57(ptr) AccessChain 379 42
+             607:    7(ivec2) Load 606
+             608:    7(ivec2) IAdd 607 605
+             609:     57(ptr) AccessChain 379 42
+                              Store 609 608
+             610:     44(ptr) AccessChain 392(fp3D) 42
+             611:      6(int) Load 610
+             612:     53(ptr) AccessChain 379 46
+             613:      6(int) Load 612
+             614:      6(int) IAdd 613 611
+             615:     53(ptr) AccessChain 379 46
+                              Store 615 614
+             616:     44(ptr) AccessChain 392(fp3D) 46
+             617:      6(int) Load 616
+             618:     53(ptr) AccessChain 379 68
+             619:      6(int) Load 618
+             620:      6(int) IAdd 619 617
+             621:     53(ptr) AccessChain 379 68
+                              Store 621 620
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out
new file mode 100644
index 0000000..2b6bd31
--- /dev/null
+++ b/Test/baseResults/spv.shadingRate.frag.out
@@ -0,0 +1,48 @@
+spv.shadingRate.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 21
+
+                              Capability Shader
+                              Capability ShadingRateNV
+                              Extension  "SPV_NV_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 13 17 19
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_shading_rate_image"
+                              Name 4  "main"
+                              Name 9  "FragmentSize"
+                              Name 13  "gl_FragmentSizeNV"
+                              Name 17  "InvocationsPerPixel"
+                              Name 19  "gl_InvocationsPerPixelNV"
+                              Decorate 9(FragmentSize) Location 0
+                              Decorate 13(gl_FragmentSizeNV) Flat
+                              Decorate 13(gl_FragmentSizeNV) BuiltIn FragmentSizeNV
+                              Decorate 17(InvocationsPerPixel) Location 2
+                              Decorate 19(gl_InvocationsPerPixelNV) Flat
+                              Decorate 19(gl_InvocationsPerPixelNV) BuiltIn InvocationsPerPixelNV
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer Output 7(fvec2)
+ 9(FragmentSize):      8(ptr) Variable Output
+              10:             TypeInt 32 1
+              11:             TypeVector 10(int) 2
+              12:             TypePointer Input 11(ivec2)
+13(gl_FragmentSizeNV):     12(ptr) Variable Input
+              16:             TypePointer Output 10(int)
+17(InvocationsPerPixel):     16(ptr) Variable Output
+              18:             TypePointer Input 10(int)
+19(gl_InvocationsPerPixelNV):     18(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              14:   11(ivec2) Load 13(gl_FragmentSizeNV)
+              15:    7(fvec2) ConvertSToF 14
+                              Store 9(FragmentSize) 15
+              20:     10(int) Load 19(gl_InvocationsPerPixelNV)
+                              Store 17(InvocationsPerPixel) 20
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index d94f643..78a2c2e 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,4 +1,8 @@
 spv.sparseTexture.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 438
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index f63fd2f..fe210f7 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,4 +1,8 @@
 spv.sparseTextureClamp.frag
+error: SPIRV-Tools Validation Errors
+error: Capability SampledRect is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability SampledRect
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 360
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index beda9e0..0d47dce 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s2543];"
+                              Name 14  "foo(vf4[s2765];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s2543];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s2765];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s2543];):           2 Function None 12
+14(foo(vf4[s2765];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index c01467e..732e5b4 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,4 +1,8 @@
 spv.stereoViewRendering.tesc
+error: SPIRV-Tools Validation Errors
+error: When BuiltIn decoration is applied to a structure-type member, all members of that structure type must also be decorated with BuiltIn (No allowed mixing of built-in variables and non-built-in variables within a single structure). Structure id 27 does not meet this requirement.
+  %gl_PerVertex_0 = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1 %v4float
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 38
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.subgroupClusteredNeg.comp.out b/Test/baseResults/spv.subgroupClusteredNeg.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
old mode 100755
new mode 100644
index 527a62e..f65d996
--- a/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -1,4 +1,8 @@
 spv.subgroupPartitioned.comp
+error: SPIRV-Tools Validation Errors
+error: Opcode GroupNonUniformFAdd requires one of these capabilities: GroupNonUniformArithmetic GroupNonUniformClustered 
+  %179 = OpGroupNonUniformFAdd %float %uint_3 PartitionedReduceNV %176 %177
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 2506
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index faa4dba..d01515d 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,4 +1,8 @@
 spv.textureGatherBiasLod.frag
+error: SPIRV-Tools Validation Errors
+error: Image Operand Bias can only be used with ImplicitLod opcodes
+  %27 = OpImageGather %v4float %17 %21 %int_0 Bias %26
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 298
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out
new file mode 100644
index 0000000..d64d437
--- /dev/null
+++ b/Test/baseResults/spv.unit1.frag.out
@@ -0,0 +1,298 @@
+spv.unit1.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp highp float)
+0:12        'f' ( global highp float)
+0:12        Constant:
+0:12          10.000000
+0:13      Sequence
+0:13        move second child to first child ( temp highp float)
+0:13          'g' ( temp highp float)
+0:13          Function Call: foo( ( global highp float)
+0:14      add second child into first child ( temp highp float)
+0:14        'f' ( global highp float)
+0:14        'g' ( temp highp float)
+0:15      add second child into first child ( temp highp float)
+0:15        'f' ( global highp float)
+0:15        direct index ( temp highp float)
+0:15          'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:15          Constant:
+0:15            1 (const int)
+0:?   Linker Objects
+0:?     'f' ( global highp float)
+0:?     'a1' ( global highp float)
+0:?     'cout' ( out highp float)
+
+spv.unit2.frag
+Shader version: 410
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: foo( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Sequence
+0:14        move second child to first child ( temp highp float)
+0:14          'h2' ( temp highp float)
+0:14          add ( temp highp float)
+0:14            component-wise multiply ( temp highp float)
+0:14              Constant:
+0:14                2.000000
+0:14              'f' ( global highp float)
+0:14            'cin' ( smooth in highp float)
+0:15      Sequence
+0:15        move second child to first child ( temp highp float)
+0:15          'g2' ( temp highp float)
+0:15          Function Call: bar( ( global highp float)
+0:16      Branch: Return with expression
+0:16        add ( temp highp float)
+0:16          add ( temp highp float)
+0:16            'h2' ( temp highp float)
+0:16            'g2' ( temp highp float)
+0:16          direct index ( temp highp float)
+0:16            'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:16            Constant:
+0:16              1 (const int)
+0:?   Linker Objects
+0:?     'a2' ( global highp float)
+0:?     'f' ( global highp float)
+0:?     'cout' ( out highp float)
+0:?     'cin' ( smooth in highp float)
+
+spv.unit3.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Sequence
+0:4    move second child to first child ( temp highp float)
+0:4      'h3' ( global highp float)
+0:4      Constant:
+0:4        3.000000
+0:9  Function Definition: bar( ( global highp float)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      multiply second child into first child ( temp highp float)
+0:11        'h3' ( global highp float)
+0:11        'f' ( global highp float)
+0:12      Sequence
+0:12        move second child to first child ( temp highp float)
+0:12          'g3' ( temp highp float)
+0:12          component-wise multiply ( temp highp float)
+0:12            Constant:
+0:12              2.000000
+0:12            'h3' ( global highp float)
+0:13      move second child to first child ( temp highp float)
+0:13        'cout' ( out highp float)
+0:13        'g3' ( temp highp float)
+0:14      Branch: Return with expression
+0:14        add ( temp highp float)
+0:14          add ( temp highp float)
+0:14            'h3' ( global highp float)
+0:14            'g3' ( temp highp float)
+0:14          direct index ( temp highp float)
+0:14            'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:14            Constant:
+0:14              1 (const int)
+0:?   Linker Objects
+0:?     'f' ( global highp float)
+0:?     'h3' ( global highp float)
+0:?     'cout' ( out highp float)
+0:?     'cin' ( smooth in highp float)
+
+
+Linked fragment stage:
+
+
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      move second child to first child ( temp highp float)
+0:12        'f' ( global highp float)
+0:12        Constant:
+0:12          10.000000
+0:13      Sequence
+0:13        move second child to first child ( temp highp float)
+0:13          'g' ( temp highp float)
+0:13          Function Call: foo( ( global highp float)
+0:14      add second child into first child ( temp highp float)
+0:14        'f' ( global highp float)
+0:14        'g' ( temp highp float)
+0:15      add second child into first child ( temp highp float)
+0:15        'f' ( global highp float)
+0:15        direct index ( temp highp float)
+0:15          'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:15          Constant:
+0:15            1 (const int)
+0:12  Function Definition: foo( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Sequence
+0:14        move second child to first child ( temp highp float)
+0:14          'h2' ( temp highp float)
+0:14          add ( temp highp float)
+0:14            component-wise multiply ( temp highp float)
+0:14              Constant:
+0:14                2.000000
+0:14              'f' ( global highp float)
+0:14            'cin' ( smooth in highp float)
+0:15      Sequence
+0:15        move second child to first child ( temp highp float)
+0:15          'g2' ( temp highp float)
+0:15          Function Call: bar( ( global highp float)
+0:16      Branch: Return with expression
+0:16        add ( temp highp float)
+0:16          add ( temp highp float)
+0:16            'h2' ( temp highp float)
+0:16            'g2' ( temp highp float)
+0:16          direct index ( temp highp float)
+0:16            'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:16            Constant:
+0:16              1 (const int)
+0:4  Sequence
+0:4    move second child to first child ( temp highp float)
+0:4      'h3' ( global highp float)
+0:4      Constant:
+0:4        3.000000
+0:9  Function Definition: bar( ( global highp float)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      multiply second child into first child ( temp highp float)
+0:11        'h3' ( global highp float)
+0:11        'f' ( global highp float)
+0:12      Sequence
+0:12        move second child to first child ( temp highp float)
+0:12          'g3' ( temp highp float)
+0:12          component-wise multiply ( temp highp float)
+0:12            Constant:
+0:12              2.000000
+0:12            'h3' ( global highp float)
+0:13      move second child to first child ( temp highp float)
+0:13        'cout' ( out highp float)
+0:13        'g3' ( temp highp float)
+0:14      Branch: Return with expression
+0:14        add ( temp highp float)
+0:14          add ( temp highp float)
+0:14            'h3' ( global highp float)
+0:14            'g3' ( temp highp float)
+0:14          direct index ( temp highp float)
+0:14            'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord)
+0:14            Constant:
+0:14              1 (const int)
+0:?   Linker Objects
+0:?     'f' ( global highp float)
+0:?     'a1' ( global highp float)
+0:?     'cout' ( out highp float)
+0:?     'a2' ( global highp float)
+0:?     'cin' ( smooth in highp float)
+0:?     'h3' ( global highp float)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 69
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 25 37 57
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 8  "foo("
+                              Name 10  "bar("
+                              Name 13  "h3"
+                              Name 15  "f"
+                              Name 18  "g"
+                              Name 25  "gl_FragCoord"
+                              Name 33  "h2"
+                              Name 37  "cin"
+                              Name 40  "g2"
+                              Name 53  "g3"
+                              Name 57  "cout"
+                              Name 67  "a1"
+                              Name 68  "a2"
+                              Decorate 25(gl_FragCoord) BuiltIn FragCoord
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              12:             TypePointer Private 6(float)
+          13(h3):     12(ptr) Variable Private
+              14:    6(float) Constant 1077936128
+           15(f):     12(ptr) Variable Private
+              16:    6(float) Constant 1092616192
+              17:             TypePointer Function 6(float)
+              23:             TypeVector 6(float) 4
+              24:             TypePointer Input 23(fvec4)
+25(gl_FragCoord):     24(ptr) Variable Input
+              26:             TypeInt 32 0
+              27:     26(int) Constant 1
+              28:             TypePointer Input 6(float)
+              34:    6(float) Constant 1073741824
+         37(cin):     28(ptr) Variable Input
+              56:             TypePointer Output 6(float)
+        57(cout):     56(ptr) Variable Output
+          67(a1):     12(ptr) Variable Private
+          68(a2):     12(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+           18(g):     17(ptr) Variable Function
+                              Store 13(h3) 14
+                              Store 15(f) 16
+              19:    6(float) FunctionCall 8(foo()
+                              Store 18(g) 19
+              20:    6(float) Load 18(g)
+              21:    6(float) Load 15(f)
+              22:    6(float) FAdd 21 20
+                              Store 15(f) 22
+              29:     28(ptr) AccessChain 25(gl_FragCoord) 27
+              30:    6(float) Load 29
+              31:    6(float) Load 15(f)
+              32:    6(float) FAdd 31 30
+                              Store 15(f) 32
+                              Return
+                              FunctionEnd
+         8(foo():    6(float) Function None 7
+               9:             Label
+          33(h2):     17(ptr) Variable Function
+          40(g2):     17(ptr) Variable Function
+              35:    6(float) Load 15(f)
+              36:    6(float) FMul 34 35
+              38:    6(float) Load 37(cin)
+              39:    6(float) FAdd 36 38
+                              Store 33(h2) 39
+              41:    6(float) FunctionCall 10(bar()
+                              Store 40(g2) 41
+              42:    6(float) Load 33(h2)
+              43:    6(float) Load 40(g2)
+              44:    6(float) FAdd 42 43
+              45:     28(ptr) AccessChain 25(gl_FragCoord) 27
+              46:    6(float) Load 45
+              47:    6(float) FAdd 44 46
+                              ReturnValue 47
+                              FunctionEnd
+        10(bar():    6(float) Function None 7
+              11:             Label
+          53(g3):     17(ptr) Variable Function
+              50:    6(float) Load 15(f)
+              51:    6(float) Load 13(h3)
+              52:    6(float) FMul 51 50
+                              Store 13(h3) 52
+              54:    6(float) Load 13(h3)
+              55:    6(float) FMul 34 54
+                              Store 53(g3) 55
+              58:    6(float) Load 53(g3)
+                              Store 57(cout) 58
+              59:    6(float) Load 13(h3)
+              60:    6(float) Load 53(g3)
+              61:    6(float) FAdd 59 60
+              62:     28(ptr) AccessChain 25(gl_FragCoord) 27
+              63:    6(float) Load 62
+              64:    6(float) FAdd 61 63
+                              ReturnValue 64
+                              FunctionEnd
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index a9c9ba2..b14179e 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,4 +1,8 @@
 spv.viewportArray2.tesc
+error: SPIRV-Tools Validation Errors
+error: Vulkan spec allows BuiltIn ViewportIndex to be used only with Vertex, TessellationEvaluation, Geometry, or Fragment execution models. ID <0> (OpStore) is referencing ID <22> (OpVariable) which is decorated with BuiltIn ViewportIndex in function <4> called with execution model TessellationControl.
+  OpStore %gl_ViewportIndex %int_2
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 25
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out b/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out b/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
old mode 100755
new mode 100644
index b6936f8..9141e4e
--- a/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -1,4 +1,8 @@
 spv.vulkan110.int16.frag
+error: SPIRV-Tools Validation Errors
+error: Capability Float16 is not allowed by Vulkan 1.1 specification (or requires extension)
+  OpCapability Float16
+
 // Module Version 10300
 // Generated by (magic number): 80007
 // Id's are bound by 523
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
old mode 100755
new mode 100644
index 3cd93d5..68633e1
--- a/Test/baseResults/spv.xfb.vert.out
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -1,4 +1,8 @@
 spv.xfb.vert
+error: SPIRV-Tools Validation Errors
+error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability TransformFeedback
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 16
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
old mode 100755
new mode 100644
index a8551a1..6dc3987
--- a/Test/baseResults/spv.xfb2.vert.out
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -1,4 +1,8 @@
 spv.xfb2.vert
+error: SPIRV-Tools Validation Errors
+error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability TransformFeedback
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 35
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
old mode 100755
new mode 100644
index 0218847..1d526aa
--- a/Test/baseResults/spv.xfb3.vert.out
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -1,4 +1,8 @@
 spv.xfb3.vert
+error: SPIRV-Tools Validation Errors
+error: Capability TransformFeedback is not allowed by Vulkan 1.0 specification (or requires extension)
+  OpCapability TransformFeedback
+
 // Module Version 10000
 // Generated by (magic number): 80007
 // Id's are bound by 35
diff --git a/Test/baseResults/stringToDouble.vert.out b/Test/baseResults/stringToDouble.vert.out
old mode 100755
new mode 100644
index b4c073c..a799d0a
--- a/Test/baseResults/stringToDouble.vert.out
+++ b/Test/baseResults/stringToDouble.vert.out
@@ -1,5 +1,6 @@
 stringToDouble.vert
 Shader version: 460
+Requested GL_KHX_shader_explicit_arithmetic_types_float16
 0:? Sequence
 0:3  Function Definition: main( ( global void)
 0:3    Function Parameters: 
@@ -440,10 +441,80 @@
 0:95          Constant:
 0:95            5.7089907708238e+45
 0:97      Sequence
-0:97        move second child to first child ( temp double)
-0:97          'pi' ( temp double)
+0:97        move second child to first child ( temp float)
+0:97          'pi1' ( temp float)
 0:97          Constant:
 0:97            3.141593
+0:98      Sequence
+0:98        move second child to first child ( temp float)
+0:98          'pi2' ( temp float)
+0:98          Constant:
+0:98            3.141593
+0:99      Sequence
+0:99        move second child to first child ( temp float)
+0:99          'pi3' ( temp float)
+0:99          Constant:
+0:99            3.141593
+0:101      Sequence
+0:101        move second child to first child ( temp double)
+0:101          'dpi1' ( temp double)
+0:101          Constant:
+0:101            3.141593
+0:102      Sequence
+0:102        move second child to first child ( temp double)
+0:102          'dpi2' ( temp double)
+0:102          Constant:
+0:102            3.141593
+0:103      Sequence
+0:103        move second child to first child ( temp double)
+0:103          'dpi3' ( temp double)
+0:103          Constant:
+0:103            3.141593
+0:105      Sequence
+0:105        move second child to first child ( temp float)
+0:105          'dfpi1' ( temp float)
+0:105          Constant:
+0:105            3.141593
+0:106      Sequence
+0:106        move second child to first child ( temp float)
+0:106          'dfpi2' ( temp float)
+0:106          Constant:
+0:106            3.141593
+0:107      Sequence
+0:107        move second child to first child ( temp float)
+0:107          'dfpi3' ( temp float)
+0:107          Constant:
+0:107            3.141593
+0:109      Sequence
+0:109        move second child to first child ( temp double)
+0:109          'lfpi1' ( temp double)
+0:109          Constant:
+0:109            3.141593
+0:110      Sequence
+0:110        move second child to first child ( temp double)
+0:110          'lfpi2' ( temp double)
+0:110          Constant:
+0:110            3.141593
+0:111      Sequence
+0:111        move second child to first child ( temp double)
+0:111          'lfpi3' ( temp double)
+0:111          Constant:
+0:111            3.141593
+0:113      Sequence
+0:113        move second child to first child ( temp double)
+0:113          'hfpi1' ( temp double)
+0:113          Constant:
+0:113            3.141593
+0:114      Sequence
+0:114        move second child to first child ( temp double)
+0:114          'hfpi2' ( temp double)
+0:114          Constant:
+0:114            3.141593
+0:115      Sequence
+0:115        move second child to first child ( temp double)
+0:115          'hfpi3' ( temp double)
+0:115          Constant:
+0:115            3.141593
 0:?   Linker Objects
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
@@ -453,6 +524,7 @@
 
 
 Shader version: 460
+Requested GL_KHX_shader_explicit_arithmetic_types_float16
 0:? Sequence
 0:3  Function Definition: main( ( global void)
 0:3    Function Parameters: 
@@ -893,10 +965,80 @@
 0:95          Constant:
 0:95            5.7089907708238e+45
 0:97      Sequence
-0:97        move second child to first child ( temp double)
-0:97          'pi' ( temp double)
+0:97        move second child to first child ( temp float)
+0:97          'pi1' ( temp float)
 0:97          Constant:
 0:97            3.141593
+0:98      Sequence
+0:98        move second child to first child ( temp float)
+0:98          'pi2' ( temp float)
+0:98          Constant:
+0:98            3.141593
+0:99      Sequence
+0:99        move second child to first child ( temp float)
+0:99          'pi3' ( temp float)
+0:99          Constant:
+0:99            3.141593
+0:101      Sequence
+0:101        move second child to first child ( temp double)
+0:101          'dpi1' ( temp double)
+0:101          Constant:
+0:101            3.141593
+0:102      Sequence
+0:102        move second child to first child ( temp double)
+0:102          'dpi2' ( temp double)
+0:102          Constant:
+0:102            3.141593
+0:103      Sequence
+0:103        move second child to first child ( temp double)
+0:103          'dpi3' ( temp double)
+0:103          Constant:
+0:103            3.141593
+0:105      Sequence
+0:105        move second child to first child ( temp float)
+0:105          'dfpi1' ( temp float)
+0:105          Constant:
+0:105            3.141593
+0:106      Sequence
+0:106        move second child to first child ( temp float)
+0:106          'dfpi2' ( temp float)
+0:106          Constant:
+0:106            3.141593
+0:107      Sequence
+0:107        move second child to first child ( temp float)
+0:107          'dfpi3' ( temp float)
+0:107          Constant:
+0:107            3.141593
+0:109      Sequence
+0:109        move second child to first child ( temp double)
+0:109          'lfpi1' ( temp double)
+0:109          Constant:
+0:109            3.141593
+0:110      Sequence
+0:110        move second child to first child ( temp double)
+0:110          'lfpi2' ( temp double)
+0:110          Constant:
+0:110            3.141593
+0:111      Sequence
+0:111        move second child to first child ( temp double)
+0:111          'lfpi3' ( temp double)
+0:111          Constant:
+0:111            3.141593
+0:113      Sequence
+0:113        move second child to first child ( temp double)
+0:113          'hfpi1' ( temp double)
+0:113          Constant:
+0:113            3.141593
+0:114      Sequence
+0:114        move second child to first child ( temp double)
+0:114          'hfpi2' ( temp double)
+0:114          Constant:
+0:114            3.141593
+0:115      Sequence
+0:115        move second child to first child ( temp double)
+0:115          'hfpi3' ( temp double)
+0:115          Constant:
+0:115            3.141593
 0:?   Linker Objects
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
diff --git a/Test/baseResults/test.conf b/Test/baseResults/test.conf
index f156c5c..cff7716 100644
--- a/Test/baseResults/test.conf
+++ b/Test/baseResults/test.conf
@@ -81,6 +81,15 @@
 MaxCullDistances 8
 MaxCombinedClipAndCullDistances 8
 MaxSamples 4
+MaxMeshOutputVerticesNV 256
+MaxMeshOutputPrimitivesNV 512
+MaxMeshWorkGroupSizeX_NV 32
+MaxMeshWorkGroupSizeY_NV 1
+MaxMeshWorkGroupSizeZ_NV 1
+MaxTaskWorkGroupSizeX_NV 32
+MaxTaskWorkGroupSizeY_NV 1
+MaxTaskWorkGroupSizeZ_NV 1
+MaxMeshViewCountNV 4
 nonInductiveForLoops 1
 whileLoops 1
 doWhileLoops 1
diff --git a/Test/baseResults/tokenPaste.vert.out b/Test/baseResults/tokenPaste.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index e46345c..c81ed25 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -15,8 +15,6 @@
 ERROR: 0:21: 'sampler3D' : sampler-constructor cannot make an array of samplers 
 ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
 ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must match type and dimensionality of constructor type 
-ERROR: 0:24: 'sampler2D' : sampler-constructor second argument presence of shadow must match constructor presence of shadow 
-ERROR: 0:25: 'sampler2DShadow' : sampler-constructor second argument presence of shadow must match constructor presence of shadow 
 ERROR: 0:28: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: s2D
 ERROR: 0:29: 'sampler3D' : sampler-constructor cannot make an array of samplers 
 ERROR: 0:29: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: s3d
@@ -56,7 +54,7 @@
 ERROR: 0:102: 'noise2' : no matching overloaded function found 
 ERROR: 0:103: 'noise3' : no matching overloaded function found 
 ERROR: 0:104: 'noise4' : no matching overloaded function found 
-ERROR: 55 compilation errors.  No code generated.
+ERROR: 53 compilation errors.  No code generated.
 
 
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
diff --git a/Test/bump b/Test/bump
index f23be33..03df632 100755
--- a/Test/bump
+++ b/Test/bump
@@ -1,2 +1,3 @@
+#!/usr/bin/env bash
 cp localResults/* baseResults/
 
diff --git a/Test/compoundsuffix.vert.glsl b/Test/compoundsuffix.vert.glsl
old mode 100755
new mode 100644
diff --git a/Test/constFold.frag b/Test/constFold.frag
old mode 100755
new mode 100644
diff --git a/Test/cppBad2.vert b/Test/cppBad2.vert
old mode 100755
new mode 100644
diff --git a/Test/cppPassMacroName.frag b/Test/cppPassMacroName.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.amend.frag b/Test/hlsl.amend.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.boolConv.vert b/Test/hlsl.boolConv.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.charLit.vert b/Test/hlsl.charLit.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.flattenSubset.frag b/Test/hlsl.flattenSubset.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.flattenSubset2.frag b/Test/hlsl.flattenSubset2.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.hlslOffset.vert b/Test/hlsl.hlslOffset.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.implicitBool.frag b/Test/hlsl.implicitBool.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.inf.vert b/Test/hlsl.inf.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index 41b5f54..ffa3c25 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -42,6 +42,7 @@
     float r021 = ddy_coarse(inF0);
     float r022 = ddy_fine(inF0);
     float r023 = degrees(inF0);
+    float r024 = distance(inF0, inF1);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
diff --git a/Test/hlsl.logicalConvert.frag b/Test/hlsl.logicalConvert.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.multiEntry.vert b/Test/hlsl.multiEntry.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.multiReturn.frag b/Test/hlsl.multiReturn.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.namespace.frag b/Test/hlsl.namespace.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.nonstaticMemberFunction.frag b/Test/hlsl.nonstaticMemberFunction.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.partialInit.frag b/Test/hlsl.partialInit.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.pp.expand.frag b/Test/hlsl.pp.expand.frag
index 765d17e..d5318a0 100755
--- a/Test/hlsl.pp.expand.frag
+++ b/Test/hlsl.pp.expand.frag
@@ -14,4 +14,5 @@
 

 void main()

 {

+    "a string"

 }

diff --git a/Test/hlsl.scalarCast.vert b/Test/hlsl.scalarCast.vert
old mode 100755
new mode 100644
diff --git a/Test/hlsl.shapeConvRet.frag b/Test/hlsl.shapeConvRet.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.shift.per-set.frag b/Test/hlsl.shift.per-set.frag
old mode 100644
new mode 100755
index 9c29f9d..d7c0243
--- a/Test/hlsl.shift.per-set.frag
+++ b/Test/hlsl.shift.per-set.frag
@@ -6,7 +6,7 @@
 Texture1D <float4> t1 : register(t1, space1);
 Texture2D <float4> t2 : register(t2, space1);
 Texture3D <float4> t3 : register(t1, space2);
-
+Texture3D <float4> ts6 : register(t1, space6);
 StructuredBuffer<float4> t4 : register(t1, space3);
 
 ByteAddressBuffer t5 : register(t2, space3);
@@ -54,6 +54,7 @@
 
     cb1;
     tb1;
+    ts6;
 
     return 0;
 }
diff --git a/Test/hlsl.staticFuncInit.frag b/Test/hlsl.staticFuncInit.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.staticMemberFunction.frag b/Test/hlsl.staticMemberFunction.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.string.frag b/Test/hlsl.string.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.structIoFourWay.frag b/Test/hlsl.structIoFourWay.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.structStructName.frag b/Test/hlsl.structStructName.frag
old mode 100755
new mode 100644
diff --git a/Test/hlsl.this.frag b/Test/hlsl.this.frag
old mode 100755
new mode 100644
diff --git a/Test/nosuffix b/Test/nosuffix
old mode 100755
new mode 100644
diff --git a/Test/preprocessor.bad_arg.vert b/Test/preprocessor.bad_arg.vert
old mode 100755
new mode 100644
diff --git a/Test/runtests b/Test/runtests
index 390acfc..d36f3a8 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -56,7 +56,7 @@
 # entry point renaming tests
 #
 echo Running entry-point renaming tests
-$EXE -i -H -V -D -Od -e main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+$EXE -i -H -V -D -Od --entry-point main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
 diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
 
 #
@@ -112,7 +112,7 @@
 # Testing per-descriptor-set IO map shift
 #
 echo 'Testing per-descriptor-set IO map shift'
-$EXE -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+$EXE -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
 diff -b $BASEDIR/hlsl.shift.per-set.frag.out $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
 
 #
@@ -130,13 +130,13 @@
 # Testing debug information
 #
 echo Testing SPV Debug Information
-$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf \
+$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
 diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
-$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
+$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
 diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
-$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
+$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
      --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
 diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
 
diff --git a/Test/runtimeArray.vert b/Test/runtimeArray.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage-int.frag b/Test/spv.16bitstorage-int.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage-uint.frag b/Test/spv.16bitstorage-uint.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage.frag b/Test/spv.16bitstorage.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage_Error-int.frag b/Test/spv.16bitstorage_Error-int.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage_Error-uint.frag b/Test/spv.16bitstorage_Error-uint.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.16bitstorage_Error.frag b/Test/spv.16bitstorage_Error.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.8bitstorage-int.frag b/Test/spv.8bitstorage-int.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.8bitstorage-uint.frag b/Test/spv.8bitstorage-uint.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.8bitstorage_Error-int.frag b/Test/spv.8bitstorage_Error-int.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.8bitstorage_Error-uint.frag b/Test/spv.8bitstorage_Error-uint.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.AnyHitShader.rahit b/Test/spv.AnyHitShader.rahit
new file mode 100644
index 0000000..88e5601
--- /dev/null
+++ b/Test/spv.AnyHitShader.rahit
@@ -0,0 +1,26 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+	uvec2 v0 = gl_LaunchIDNVX;
+	uvec2 v1 = gl_LaunchSizeNVX;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNVX;
+	vec3 v5 = gl_WorldRayOriginNVX;
+	vec3 v6 = gl_WorldRayDirectionNVX;
+	vec3 v7 = gl_ObjectRayOriginNVX;
+	vec3 v8 = gl_ObjectRayDirectionNVX;
+	float v9 = gl_RayTminNVX;
+	float v10 = gl_RayTmaxNVX;
+	float v11 = gl_HitTNVX;
+	uint v12 = gl_HitKindNVX;
+	mat4x3 v13 = gl_ObjectToWorldNVX;
+	mat4x3 v14 = gl_WorldToObjectNVX;
+	incomingPayload = vec4(0.5f);
+	if (v2 == 1)
+	    ignoreIntersectionNVX();
+	else
+	    terminateRayNVX();
+}
diff --git a/Test/spv.AnyHitShader_Errors.rahit b/Test/spv.AnyHitShader_Errors.rahit
new file mode 100644
index 0000000..a0f72e6
--- /dev/null
+++ b/Test/spv.AnyHitShader_Errors.rahit
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeNVX in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    traceNVX(accNV, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.ClosestHitShader.rchit b/Test/spv.ClosestHitShader.rchit
new file mode 100644
index 0000000..498d0d8
--- /dev/null
+++ b/Test/spv.ClosestHitShader.rchit
@@ -0,0 +1,24 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 localPayload;
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+	uvec2 v0 = gl_LaunchIDNVX;
+	uvec2 v1 = gl_LaunchSizeNVX;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNVX;
+	vec3 v5 = gl_WorldRayOriginNVX;
+	vec3 v6 = gl_WorldRayDirectionNVX;
+	vec3 v7 = gl_ObjectRayOriginNVX;
+	vec3 v8 = gl_ObjectRayDirectionNVX;
+	float v9 = gl_RayTminNVX;
+	float v10 = gl_RayTmaxNVX;
+	float v11 = gl_HitTNVX;
+	uint v12 = gl_HitKindNVX;
+	mat4x3 v13 = gl_ObjectToWorldNVX;
+	mat4x3 v14 = gl_WorldToObjectNVX;
+	traceNVX(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.ClosestHitShader_Errors.rchit b/Test/spv.ClosestHitShader_Errors.rchit
new file mode 100644
index 0000000..6c1f6e4
--- /dev/null
+++ b/Test/spv.ClosestHitShader_Errors.rchit
@@ -0,0 +1,12 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeNVX in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage 
+    terminateRayNVX();
+    ignoreIntersectionNVX();
+}
diff --git a/Test/spv.IntersectShader.rint b/Test/spv.IntersectShader.rint
new file mode 100644
index 0000000..226ff06
--- /dev/null
+++ b/Test/spv.IntersectShader.rint
@@ -0,0 +1,21 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 iAttr;
+void main()
+{
+	uvec2 v0 = gl_LaunchIDNVX;
+	uvec2 v1 = gl_LaunchSizeNVX;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNVX;
+	vec3 v5 = gl_WorldRayOriginNVX;
+	vec3 v6 = gl_WorldRayDirectionNVX;
+	vec3 v7 = gl_ObjectRayOriginNVX;
+	vec3 v8 = gl_ObjectRayDirectionNVX;
+	float v9 = gl_RayTminNVX;
+	float v10 = gl_RayTmaxNVX;
+	mat4x3 v11 = gl_ObjectToWorldNVX;
+	mat4x3 v12 = gl_WorldToObjectNVX;
+	iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+	reportIntersectionNVX(0.5, 1U);
+}
diff --git a/Test/spv.IntersectShader_Errors.rint b/Test/spv.IntersectShader_Errors.rint
new file mode 100644
index 0000000..90278d8
--- /dev/null
+++ b/Test/spv.IntersectShader_Errors.rint
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+rayPayloadInNVX vec4 payloadIn;                             // ERROR, rayPayloadIn unsupported in this stage
+rayPayloadNVX vec4 payload;                                 // ERROR, rayPayload unsuppoted in this stage
+uniform accelerationStructureNVX accNV;
+void main()
+{
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    traceNVX(accNV, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported
+}
diff --git a/Test/spv.MissShader.rmiss b/Test/spv.MissShader.rmiss
new file mode 100644
index 0000000..6daaa01
--- /dev/null
+++ b/Test/spv.MissShader.rmiss
@@ -0,0 +1,17 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 localPayload;
+layout(location = 1) rayPayloadInNVX vec4 incomingPayload;
+void main()
+{
+	uvec2 v0 = gl_LaunchIDNVX;
+	uvec2 v1 = gl_LaunchSizeNVX;
+	vec3 v2 = gl_WorldRayOriginNVX;
+	vec3 v3 = gl_WorldRayDirectionNVX;
+	vec3 v4 = gl_ObjectRayOriginNVX;
+	vec3 v5 = gl_ObjectRayDirectionNVX;
+	float v6 = gl_RayTminNVX;
+	float v7 = gl_RayTmaxNVX;
+	traceNVX(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.MissShader_Errors.rmiss b/Test/spv.MissShader_Errors.rmiss
new file mode 100644
index 0000000..a45cb8d
--- /dev/null
+++ b/Test/spv.MissShader_Errors.rmiss
@@ -0,0 +1,16 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               // ERROR, hitattributeNVX unsupported in this stage 
+void main()
+{
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexNVX;                     // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldNVX;                       // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectNVX;                       // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    ignoreIntersectionNVX();                                // ERROR, unsupported builtin in stage
+    terminateRayNVX();                                      // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.RayConstants.rgen b/Test/spv.RayConstants.rgen
new file mode 100644
index 0000000..61ff39e
--- /dev/null
+++ b/Test/spv.RayConstants.rgen
@@ -0,0 +1,15 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 payload;
+void main()
+{
+    const uint rayFlags = gl_RayFlagsNoneNVX | gl_RayFlagsOpaqueNVX |
+                          gl_RayFlagsNoOpaqueNVX | gl_RayFlagsTerminateOnFirstHitNVX |
+                          gl_RayFlagsSkipClosestHitShaderNVX | gl_RayFlagsCullBackFacingTrianglesNVX |
+                          gl_RayFlagsCullFrontFacingTrianglesNVX | gl_RayFlagsCullOpaqueNVX | 
+                          gl_RayFlagsCullNoOpaqueNVX;
+
+    const int payloadId = 1;
+    traceNVX(accNV, rayFlags, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, payloadId);
+}
diff --git a/Test/spv.RayGenShader.rgen b/Test/spv.RayGenShader.rgen
new file mode 100644
index 0000000..19f16ce
--- /dev/null
+++ b/Test/spv.RayGenShader.rgen
@@ -0,0 +1,19 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureNVX accNV;
+layout(location = 0) rayPayloadNVX vec4 payload;
+layout(shaderRecordNVX) buffer block
+{
+	float arr[4];
+	vec4 pad;
+};
+void main()
+{
+    uint lx = gl_LaunchIDNVX.x;
+    uint ly = gl_LaunchIDNVX.y;
+    uint sx = gl_LaunchSizeNVX.x;
+    uint sy = gl_LaunchSizeNVX.y;
+    traceNVX(accNV, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
+    arr[3] = 1.0f;
+    pad = payload;
+}
diff --git a/Test/spv.RayGenShader_Errors.rgen b/Test/spv.RayGenShader_Errors.rgen
new file mode 100644
index 0000000..73175b8
--- /dev/null
+++ b/Test/spv.RayGenShader_Errors.rgen
@@ -0,0 +1,40 @@
+#version 460
+#extension GL_NVX_raytracing : enable
+hitAttributeNVX vec4 payload;                               // ERROR, hitattributeNVX unsupported in this stage 
+rayPayloadInNVX vec4 payloadIn;                             // ERROR, rayPayloadIn unsupported in this stage
+layout(shaderRecordNVX) uniform ublock                      // ERROR, shaderRecordNVX unsupported on uniform blocks
+{
+    float a;
+};
+layout(binding = 0, shaderRecordNVX) buffer bblock {        // ERROR, binding unsupported on shaderRecordNVX blocks
+    float b;
+};
+layout(set = 0, shaderRecordNVX) buffer bblock2 {           // ERROR, set unsupported on shaderRecordNVX blocks
+    float c;
+};
+layout(shaderRecordNVX) buffer bblock3 {
+    float d;
+};
+layout(shaderRecordNVX) buffer bblock4 {                    // ERROR, cannot have more than one shaderRecordNVX block
+    float e;
+};
+void main()
+{
+    accelerationStructureNVX a = 0;
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexNVX;                     // ERROR, unsupported builtin in stage
+    vec3 e4 = gl_WorldRayOriginNVX;                         // ERROR, unsupported builtin in stage
+    vec3 e5 = gl_WorldRayDirectionNVX;                      // ERROR, unsupported builtin in stage
+    vec3 e6 = gl_ObjectRayOriginNVX;                        // ERROR, unsupported builtin in stage
+    vec3 e7 = gl_ObjectRayDirectionNVX;                     // ERROR, unsupported builtin in stage
+    float e8 = gl_RayTminNVX;                               // ERROR, unsupported builtin in stage
+    float e9 = gl_RayTmaxNVX;                               // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldNVX;                       // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectNVX;                       // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTNVX;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindNVX;                              // ERROR, unsupported builtin in stage
+    reportIntersectionNVX(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    ignoreIntersectionNVX();                                // ERROR, unsupported builtin in stage
+    terminateRayNVX();                                      // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.computeShaderDerivatives.comp b/Test/spv.computeShaderDerivatives.comp
new file mode 100644
index 0000000..884f14d
--- /dev/null
+++ b/Test/spv.computeShaderDerivatives.comp
@@ -0,0 +1,106 @@
+#version 450
+#extension GL_NV_compute_shader_derivatives : require
+
+layout (local_size_x = 2, local_size_y = 4) in;
+layout(derivative_group_quadsNV) in;
+
+buffer block {
+  float fDerivativeX;
+  float fDerivativeY;
+  float fDerivativeWidth;
+  float fCoarseDerivativeX;
+  float fCoarseDerivativeY;
+  float fCoarseDerivativeWidth;
+  float fFineDerivativeX;
+  float fFineDerivativeY;
+  float fFineDerivativeWidth;
+  
+  float fX;
+  float fY;
+  
+  
+  vec2 v2DerivativeX;
+  vec2 v2DerivativeY;
+  vec2 v2DerivativeWidth;
+  vec2 v2CoarseDerivativeX;
+  vec2 v2CoarseDerivativeY;
+  vec2 v2CoarseDerivativeWidth;
+  vec2 v2FineDerivativeX;
+  vec2 v2FineDerivativeY;
+  vec2 v2FineDerivativeWidth;
+  
+  vec2 v2X;
+  vec2 v2Y;
+  
+  
+  vec3 v3DerivativeX;
+  vec3 v3DerivativeY;
+  vec3 v3DerivativeWidth;
+  vec3 v3CoarseDerivativeX;
+  vec3 v3CoarseDerivativeY;
+  vec3 v3CoarseDerivativeWidth;
+  vec3 v3FineDerivativeX;
+  vec3 v3FineDerivativeY;
+  vec3 v3FineDerivativeWidth;
+  
+  vec3 v3X;
+  vec3 v3Y;
+  
+  
+  vec4 v4DerivativeX;
+  vec4 v4DerivativeY;
+  vec4 v4DerivativeWidth;
+  vec4 v4CoarseDerivativeX;
+  vec4 v4CoarseDerivativeY;
+  vec4 v4CoarseDerivativeWidth;
+  vec4 v4FineDerivativeX;
+  vec4 v4FineDerivativeY;
+  vec4 v4FineDerivativeWidth;
+  
+  vec4 v4X;
+  vec4 v4Y;
+};
+
+void main(){
+    fDerivativeX = dFdx(fX);
+    fDerivativeY = dFdy(fY);
+    fDerivativeWidth = fwidth(fX);
+    fCoarseDerivativeX = dFdxCoarse(fX);
+    fCoarseDerivativeY = dFdyCoarse(fY);
+    fCoarseDerivativeWidth = fwidthCoarse(fX);
+    fFineDerivativeX = dFdxFine(fX);
+    fFineDerivativeY = dFdyFine(fY);
+    fFineDerivativeWidth = fwidthFine(fX);
+
+    v2DerivativeX = dFdx(v2X);
+    v2DerivativeY = dFdy(v2Y);
+    v2DerivativeWidth = fwidth(v2X);
+    v2CoarseDerivativeX = dFdxCoarse(v2X);
+    v2CoarseDerivativeY = dFdyCoarse(v2Y);
+    v2CoarseDerivativeWidth = fwidthCoarse(v2X);
+    v2FineDerivativeX = dFdxFine(v2X);
+    v2FineDerivativeY = dFdyFine(v2Y);
+    v2FineDerivativeWidth = fwidthFine(v2X);
+
+
+    v3DerivativeX = dFdx(v3X);
+    v3DerivativeY = dFdy(v3Y);
+    v3DerivativeWidth = fwidth(v3X);
+    v3CoarseDerivativeX = dFdxCoarse(v3X);
+    v3CoarseDerivativeY = dFdyCoarse(v3Y);
+    v3CoarseDerivativeWidth = fwidthCoarse(v3X);
+    v3FineDerivativeX = dFdxFine(v3X);
+    v3FineDerivativeY = dFdyFine(v3Y);
+    v3FineDerivativeWidth = fwidthFine(v3X);
+
+
+    v4DerivativeX = dFdx(v4X);
+    v4DerivativeY = dFdy(v4Y);
+    v4DerivativeWidth = fwidth(v4X);
+    v4CoarseDerivativeX = dFdxCoarse(v4X);
+    v4CoarseDerivativeY = dFdyCoarse(v4Y);
+    v4CoarseDerivativeWidth = fwidthCoarse(v4X);
+    v4FineDerivativeX = dFdxFine(v4X);
+    v4FineDerivativeY = dFdyFine(v4Y);
+    v4FineDerivativeWidth = fwidthFine(v4X);
+}
diff --git a/Test/spv.computeShaderDerivatives2.comp b/Test/spv.computeShaderDerivatives2.comp
new file mode 100644
index 0000000..f964fdd
--- /dev/null
+++ b/Test/spv.computeShaderDerivatives2.comp
@@ -0,0 +1,106 @@
+#version 320 es
+#extension GL_NV_compute_shader_derivatives : require
+
+layout (local_size_x = 2, local_size_y = 4) in;
+layout(derivative_group_linearNV) in;
+
+buffer block {
+  float fDerivativeX;
+  float fDerivativeY;
+  float fDerivativeWidth;
+  float fCoarseDerivativeX;
+  float fCoarseDerivativeY;
+  float fCoarseDerivativeWidth;
+  float fFineDerivativeX;
+  float fFineDerivativeY;
+  float fFineDerivativeWidth;
+  
+  float fX;
+  float fY;
+  
+  
+  vec2 v2DerivativeX;
+  vec2 v2DerivativeY;
+  vec2 v2DerivativeWidth;
+  vec2 v2CoarseDerivativeX;
+  vec2 v2CoarseDerivativeY;
+  vec2 v2CoarseDerivativeWidth;
+  vec2 v2FineDerivativeX;
+  vec2 v2FineDerivativeY;
+  vec2 v2FineDerivativeWidth;
+  
+  vec2 v2X;
+  vec2 v2Y;
+  
+  
+  vec3 v3DerivativeX;
+  vec3 v3DerivativeY;
+  vec3 v3DerivativeWidth;
+  vec3 v3CoarseDerivativeX;
+  vec3 v3CoarseDerivativeY;
+  vec3 v3CoarseDerivativeWidth;
+  vec3 v3FineDerivativeX;
+  vec3 v3FineDerivativeY;
+  vec3 v3FineDerivativeWidth;
+  
+  vec3 v3X;
+  vec3 v3Y;
+  
+  
+  vec4 v4DerivativeX;
+  vec4 v4DerivativeY;
+  vec4 v4DerivativeWidth;
+  vec4 v4CoarseDerivativeX;
+  vec4 v4CoarseDerivativeY;
+  vec4 v4CoarseDerivativeWidth;
+  vec4 v4FineDerivativeX;
+  vec4 v4FineDerivativeY;
+  vec4 v4FineDerivativeWidth;
+  
+  vec4 v4X;
+  vec4 v4Y;
+};
+
+void main(){
+    fDerivativeX = dFdx(fX);
+    fDerivativeY = dFdy(fY);
+    fDerivativeWidth = fwidth(fX);
+    fCoarseDerivativeX = dFdxCoarse(fX);
+    fCoarseDerivativeY = dFdyCoarse(fY);
+    fCoarseDerivativeWidth = fwidthCoarse(fX);
+    fFineDerivativeX = dFdxFine(fX);
+    fFineDerivativeY = dFdyFine(fY);
+    fFineDerivativeWidth = fwidthFine(fX);
+
+    v2DerivativeX = dFdx(v2X);
+    v2DerivativeY = dFdy(v2Y);
+    v2DerivativeWidth = fwidth(v2X);
+    v2CoarseDerivativeX = dFdxCoarse(v2X);
+    v2CoarseDerivativeY = dFdyCoarse(v2Y);
+    v2CoarseDerivativeWidth = fwidthCoarse(v2X);
+    v2FineDerivativeX = dFdxFine(v2X);
+    v2FineDerivativeY = dFdyFine(v2Y);
+    v2FineDerivativeWidth = fwidthFine(v2X);
+
+
+    v3DerivativeX = dFdx(v3X);
+    v3DerivativeY = dFdy(v3Y);
+    v3DerivativeWidth = fwidth(v3X);
+    v3CoarseDerivativeX = dFdxCoarse(v3X);
+    v3CoarseDerivativeY = dFdyCoarse(v3Y);
+    v3CoarseDerivativeWidth = fwidthCoarse(v3X);
+    v3FineDerivativeX = dFdxFine(v3X);
+    v3FineDerivativeY = dFdyFine(v3Y);
+    v3FineDerivativeWidth = fwidthFine(v3X);
+
+
+    v4DerivativeX = dFdx(v4X);
+    v4DerivativeY = dFdy(v4Y);
+    v4DerivativeWidth = fwidth(v4X);
+    v4CoarseDerivativeX = dFdxCoarse(v4X);
+    v4CoarseDerivativeY = dFdyCoarse(v4Y);
+    v4CoarseDerivativeWidth = fwidthCoarse(v4X);
+    v4FineDerivativeX = dFdxFine(v4X);
+    v4FineDerivativeY = dFdyFine(v4Y);
+    v4FineDerivativeWidth = fwidthFine(v4X);
+}
diff --git a/Test/spv.fragmentShaderBarycentric.frag b/Test/spv.fragmentShaderBarycentric.frag
new file mode 100644
index 0000000..c923aca
--- /dev/null
+++ b/Test/spv.fragmentShaderBarycentric.frag
@@ -0,0 +1,15 @@
+#version 450
+#extension GL_NV_fragment_shader_barycentric : require
+
+layout(location = 0) pervertexNV in vertices {
+    float attrib;
+    } v[];   
+      
+layout(location = 1) out float value;
+      
+void main () {
+    value = (gl_BaryCoordNV.x * v[0].attrib +
+             gl_BaryCoordNV.y * v[1].attrib +
+             gl_BaryCoordNV.z * v[2].attrib);
+
+}
diff --git a/Test/spv.fragmentShaderBarycentric2.frag b/Test/spv.fragmentShaderBarycentric2.frag
new file mode 100644
index 0000000..4682e4e
--- /dev/null
+++ b/Test/spv.fragmentShaderBarycentric2.frag
@@ -0,0 +1,15 @@
+#version 320 es
+#extension GL_NV_fragment_shader_barycentric : require
+
+precision highp float;
+
+layout(location = 0) pervertexNV in float vertexIDs[3];
+      
+layout(location = 1) out float value;
+      
+void main () {
+    value = (gl_BaryCoordNoPerspNV.x * vertexIDs[0] +
+             gl_BaryCoordNoPerspNV.y * vertexIDs[1] +
+             gl_BaryCoordNoPerspNV.z * vertexIDs[2]);
+
+}
diff --git a/Test/spv.functionNestedOpaque.vert b/Test/spv.functionNestedOpaque.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.hlslOffsets.vert b/Test/spv.hlslOffsets.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.memoryScopeSemantics.comp b/Test/spv.memoryScopeSemantics.comp
new file mode 100644
index 0000000..c03c123
--- /dev/null
+++ b/Test/spv.memoryScopeSemantics.comp
@@ -0,0 +1,61 @@
+#version 450

+#extension GL_KHR_memory_scope_semantics : require

+#extension GL_ARB_gpu_shader_int64 : require

+

+#pragma use_vulkan_memory_model

+

+shared uint value;

+shared int atomi;

+shared uint atomu;

+layout(binding = 0, r32ui) workgroupcoherent uniform uimage2D imageu;

+layout(binding = 1, r32i) volatile coherent uniform iimage2D imagei;

+layout(binding = 5, r32i) nonprivate uniform iimage2D imagej[2];

+layout (binding = 2) buffer BufferU { workgroupcoherent uint x; } bufferu;

+layout (binding = 3) coherent buffer BufferI { uint x; } bufferi;

+struct A { uint x[2]; };

+layout (binding = 4) volatile buffer BufferJ { subgroupcoherent A a; } bufferj[2];

+layout (binding = 6) nonprivate uniform sampler2D samp[2];

+layout (binding = 7) nonprivate uniform BufferK { uint x; } bufferk;

+shared uint64_t atomu64;

+shared int64_t atomi64;

+

+

+void main()

+{

+    int origi = atomicAdd(atomi, 3, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease);

+    uint origu = atomicAnd(atomu, value);

+    origi = atomicLoad(atomi, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);

+    atomicStore(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease);

+    origi = imageAtomicLoad(imagei, ivec2(0,0), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);

+    origu = imageAtomicAdd(imageu, ivec2(0,0), 3u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);

+    imageAtomicStore(imageu, ivec2(0,0), 4u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease);

+    origu = atomicOr(atomu, 7u, gl_ScopeDevice, 0, 0);

+    origu = atomicXor(atomu, 7u, gl_ScopeDevice, 0, 0);

+    origu = atomicMin(atomu, value, gl_ScopeDevice, 0, 0);

+    origi = atomicMax(atomi, 7, gl_ScopeDevice, 0, 0);

+    origi = atomicExchange(atomi, origi, gl_ScopeDevice, 0, 0);

+    origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire);

+    atomicAdd(bufferu.x, 1, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease);

+    controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire);

+    controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, 0, 0);

+

+    uint y;

+    y = bufferu.x;

+    bufferu.x = y;

+    y = bufferi.x;

+    y = bufferj[0].a.x[1];

+    bufferi.x = y;

+    bufferj[0].a.x[1] = y;

+    bufferj[0].a = bufferj[1].a;

+    bufferi.x = bufferk.x;

+

+    imageLoad(imagei, ivec2(0,0));

+    imageLoad(imagej[0], ivec2(0,0));

+    imageStore(imagej[1], ivec2(0,0), ivec4(0,0,0,0));

+    texture(samp[0], vec2(0,0));

+

+    atomu64 = atomicMax(atomu64, uint64_t(7), gl_ScopeDevice, 0, 0);

+    atomicCompSwap(atomi64, int64_t(10), int64_t(atomu64), gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire);

+}

+

diff --git a/Test/spv.memoryScopeSemantics_Error.comp b/Test/spv.memoryScopeSemantics_Error.comp
new file mode 100644
index 0000000..4e18b2e
--- /dev/null
+++ b/Test/spv.memoryScopeSemantics_Error.comp
@@ -0,0 +1,28 @@
+#version 450

+#extension GL_KHR_memory_scope_semantics : require

+

+

+shared uint value;

+shared int atomi;

+shared uint atomu;

+layout(binding = 0, r32ui) workgroupcoherent uniform uimage2D imageu;

+layout(binding = 1, r32i) coherent uniform iimage2D imagei;

+layout (binding = 2) buffer BufferU { workgroupcoherent uint x; } bufferu;

+layout (binding = 3) subgroupcoherent buffer BufferI { uint x; } bufferi;

+

+void main()

+{

+    atomicStore(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);

+    int origi = imageAtomicLoad(imagei, ivec2(0,0), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease);

+    atomicStore(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquireRelease);

+    atomicStore(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_StorageSemanticsBuffer);

+    origi = imageAtomicLoad(imagei, ivec2(0,0), gl_ScopeDevice, gl_SemanticsAcquire, gl_SemanticsAcquire);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, 0);

+    memoryBarrier(gl_ScopeWorkgroup, 0, gl_SemanticsRelease);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsRelease | gl_SemanticsAcquire);

+    atomicAdd(atomu, value, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsAcquire);

+    uint origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeVisible);

+    memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable);

+}

+

diff --git a/Test/spv.meshShaderBuiltins.mesh b/Test/spv.meshShaderBuiltins.mesh
new file mode 100644
index 0000000..8adff3d
--- /dev/null
+++ b/Test/spv.meshShaderBuiltins.mesh
@@ -0,0 +1,63 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    gl_MeshVerticesNV[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesNV[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesNV[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesNV[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesNV[iid+1].gl_Position = gl_MeshVerticesNV[iid].gl_Position;
+    gl_MeshVerticesNV[iid+1].gl_PointSize = gl_MeshVerticesNV[iid].gl_PointSize;
+    gl_MeshVerticesNV[iid+1].gl_ClipDistance[3] = gl_MeshVerticesNV[iid].gl_ClipDistance[3];
+    gl_MeshVerticesNV[iid+1].gl_CullDistance[2] = gl_MeshVerticesNV[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesNV[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesNV[iid].gl_Layer = 7;
+    gl_MeshPrimitivesNV[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesNV[iid].gl_ViewportMask[0] = 9;
+
+    BARRIER();
+
+    gl_MeshPrimitivesNV[iid+1].gl_PrimitiveID = gl_MeshPrimitivesNV[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesNV[iid+1].gl_Layer = gl_MeshPrimitivesNV[iid].gl_Layer;
+    gl_MeshPrimitivesNV[iid+1].gl_ViewportIndex = gl_MeshPrimitivesNV[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesNV[iid+1].gl_ViewportMask[0] = gl_MeshPrimitivesNV[iid].gl_ViewportMask[0];
+
+    BARRIER();
+
+    // should truncate 257 -> 1
+    gl_PrimitiveIndicesNV[0] = 257;
+    gl_PrimitiveIndicesNV[gid] = gl_PrimitiveIndicesNV[gid-1];
+
+    // writes 4 indices at offset gl_DrawID
+    writePackedPrimitiveIndices4x8NV(gl_DrawID, 0x01020304);
+
+    gl_PrimitiveCountNV = MAX_PRIM * 3;
+
+    BARRIER();
+}
diff --git a/Test/spv.meshShaderPerViewBuiltins.mesh b/Test/spv.meshShaderPerViewBuiltins.mesh
new file mode 100644
index 0000000..54fb744
--- /dev/null
+++ b/Test/spv.meshShaderPerViewBuiltins.mesh
@@ -0,0 +1,42 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of per-view builtin attributes
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
+
+    gl_MeshVerticesNV[iid].gl_PositionPerViewNV[viewID]          = vec4(1.0, 2.0, 3.0, 4.0);
+    gl_MeshVerticesNV[iid].gl_ClipDistancePerViewNV[viewID][2]   = 5.0;
+    gl_MeshVerticesNV[iid].gl_CullDistancePerViewNV[viewID][3]   = 6.0;
+    gl_MeshPrimitivesNV[iid].gl_LayerPerViewNV[viewID]           = 7;
+    gl_MeshPrimitivesNV[iid].gl_ViewportMaskPerViewNV[viewID][0] = 8;
+
+    BARRIER();
+
+    gl_MeshVerticesNV[iid+1].gl_PositionPerViewNV[viewID]          = gl_MeshVerticesNV[iid].gl_PositionPerViewNV[viewID];
+    gl_MeshVerticesNV[iid+1].gl_ClipDistancePerViewNV[viewID][2]   = gl_MeshVerticesNV[iid].gl_ClipDistancePerViewNV[viewID][2];
+    gl_MeshVerticesNV[iid+1].gl_CullDistancePerViewNV[viewID][3]   = gl_MeshVerticesNV[iid].gl_CullDistancePerViewNV[viewID][3];
+    gl_MeshPrimitivesNV[iid+1].gl_LayerPerViewNV[viewID]           = gl_MeshPrimitivesNV[iid].gl_LayerPerViewNV[viewID];
+    gl_MeshPrimitivesNV[iid+1].gl_ViewportMaskPerViewNV[viewID][0] = gl_MeshPrimitivesNV[iid].gl_ViewportMaskPerViewNV[viewID][0];
+
+    BARRIER();
+}
+
diff --git a/Test/spv.meshShaderPerViewUserDefined.mesh b/Test/spv.meshShaderPerViewUserDefined.mesh
new file mode 100644
index 0000000..4a316eb
--- /dev/null
+++ b/Test/spv.meshShaderPerViewUserDefined.mesh
@@ -0,0 +1,56 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+#define MAX_VIEWS gl_MaxMeshViewCountNV
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of user-defined per-view attributes
+
+// mix of single-view and per-view attributes
+layout(location=0) out block {
+    perprimitiveNV perviewNV vec4 color1[][3];  // Implicitly sized
+    perprimitiveNV vec4 color2[3];
+    perviewNV vec4 color3[MAX_VIEWS][3];          // Explicitly sized
+    vec4 color4;
+} b[];
+
+// per-view block
+perviewNV layout(location=10) out perviewBlock {
+    perprimitiveNV vec4 color5[];              // Implicitly sized
+    perprimitiveNV vec4 color6[MAX_VIEWS][3];  // Explicitly sized
+    vec4 color7[][3];                            // Implicitly sized
+    vec4 color8[MAX_VIEWS];                      // Explicitly sized
+} b2[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS];
+
+    b[iid].color1[viewID][2] = vec4(1.0);
+    b[iid].color2[1]         = vec4(2.0);
+    b[iid].color3[viewID][2] = vec4(3.0);
+    b[iid].color4            = vec4(4.0);
+
+    BARRIER();
+
+    b2[iid].color5[viewID]    = vec4(5.0);
+    b2[iid].color6[viewID][1] = vec4(6.0);
+    b2[iid].color7[viewID][2] = vec4(7.0);
+    b2[iid].color8[viewID]    = vec4(8.0);
+
+    BARRIER();
+}
+
diff --git a/Test/spv.meshShaderSharedMem.mesh b/Test/spv.meshShaderSharedMem.mesh
new file mode 100644
index 0000000..b9d2f6d
--- /dev/null
+++ b/Test/spv.meshShaderSharedMem.mesh
@@ -0,0 +1,39 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of shared memory in mesh shaders:
+
+writeonly uniform image2D uni_image;
+uniform block0 {
+    uint    uni_value;
+};
+
+shared vec4 mem[10];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i+uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+}
diff --git a/Test/spv.meshShaderTaskMem.mesh b/Test/spv.meshShaderTaskMem.mesh
new file mode 100644
index 0000000..5ce5bed
--- /dev/null
+++ b/Test/spv.meshShaderTaskMem.mesh
@@ -0,0 +1,41 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of task memory in mesh shaders:
+
+taskNV in taskBlock {
+    float gid1[2];
+    vec4 gid2;
+} mytask;
+
+buffer bufferBlock {
+    float gid3[2];
+    vec4 gid4;
+} mybuf;
+
+layout(location=0) out outBlock {
+    float gid5;
+    vec4 gid6;
+} myblk[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+
+    myblk[iid].gid5 = mytask.gid1[1] + mybuf.gid3[1];
+    myblk[iid].gid6 = mytask.gid2    + mybuf.gid4;
+}
diff --git a/Test/spv.meshShaderUserDefined.mesh b/Test/spv.meshShaderUserDefined.mesh
new file mode 100644
index 0000000..8b0937d
--- /dev/null
+++ b/Test/spv.meshShaderUserDefined.mesh
@@ -0,0 +1,59 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of user defined interface out blocks:
+
+// per-primitive block
+perprimitiveNV layout(location=0) out myblock {
+    float f;
+    float fArr[4];
+    vec3 pos;
+    vec4 posArr[4];
+    mat4 m;
+    mat3 mArr[2];
+} blk[];
+
+// per-vertex block
+layout(location=20) out myblock2 {
+    float f;
+    vec4 pos;
+    mat4 m;
+} blk2[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    blk[iid].f               = 11.0;
+    blk[iid+1].fArr[gid]     = blk[iid].f;
+    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
+    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
+    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
+    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
+    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);
+
+    BARRIER();
+
+    blk2[iid].f           = blk2[iid-1].f + 20.0;
+    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
+    blk2[iid+1].m[gid]    = blk2[iid].pos;
+    blk2[iid+1].m[gid][2] = 29.0;
+    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];
+
+    BARRIER();
+}
diff --git a/Test/spv.meshTaskShader.task b/Test/spv.meshTaskShader.task
new file mode 100644
index 0000000..c12b3bd
--- /dev/null
+++ b/Test/spv.meshTaskShader.task
@@ -0,0 +1,49 @@
+#version 450
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_NV_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// test use of task memory in task shaders:
+taskNV out Task {
+    vec2 dummy;
+    vec2 submesh[3];
+} mytask;
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+
+    BARRIER();
+
+    // 3. set task count
+    gl_TaskCountNV = 3;
+}
diff --git a/Test/spv.multiStructFuncall.frag b/Test/spv.multiStructFuncall.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.offsets.frag b/Test/spv.offsets.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.shaderImageFootprint.frag b/Test/spv.shaderImageFootprint.frag
new file mode 100644
index 0000000..efde370
--- /dev/null
+++ b/Test/spv.shaderImageFootprint.frag
@@ -0,0 +1,123 @@
+#version 450
+
+#extension GL_NV_shader_texture_footprint : require
+
+
+layout (location = 0) in vec2 P2;
+layout (location = 2) in vec3 P3;
+layout (location = 3) in flat int granularity;
+layout (location = 4) in float lodClamp;
+layout (location = 5) in float lod;
+layout (location = 6) in vec2 dx;
+layout (location = 8) in vec2 dy;
+layout (location = 9) in float bias;
+
+uniform sampler2D sample2D;
+uniform sampler3D sample3D;
+
+buffer result2D {
+    bool ret2D;
+    uvec2 anchor2D;
+    uvec2 offset2D;
+    uvec2 mask2D;
+    uint lod2D;
+    uint granularity2D;
+};
+
+buffer result3D {
+    bool ret3D;
+    uvec3 anchor3D;
+    uvec3 offset3D;
+    uvec2 mask3D;
+    uint lod3D;
+    uint granularity3D;
+};
+
+void main() {
+ gl_TextureFootprint2DNV fp2D;
+ gl_TextureFootprint3DNV fp3D;
+ 
+ ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D);
+ anchor2D = fp2D.anchor;
+ offset2D = fp2D.offset;
+ mask2D = fp2D.mask;
+ lod2D = fp2D.lod;
+ granularity2D = fp2D.granularity;
+ 
+ ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D, bias);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D, bias);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret2D = textureFootprintLodNV(sample2D, P2, lod, granularity, true, fp2D);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret2D = textureFootprintGradNV(sample2D, P2, dx, dy, granularity, true, fp2D);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret2D = textureFootprintGradClampNV(sample2D, P2, dx, dy, lodClamp, granularity, true, fp2D);
+ anchor2D += fp2D.anchor;
+ offset2D += fp2D.offset;
+ mask2D += fp2D.mask;
+ lod2D += fp2D.lod;
+ granularity2D += fp2D.granularity;
+ 
+ ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D);
+ anchor3D = fp3D.anchor;
+ offset3D = fp3D.offset;
+ mask3D = fp3D.mask;
+ lod3D = fp3D.lod;
+ granularity3D = fp3D.granularity;
+ 
+ ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D, bias);
+ anchor3D += fp3D.anchor;
+ offset3D += fp3D.offset;
+ mask3D += fp3D.mask;
+ lod3D += fp3D.lod;
+ granularity3D += fp3D.granularity;
+ 
+ ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D);
+ anchor3D += fp3D.anchor;
+ offset3D += fp3D.offset;
+ mask3D += fp3D.mask;
+ lod3D += fp3D.lod;
+ granularity3D += fp3D.granularity;
+ 
+ ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D, bias);
+ anchor3D += fp3D.anchor;
+ offset3D += fp3D.offset;
+ mask3D += fp3D.mask;
+ lod3D += fp3D.lod;
+ granularity3D += fp3D.granularity;
+ 
+ ret3D = textureFootprintLodNV(sample3D, P3, lod, granularity, true, fp3D);
+ anchor3D += fp3D.anchor;
+ offset3D += fp3D.offset;
+ mask3D += fp3D.mask;
+ lod3D += fp3D.lod;
+ granularity3D += fp3D.granularity;
+}
\ No newline at end of file
diff --git a/Test/spv.shadingRate.frag b/Test/spv.shadingRate.frag
new file mode 100644
index 0000000..8fbd4ba
--- /dev/null
+++ b/Test/spv.shadingRate.frag
@@ -0,0 +1,11 @@
+#version 450
+
+#extension GL_NV_shading_rate_image : require
+
+layout (location = 0) out vec2 FragmentSize;
+layout (location = 2) out int InvocationsPerPixel;
+
+void main () {
+    FragmentSize = gl_FragmentSizeNV;
+    InvocationsPerPixel = gl_InvocationsPerPixelNV;
+}
\ No newline at end of file
diff --git a/Test/spv.shortCircuit.frag b/Test/spv.shortCircuit.frag
old mode 100755
new mode 100644
diff --git a/Test/spv.subgroupPartitioned.comp b/Test/spv.subgroupPartitioned.comp
old mode 100755
new mode 100644
diff --git a/Test/spv.targetOpenGL.vert b/Test/spv.targetOpenGL.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.targetVulkan.vert b/Test/spv.targetVulkan.vert
old mode 100755
new mode 100644
diff --git a/Test/spv.unit1.frag b/Test/spv.unit1.frag
new file mode 100644
index 0000000..d84f821
--- /dev/null
+++ b/Test/spv.unit1.frag
@@ -0,0 +1,16 @@
+#version 460
+
+float f;
+float a1;
+
+float foo();
+
+out float cout;
+
+void main()
+{
+    f = 10;
+    float g = foo();
+    f += g;
+    f += gl_FragCoord.y;
+}
\ No newline at end of file
diff --git a/Test/spv.unit2.frag b/Test/spv.unit2.frag
new file mode 100644
index 0000000..d17e7e7
--- /dev/null
+++ b/Test/spv.unit2.frag
@@ -0,0 +1,17 @@
+#version 410
+// a different version number makes different id's for the same shared symbol
+
+float a2;
+float f;
+
+float bar();
+
+out float cout;
+in float cin;
+
+float foo()
+{
+    float h2 = 2 * f + cin;
+    float g2 = bar();
+    return h2 + g2 + gl_FragCoord.y;
+}
\ No newline at end of file
diff --git a/Test/spv.unit3.frag b/Test/spv.unit3.frag
new file mode 100644
index 0000000..4c96597
--- /dev/null
+++ b/Test/spv.unit3.frag
@@ -0,0 +1,15 @@
+#version 460
+
+float f;
+float h3 = 3.0;
+
+out float cout;
+in float cin;
+
+float bar()
+{
+    h3 *= f;
+    float g3 = 2 * h3;
+    cout = g3;
+    return h3 + g3 + gl_FragCoord.y;
+}
diff --git a/Test/spv.vulkan100.subgroupPartitioned.comp b/Test/spv.vulkan100.subgroupPartitioned.comp
old mode 100755
new mode 100644
diff --git a/Test/stringToDouble.vert b/Test/stringToDouble.vert
old mode 100755
new mode 100644
index 2f21302..5a7024d
--- a/Test/stringToDouble.vert
+++ b/Test/stringToDouble.vert
@@ -1,5 +1,5 @@
 #version 460
-//#pragma glslang_binary_double_output
+#extension GL_KHX_shader_explicit_arithmetic_types_float16 : enable
 void main()
 {
     float w1   = 00000.000;
@@ -94,5 +94,23 @@
     double b44 = 5708990770823839207320493820740630171355185151999e-3;
     double b45 = 5708990770823839207320493820740630171355185152001e-3;
 
-    double pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
+    float pi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f;
+    float pi2 = 3.14159265358979f;
+    float pi3 = 3.141592653589793f;
+
+    double dpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
+    double dpi2 = 3.14159265358979;
+    double dpi3 = 3.141592653589793;
+
+    float dfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f;
+    float dfpi2 = 3.14159265358979f;
+    float dfpi3 = 3.141592653589793f;
+
+    double lfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679LF;
+    double lfpi2 = 3.14159265358979Lf;
+    double lfpi3 = 3.141592653589793lF;
+
+    double hfpi1 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679hF;
+    double hfpi2 = 3.14159265358979hF;
+    double hfpi3 = 3.141592653589793hf;
 }
diff --git a/Test/tokenLength.vert b/Test/tokenLength.vert
old mode 100755
new mode 100644
diff --git a/Test/vulkan.frag b/Test/vulkan.frag
index 74a5aa1..46c14f3 100644
--- a/Test/vulkan.frag
+++ b/Test/vulkan.frag
@@ -21,8 +21,8 @@
     sampler3D[4](t3d5, sA[2]);    // ERROR, can't make array

     sampler2D(i2d, s);            // ERROR, image instead of texture

     sampler2D(t3d[1], s);         // ERROR, 3D not 2D

-    sampler2D(t2d, sShadow);      // ERROR, shadow mismatch

-    sampler2DShadow(t2d, s);      // ERROR, shadow mismatch

+    sampler2D(t2d, sShadow);

+    sampler2DShadow(t2d, s);

 }

 

 sampler2D s2D = sampler2D(t2d, s);            // ERROR, no sampler constructor

diff --git a/build_overrides/glslang.gni b/build_overrides/glslang.gni
new file mode 100644
index 0000000..500578c
--- /dev/null
+++ b/build_overrides/glslang.gni
@@ -0,0 +1,37 @@
+# Copyright (C) 2018 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# These are variables that are overridable by projects that include glslang.
+
+# The path to glslang dependencies.
+glslang_spirv_tools_dir = "//Externals/spirv-tools"
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
old mode 100755
new mode 100644
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 46fe159..fc3a19f 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -62,6 +62,10 @@
     EbtStruct,
     EbtBlock,
 
+#ifdef NV_EXTENSIONS
+    EbtAccStructNV,
+#endif
+
     // HLSL types that live only temporarily.
     EbtString,
 
@@ -88,6 +92,12 @@
     EvqBuffer,        // read/write, shared with app
     EvqShared,        // compute shader's read/write 'shared' qualifier
 
+#ifdef NV_EXTENSIONS
+    EvqPayloadNV,
+    EvqPayloadInNV,
+    EvqHitAttrNV,
+#endif
+
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
     EvqOut,           // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter
@@ -227,6 +237,32 @@
     EbvPositionPerViewNV,
     EbvViewportMaskPerViewNV,
     EbvFragFullyCoveredNV,
+    EbvFragmentSizeNV,
+    EbvInvocationsPerPixelNV,
+    // raytracing
+    EbvLaunchIdNV,
+    EbvLaunchSizeNV,
+    EbvInstanceCustomIndexNV,
+    EbvWorldRayOriginNV,
+    EbvWorldRayDirectionNV,
+    EbvObjectRayOriginNV,
+    EbvObjectRayDirectionNV,
+    EbvRayTminNV,
+    EbvRayTmaxNV,
+    EbvHitTNV,
+    EbvHitKindNV,
+    EbvObjectToWorldNV,
+    EbvWorldToObjectNV,
+    EbvBaryCoordNV,
+    EbvBaryCoordNoPerspNV,
+    EbvTaskCountNV,
+    EbvPrimitiveCountNV,
+    EbvPrimitiveIndicesNV,
+    EbvClipDistancePerViewNV,
+    EbvCullDistancePerViewNV,
+    EbvLayerPerViewNV,
+    EbvMeshViewCountNV,
+    EbvMeshViewIndicesNV,
 #endif 
 
     // HLSL built-ins that live only temporarily, until they get remapped
@@ -273,6 +309,11 @@
     case EvqPointCoord:     return "gl_PointCoord";  break;
     case EvqFragColor:      return "fragColor";      break;
     case EvqFragDepth:      return "gl_FragDepth";   break;
+#ifdef NV_EXTENSIONS
+    case EvqPayloadNV:      return "rayPayloadNVX";   break;
+    case EvqPayloadInNV:    return "rayPayloadInNVX"; break;
+    case EvqHitAttrNV:      return "hitAttributeNVX"; break;
+#endif
     default:                return "unknown qualifier";
     }
 }
@@ -365,6 +406,31 @@
     case EbvPositionPerViewNV:          return "PositionPerViewNV";
     case EbvViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
     case EbvFragFullyCoveredNV:         return "FragFullyCoveredNV";
+    case EbvFragmentSizeNV:             return "FragmentSizeNV";
+    case EbvInvocationsPerPixelNV:      return "InvocationsPerPixelNV";
+    case EbvLaunchIdNV:                 return "LaunchIdNVX";
+    case EbvLaunchSizeNV:               return "LaunchSizeNVX";
+    case EbvInstanceCustomIndexNV:      return "InstanceCustomIndexNVX";
+    case EbvWorldRayOriginNV:           return "WorldRayOriginNVX";
+    case EbvWorldRayDirectionNV:        return "WorldRayDirectionNVX";
+    case EbvObjectRayOriginNV:          return "ObjectRayOriginNVX";
+    case EbvObjectRayDirectionNV:       return "ObjectRayDirectionNVX";
+    case EbvRayTminNV:                  return "ObjectRayTminNVX";
+    case EbvRayTmaxNV:                  return "ObjectRayTmaxNVX";
+    case EbvHitTNV:                     return "HitTNVX";
+    case EbvHitKindNV:                  return "HitKindNVX";
+    case EbvObjectToWorldNV:            return "ObjectToWorldNVX";
+    case EbvWorldToObjectNV:            return "WorldToObjectNVX";
+    case EbvBaryCoordNV:                return "BaryCoordNV";
+    case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
+    case EbvTaskCountNV:                return "TaskCountNV";
+    case EbvPrimitiveCountNV:           return "PrimitiveCountNV";
+    case EbvPrimitiveIndicesNV:         return "PrimitiveIndicesNV";
+    case EbvClipDistancePerViewNV:      return "ClipDistancePerViewNV";
+    case EbvCullDistancePerViewNV:      return "CullDistancePerViewNV";
+    case EbvLayerPerViewNV:             return "LayerPerViewNV";
+    case EbvMeshViewCountNV:            return "MeshViewCountNV";
+    case EbvMeshViewIndicesNV:          return "MeshViewIndicesNV";
 #endif 
     default:                      return "unknown built-in variable";
     }
diff --git a/glslang/Include/ResourceLimits.h b/glslang/Include/ResourceLimits.h
index 0d07b8c..106b21d 100644
--- a/glslang/Include/ResourceLimits.h
+++ b/glslang/Include/ResourceLimits.h
@@ -133,6 +133,15 @@
     int maxCullDistances;
     int maxCombinedClipAndCullDistances;
     int maxSamples;
+    int maxMeshOutputVerticesNV;
+    int maxMeshOutputPrimitivesNV;
+    int maxMeshWorkGroupSizeX_NV;
+    int maxMeshWorkGroupSizeY_NV;
+    int maxMeshWorkGroupSizeZ_NV;
+    int maxTaskWorkGroupSizeX_NV;
+    int maxTaskWorkGroupSizeY_NV;
+    int maxTaskWorkGroupSizeZ_NV;
+    int maxMeshViewCountNV;
 
     TLimits limits;
 };
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
old mode 100755
new mode 100644
index 2b0c7a1..7793c2c
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -457,11 +457,22 @@
 #ifdef AMD_EXTENSIONS
         explicitInterp = false;
 #endif
+#ifdef NV_EXTENSIONS
+        pervertexNV = false;
+        perPrimitiveNV = false;
+        perViewNV = false;
+        perTaskNV = false;
+#endif
     }
 
     void clearMemory()
     {
         coherent     = false;
+        devicecoherent = false;
+        queuefamilycoherent = false;
+        workgroupcoherent = false;
+        subgroupcoherent  = false;
+        nonprivate = false;
         volatil      = false;
         restrict     = false;
         readonly     = false;
@@ -496,9 +507,20 @@
 #ifdef AMD_EXTENSIONS
     bool explicitInterp : 1;
 #endif
+#ifdef NV_EXTENSIONS
+    bool pervertexNV  : 1;
+    bool perPrimitiveNV : 1;
+    bool perViewNV : 1;
+    bool perTaskNV : 1;
+#endif
     bool patch        : 1;
     bool sample       : 1;
     bool coherent     : 1;
+    bool devicecoherent : 1;
+    bool queuefamilycoherent : 1;
+    bool workgroupcoherent : 1;
+    bool subgroupcoherent  : 1;
+    bool nonprivate   : 1;
     bool volatil      : 1;
     bool restrict     : 1;
     bool readonly     : 1;
@@ -508,8 +530,13 @@
 
     bool isMemory() const
     {
-        return coherent || volatil || restrict || readonly || writeonly;
+        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
     }
+    bool isMemoryQualifierImageAndSSBOOnly() const
+    {
+        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
+    }
+
     bool isInterpolation() const
     {
 #ifdef AMD_EXTENSIONS
@@ -518,15 +545,21 @@
         return flat || smooth || nopersp;
 #endif
     }
+
 #ifdef AMD_EXTENSIONS
     bool isExplicitInterpolation() const
     {
         return explicitInterp;
     }
 #endif
+
     bool isAuxiliary() const
     {
+#ifdef NV_EXTENSIONS
+        return centroid || patch || sample || pervertexNV;
+#else
         return centroid || patch || sample;
+#endif
     }
 
     bool isPipeInput() const
@@ -593,6 +626,33 @@
         }
     }
 
+    bool isPerPrimitive() const
+    {
+#ifdef NV_EXTENSIONS
+        return perPrimitiveNV;
+#else
+        return false;
+#endif
+    }
+
+    bool isPerView() const
+    {
+#ifdef NV_EXTENSIONS
+        return perViewNV;
+#else
+        return false;
+#endif
+    }
+
+    bool isTaskMemory() const
+    {
+#ifdef NV_EXTENSIONS
+        return perTaskNV;
+#else
+        return false;
+#endif
+    }
+
     bool isIo() const
     {
         switch (storage) {
@@ -616,6 +676,22 @@
         }
     }
 
+    // non-built-in symbols that might link between compilation units
+    bool isLinkable() const
+    {
+        switch (storage) {
+        case EvqGlobal:
+        case EvqVaryingIn:
+        case EvqVaryingOut:
+        case EvqUniform:
+        case EvqBuffer:
+        case EvqShared:
+            return true;
+        default:
+            return false;
+        }
+    }
+
     // True if this type of IO is supposed to be arrayed with extra level for per-vertex data
     bool isArrayedIo(EShLanguage language) const
     {
@@ -626,6 +702,13 @@
             return ! patch && (isPipeInput() || isPipeOutput());
         case EShLangTessEvaluation:
             return ! patch && isPipeInput();
+#ifdef NV_EXTENSIONS
+        case EShLangFragment:
+            return pervertexNV && isPipeInput();
+        case EShLangMeshNV:
+            return ! perTaskNV && isPipeOutput();
+#endif
+
         default:
             return false;
         }
@@ -642,6 +725,7 @@
         layoutViewportRelative = false;
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
+        layoutShaderRecordNV = false;
 #endif
 
         clearInterstageLayout();
@@ -675,6 +759,9 @@
                hasAnyLocation() ||
                hasStream() ||
                hasFormat() ||
+#ifdef NV_EXTENSIONS
+               layoutShaderRecordNV ||
+#endif
                layoutPushConstant;
     }
     bool hasLayout() const
@@ -728,6 +815,7 @@
     bool layoutPassthrough;
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
+    bool layoutShaderRecordNV;
 #endif
 
     bool hasUniformLayout() const
@@ -1005,7 +1093,7 @@
     bool pixelCenterInteger;  // fragment shader
     bool originUpperLeft;     // fragment shader
     int invocations;
-    int vertices;             // both for tessellation "vertices" and geometry "max_vertices"
+    int vertices;             // for tessellation "vertices", geometry & mesh "max_vertices"
     TVertexSpacing spacing;
     TVertexOrder order;
     bool pointMode;
@@ -1018,7 +1106,10 @@
     int numViews;             // multiview extenstions
 
 #ifdef NV_EXTENSIONS
-    bool layoutOverrideCoverage;    // true if layout override_coverage set
+    bool layoutOverrideCoverage;        // true if layout override_coverage set
+    bool layoutDerivativeGroupQuads;    // true if layout derivative_group_quadsNV set
+    bool layoutDerivativeGroupLinear;   // true if layout derivative_group_linearNV set
+    int primitives;                     // mesh shader "max_primitives"DerivativeGroupLinear;   // true if layout derivative_group_linearNV set
 #endif
 
     void init()
@@ -1043,7 +1134,10 @@
         blendEquation = false;
         numViews = TQualifier::layoutNotSet;
 #ifdef NV_EXTENSIONS
-        layoutOverrideCoverage = false;
+        layoutOverrideCoverage      = false;
+        layoutDerivativeGroupQuads  = false;
+        layoutDerivativeGroupLinear = false;
+        primitives                  = TQualifier::layoutNotSet;
 #endif
     }
 
@@ -1088,6 +1182,12 @@
 #ifdef NV_EXTENSIONS
         if (src.layoutOverrideCoverage)
             layoutOverrideCoverage = src.layoutOverrideCoverage;
+        if (src.layoutDerivativeGroupQuads)
+            layoutDerivativeGroupQuads = src.layoutDerivativeGroupQuads;
+        if (src.layoutDerivativeGroupLinear)
+            layoutDerivativeGroupLinear = src.layoutDerivativeGroupLinear;
+        if (src.primitives != TQualifier::layoutNotSet)
+            primitives = src.primitives;
 #endif
     }
 };
@@ -1386,7 +1486,11 @@
         }
         return false;
     }
-    virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; }
+    virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint
+#ifdef NV_EXTENSIONS
+        || basicType == EbtAccStructNV
+#endif
+        ; }
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
 
     // "Image" is a superset of "Subpass"
@@ -1574,6 +1678,9 @@
         case EbtSampler:           return "sampler/image";
         case EbtStruct:            return "structure";
         case EbtBlock:             return "block";
+#ifdef NV_EXTENSIONS
+        case EbtAccStructNV:       return "accelerationStructureNVX";
+#endif
         default:                   return "unknown type";
         }
     }
@@ -1669,6 +1776,8 @@
                     appendStr(" layoutSecondaryViewportRelativeOffset=");
                     appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
                 }
+                if (qualifier.layoutShaderRecordNV)
+                    appendStr(" shaderRecordNVX");
 #endif
 
                 appendStr(")");
@@ -1691,12 +1800,32 @@
         if (qualifier.explicitInterp)
             appendStr(" __explicitInterpAMD");
 #endif
+#ifdef NV_EXTENSIONS
+        if (qualifier.pervertexNV)
+            appendStr(" pervertexNV");
+        if (qualifier.perPrimitiveNV)
+            appendStr(" perprimitiveNV");
+        if (qualifier.perViewNV)
+            appendStr(" perviewNV");
+        if (qualifier.perTaskNV)
+            appendStr(" taskNV");
+#endif
         if (qualifier.patch)
             appendStr(" patch");
         if (qualifier.sample)
             appendStr(" sample");
         if (qualifier.coherent)
             appendStr(" coherent");
+        if (qualifier.devicecoherent)
+            appendStr(" devicecoherent");
+        if (qualifier.queuefamilycoherent)
+            appendStr(" queuefamilycoherent");
+        if (qualifier.workgroupcoherent)
+            appendStr(" workgroupcoherent");
+        if (qualifier.subgroupcoherent)
+            appendStr(" subgroupcoherent");
+        if (qualifier.nonprivate)
+            appendStr(" nonprivate");
         if (qualifier.volatil)
             appendStr(" volatile");
         if (qualifier.restrict)
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
old mode 100755
new mode 100644
index 19eb7aa..b770cee
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -592,6 +592,8 @@
     EOpAtomicXor,
     EOpAtomicExchange,
     EOpAtomicCompSwap,
+    EOpAtomicLoad,
+    EOpAtomicStore,
 
     EOpAtomicCounterIncrement, // results in pre-increment value
     EOpAtomicCounterDecrement, // results in post-decrement value
@@ -784,6 +786,8 @@
     EOpImageAtomicXor,
     EOpImageAtomicExchange,
     EOpImageAtomicCompSwap,
+    EOpImageAtomicLoad,
+    EOpImageAtomicStore,
 
     EOpSubpassLoad,
     EOpSubpassLoadMS,
@@ -861,6 +865,16 @@
 #endif
 
     EOpSparseTextureGuardEnd,
+
+#ifdef NV_EXTENSIONS
+    EOpImageFootprintGuardBegin,
+    EOpImageSampleFootprintNV,
+    EOpImageSampleFootprintClampNV,
+    EOpImageSampleFootprintLodNV,
+    EOpImageSampleFootprintGradNV,
+    EOpImageSampleFootprintGradClampNV,
+    EOpImageFootprintGuardEnd,
+#endif
     EOpSamplingGuardEnd,
     EOpTextureGuardEnd,
 
@@ -879,6 +893,13 @@
     EOpFindLSB,
     EOpFindMSB,
 
+#ifdef NV_EXTENSIONS
+    EOpTraceNV,
+    EOpReportIntersectionNV,
+    EOpIgnoreIntersectionNV,
+    EOpTerminateRayNV,
+    EOpWritePackedPrimitiveIndices4x8NV,
+#endif
     //
     // HLSL operations
     //
@@ -1164,6 +1185,7 @@
         constSubtree(nullptr)
           { name = n; }
     virtual int getId() const { return id; }
+    virtual void changeId(int i) { id = i; }
     virtual const TString& getName() const { return name; }
     virtual void traverse(TIntermTraverser*);
     virtual       TIntermSymbol* getAsSymbolNode()       { return this; }
@@ -1243,6 +1265,9 @@
     bool isSampling() const { return op > EOpSamplingGuardBegin && op < EOpSamplingGuardEnd; }
     bool isImage()    const { return op > EOpImageGuardBegin    && op < EOpImageGuardEnd; }
     bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
+#ifdef NV_EXTENSIONS
+    bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; }
+#endif
     bool isSparseImage()   const { return op == EOpSparseImageLoad; }
 
     void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
@@ -1416,6 +1441,23 @@
             cracked.fragMask = true;
             break;
 #endif
+#ifdef NV_EXTENSIONS
+        case EOpImageSampleFootprintNV:
+            break;
+        case EOpImageSampleFootprintClampNV:
+            cracked.lodClamp = true;
+            break;
+        case EOpImageSampleFootprintLodNV:
+            cracked.lod = true;
+            break;
+        case EOpImageSampleFootprintGradNV:
+            cracked.grad = true;
+            break;
+        case EOpImageSampleFootprintGradClampNV:
+            cracked.lodClamp = true;
+            cracked.grad = true;
+            break;
+#endif
         case EOpSubpassLoad:
         case EOpSubpassLoadMS:
             cracked.subpass = true;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 99c1d4f..b595192 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,3 +1,3 @@
 // This header is generated by the make-revision script.
 
-#define GLSLANG_PATCH_LEVEL 2801
+#define GLSLANG_PATCH_LEVEL 2904
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
old mode 100755
new mode 100644
index 26bdced..b33af84
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -184,7 +184,7 @@
                 else if (leftUnionArray[i].getDConst() > 0.0)
                     newConstArray[i].setDConst((double)INFINITY);
                 else if (leftUnionArray[i].getDConst() < 0.0)
-                    newConstArray[i].setDConst((double)-INFINITY);
+                    newConstArray[i].setDConst(-(double)INFINITY);
                 else
                     newConstArray[i].setDConst((double)NAN);
                 break;
@@ -223,8 +223,8 @@
             case EbtInt:
                 if (rightUnionArray[i] == 0)
                     newConstArray[i].setIConst(0x7FFFFFFF);
-                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == -(int)0x80000000)
-                    newConstArray[i].setIConst(-(int)0x80000000);
+                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)-0x80000000ll)
+                    newConstArray[i].setIConst((int)-0x80000000ll);
                 else
                     newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
                 break;
@@ -239,8 +239,8 @@
             case EbtInt64:
                 if (rightUnionArray[i] == 0ll)
                     newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll);
-                else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == -0x8000000000000000ll)
-                    newConstArray[i].setI64Const(-0x8000000000000000ll);
+                else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)-0x8000000000000000ll)
+                    newConstArray[i].setI64Const((long long)-0x8000000000000000ll);
                 else
                     newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const());
                 break;
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
old mode 100755
new mode 100644
index 27bd9ac..cf5b2fe
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -124,6 +124,158 @@
 {
     //============================================================================
     //
+    // Prototypes for built-in functions used repeatly by different shaders
+    //
+    //============================================================================
+
+    //
+    // Derivatives Functions.
+    //
+    TString derivatives (
+        "float dFdx(float p);"
+        "vec2  dFdx(vec2  p);"
+        "vec3  dFdx(vec3  p);"
+        "vec4  dFdx(vec4  p);"
+
+        "float dFdy(float p);"
+        "vec2  dFdy(vec2  p);"
+        "vec3  dFdy(vec3  p);"
+        "vec4  dFdy(vec4  p);"
+
+        "float fwidth(float p);"
+        "vec2  fwidth(vec2  p);"
+        "vec3  fwidth(vec3  p);"
+        "vec4  fwidth(vec4  p);"
+    );
+
+    TString derivativeControls (
+        "float dFdxFine(float p);"
+        "vec2  dFdxFine(vec2  p);"
+        "vec3  dFdxFine(vec3  p);"
+        "vec4  dFdxFine(vec4  p);"
+
+        "float dFdyFine(float p);"
+        "vec2  dFdyFine(vec2  p);"
+        "vec3  dFdyFine(vec3  p);"
+        "vec4  dFdyFine(vec4  p);"
+
+        "float fwidthFine(float p);"
+        "vec2  fwidthFine(vec2  p);"
+        "vec3  fwidthFine(vec3  p);"
+        "vec4  fwidthFine(vec4  p);"
+
+        "float dFdxCoarse(float p);"
+        "vec2  dFdxCoarse(vec2  p);"
+        "vec3  dFdxCoarse(vec3  p);"
+        "vec4  dFdxCoarse(vec4  p);"
+
+        "float dFdyCoarse(float p);"
+        "vec2  dFdyCoarse(vec2  p);"
+        "vec3  dFdyCoarse(vec3  p);"
+        "vec4  dFdyCoarse(vec4  p);"
+
+        "float fwidthCoarse(float p);"
+        "vec2  fwidthCoarse(vec2  p);"
+        "vec3  fwidthCoarse(vec3  p);"
+        "vec4  fwidthCoarse(vec4  p);"
+    );
+
+    TString derivativesAndControl16bits (
+        "float16_t dFdx(float16_t);"
+        "f16vec2   dFdx(f16vec2);"
+        "f16vec3   dFdx(f16vec3);"
+        "f16vec4   dFdx(f16vec4);"
+
+        "float16_t dFdy(float16_t);"
+        "f16vec2   dFdy(f16vec2);"
+        "f16vec3   dFdy(f16vec3);"
+        "f16vec4   dFdy(f16vec4);"
+
+        "float16_t dFdxFine(float16_t);"
+        "f16vec2   dFdxFine(f16vec2);"
+        "f16vec3   dFdxFine(f16vec3);"
+        "f16vec4   dFdxFine(f16vec4);"
+
+        "float16_t dFdyFine(float16_t);"
+        "f16vec2   dFdyFine(f16vec2);"
+        "f16vec3   dFdyFine(f16vec3);"
+        "f16vec4   dFdyFine(f16vec4);"
+
+        "float16_t dFdxCoarse(float16_t);"
+        "f16vec2   dFdxCoarse(f16vec2);"
+        "f16vec3   dFdxCoarse(f16vec3);"
+        "f16vec4   dFdxCoarse(f16vec4);"
+
+        "float16_t dFdyCoarse(float16_t);"
+        "f16vec2   dFdyCoarse(f16vec2);"
+        "f16vec3   dFdyCoarse(f16vec3);"
+        "f16vec4   dFdyCoarse(f16vec4);"
+
+        "float16_t fwidth(float16_t);"
+        "f16vec2   fwidth(f16vec2);"
+        "f16vec3   fwidth(f16vec3);"
+        "f16vec4   fwidth(f16vec4);"
+
+        "float16_t fwidthFine(float16_t);"
+        "f16vec2   fwidthFine(f16vec2);"
+        "f16vec3   fwidthFine(f16vec3);"
+        "f16vec4   fwidthFine(f16vec4);"
+
+        "float16_t fwidthCoarse(float16_t);"
+        "f16vec2   fwidthCoarse(f16vec2);"
+        "f16vec3   fwidthCoarse(f16vec3);"
+        "f16vec4   fwidthCoarse(f16vec4);"
+    );
+
+    TString derivativesAndControl64bits (
+        "float64_t dFdx(float64_t);"
+        "f64vec2   dFdx(f64vec2);"
+        "f64vec3   dFdx(f64vec3);"
+        "f64vec4   dFdx(f64vec4);"
+
+        "float64_t dFdy(float64_t);"
+        "f64vec2   dFdy(f64vec2);"
+        "f64vec3   dFdy(f64vec3);"
+        "f64vec4   dFdy(f64vec4);"
+
+        "float64_t dFdxFine(float64_t);"
+        "f64vec2   dFdxFine(f64vec2);"
+        "f64vec3   dFdxFine(f64vec3);"
+        "f64vec4   dFdxFine(f64vec4);"
+
+        "float64_t dFdyFine(float64_t);"
+        "f64vec2   dFdyFine(f64vec2);"
+        "f64vec3   dFdyFine(f64vec3);"
+        "f64vec4   dFdyFine(f64vec4);"
+
+        "float64_t dFdxCoarse(float64_t);"
+        "f64vec2   dFdxCoarse(f64vec2);"
+        "f64vec3   dFdxCoarse(f64vec3);"
+        "f64vec4   dFdxCoarse(f64vec4);"
+
+        "float64_t dFdyCoarse(float64_t);"
+        "f64vec2   dFdyCoarse(f64vec2);"
+        "f64vec3   dFdyCoarse(f64vec3);"
+        "f64vec4   dFdyCoarse(f64vec4);"
+
+        "float64_t fwidth(float64_t);"
+        "f64vec2   fwidth(f64vec2);"
+        "f64vec3   fwidth(f64vec3);"
+        "f64vec4   fwidth(f64vec4);"
+
+        "float64_t fwidthFine(float64_t);"
+        "f64vec2   fwidthFine(f64vec2);"
+        "f64vec3   fwidthFine(f64vec3);"
+        "f64vec4   fwidthFine(f64vec4);"
+
+        "float64_t fwidthCoarse(float64_t);"
+        "f64vec2   fwidthCoarse(f64vec2);"
+        "f64vec3   fwidthCoarse(f64vec3);"
+        "f64vec4   fwidthCoarse(f64vec4);"
+    );
+
+    //============================================================================
+    //
     // Prototypes for built-in functions seen by both vertex and fragment shaders.
     //
     //============================================================================
@@ -935,56 +1087,102 @@
         commonBuiltins.append(
             "uint atomicAdd(coherent volatile inout uint, uint);"
             " int atomicAdd(coherent volatile inout  int,  int);"
+            "uint atomicAdd(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicAdd(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicMin(coherent volatile inout uint, uint);"
             " int atomicMin(coherent volatile inout  int,  int);"
+            "uint atomicMin(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicMin(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicMax(coherent volatile inout uint, uint);"
             " int atomicMax(coherent volatile inout  int,  int);"
+            "uint atomicMax(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicMax(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicAnd(coherent volatile inout uint, uint);"
             " int atomicAnd(coherent volatile inout  int,  int);"
+            "uint atomicAnd(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicAnd(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicOr (coherent volatile inout uint, uint);"
             " int atomicOr (coherent volatile inout  int,  int);"
+            "uint atomicOr (coherent volatile inout uint, uint, int, int, int);"
+            " int atomicOr (coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicXor(coherent volatile inout uint, uint);"
             " int atomicXor(coherent volatile inout  int,  int);"
+            "uint atomicXor(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicXor(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicExchange(coherent volatile inout uint, uint);"
             " int atomicExchange(coherent volatile inout  int,  int);"
+            "uint atomicExchange(coherent volatile inout uint, uint, int, int, int);"
+            " int atomicExchange(coherent volatile inout  int,  int, int, int, int);"
 
             "uint atomicCompSwap(coherent volatile inout uint, uint, uint);"
             " int atomicCompSwap(coherent volatile inout  int,  int,  int);"
+            "uint atomicCompSwap(coherent volatile inout uint, uint, uint, int, int, int, int, int);"
+            " int atomicCompSwap(coherent volatile inout  int,  int,  int, int, int, int, int, int);"
+
+            "uint atomicLoad(coherent volatile in uint, int, int, int);"
+            " int atomicLoad(coherent volatile in  int, int, int, int);"
+
+            "void atomicStore(coherent volatile out uint, uint, int, int, int);"
+            "void atomicStore(coherent volatile out  int,  int, int, int, int);"
 
             "\n");
     }
 
-#ifdef NV_EXTENSIONS
     if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicMin(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicMin(coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
             "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicMax(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicMax(coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
             "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicAnd(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicAnd(coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
             "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicOr (coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicOr (coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
             "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicXor(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicXor(coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
-            " int64_t atomicAdd(coherent volatile inout int64_t, int64_t);"
-            " int64_t atomicExchange(coherent volatile inout int64_t, int64_t);"
-            " int64_t atomicCompSwap(coherent volatile inout int64_t, int64_t, int64_t);"
+            "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicAdd(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicAdd(coherent volatile inout  int64_t,  int64_t, int, int, int);"
 
+            "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t);"
+            " int64_t atomicExchange(coherent volatile inout  int64_t,  int64_t);"
+            "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t, int, int, int);"
+            " int64_t atomicExchange(coherent volatile inout  int64_t,  int64_t, int, int, int);"
+
+            "uint64_t atomicCompSwap(coherent volatile inout uint64_t, uint64_t, uint64_t);"
+            " int64_t atomicCompSwap(coherent volatile inout  int64_t,  int64_t,  int64_t);"
+            "uint64_t atomicCompSwap(coherent volatile inout uint64_t, uint64_t, uint64_t, int, int, int, int, int);"
+            " int64_t atomicCompSwap(coherent volatile inout  int64_t,  int64_t,  int64_t, int, int, int, int, int);"
+
+            "uint64_t atomicLoad(coherent volatile in uint64_t, int, int, int);"
+            " int64_t atomicLoad(coherent volatile in  int64_t, int, int, int);"
+
+            "void atomicStore(coherent volatile out uint64_t, uint64_t, int, int, int);"
+            "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
             "\n");
     }
-#endif
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 450)) {
@@ -2743,6 +2941,16 @@
 
             "\n"
             );
+#ifdef NV_EXTENSIONS
+        stageBuiltins[EShLangMeshNV].append(
+            "void subgroupMemoryBarrierShared();"
+            "\n"
+            );
+        stageBuiltins[EShLangTaskNV].append(
+            "void subgroupMemoryBarrierShared();"
+            "\n"
+            );
+#endif
     }
 
     if (profile != EEsProfile && version >= 460) {
@@ -3652,6 +3860,42 @@
 
 #endif  // AMD_EXTENSIONS
 
+
+#ifdef NV_EXTENSIONS
+    if ((profile != EEsProfile && version >= 450) || 
+        (profile == EEsProfile && version >= 320)) {
+        commonBuiltins.append(
+            "struct gl_TextureFootprint2DNV {"
+                "uvec2 anchor;"
+                "uvec2 offset;"
+                "uvec2 mask;"
+                "uint lod;"
+                "uint granularity;"
+            "};"
+
+            "struct gl_TextureFootprint3DNV {"
+                "uvec3 anchor;"
+                "uvec3 offset;"
+                "uvec2 mask;"
+                "uint lod;"
+                "uint granularity;"
+            "};"
+            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV);"
+            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV);"
+            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV, float);"
+            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV, float);"
+            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
+            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
+            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV, float);"
+            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV, float);"
+            "bool textureFootprintLodNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
+            "bool textureFootprintLodNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
+            "bool textureFootprintGradNV(sampler2D, vec2, vec2, vec2, int, bool, out gl_TextureFootprint2DNV);"
+            "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
+            "\n");
+    }
+
+#endif // NV_EXTENSIONS
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -4504,52 +4748,8 @@
             "\n");
         }
         if (profile != EEsProfile && version >= 450) {
+            stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
             stageBuiltins[EShLangFragment].append(
-                "float64_t dFdx(float64_t);"
-                "f64vec2   dFdx(f64vec2);"
-                "f64vec3   dFdx(f64vec3);"
-                "f64vec4   dFdx(f64vec4);"
-
-                "float64_t dFdy(float64_t);"
-                "f64vec2   dFdy(f64vec2);"
-                "f64vec3   dFdy(f64vec3);"
-                "f64vec4   dFdy(f64vec4);"
-
-                "float64_t dFdxFine(float64_t);"
-                "f64vec2   dFdxFine(f64vec2);"
-                "f64vec3   dFdxFine(f64vec3);"
-                "f64vec4   dFdxFine(f64vec4);"
-
-                "float64_t dFdyFine(float64_t);"
-                "f64vec2   dFdyFine(f64vec2);"
-                "f64vec3   dFdyFine(f64vec3);"
-                "f64vec4   dFdyFine(f64vec4);"
-
-                "float64_t dFdxCoarse(float64_t);"
-                "f64vec2   dFdxCoarse(f64vec2);"
-                "f64vec3   dFdxCoarse(f64vec3);"
-                "f64vec4   dFdxCoarse(f64vec4);"
-
-                "float64_t dFdyCoarse(float64_t);"
-                "f64vec2   dFdyCoarse(f64vec2);"
-                "f64vec3   dFdyCoarse(f64vec3);"
-                "f64vec4   dFdyCoarse(f64vec4);"
-
-                "float64_t fwidth(float64_t);"
-                "f64vec2   fwidth(f64vec2);"
-                "f64vec3   fwidth(f64vec3);"
-                "f64vec4   fwidth(f64vec4);"
-
-                "float64_t fwidthFine(float64_t);"
-                "f64vec2   fwidthFine(f64vec2);"
-                "f64vec3   fwidthFine(f64vec3);"
-                "f64vec4   fwidthFine(f64vec4);"
-
-                "float64_t fwidthCoarse(float64_t);"
-                "f64vec2   fwidthCoarse(f64vec2);"
-                "f64vec3   fwidthCoarse(f64vec3);"
-                "f64vec4   fwidthCoarse(f64vec4);"
-
                 "float64_t interpolateAtCentroid(float64_t);"
                 "f64vec2   interpolateAtCentroid(f64vec2);"
                 "f64vec3   interpolateAtCentroid(f64vec3);"
@@ -4677,6 +4877,16 @@
         stageBuiltins[EShLangCompute].append(
             "void barrier();"
             );
+#ifdef NV_EXTENSIONS
+    if ((profile != EEsProfile && version >= 450) || esBarrier) {
+        stageBuiltins[EShLangMeshNV].append(
+            "void barrier();"
+            );
+        stageBuiltins[EShLangTaskNV].append(
+            "void barrier();"
+            );
+    }
+#endif
     if ((profile != EEsProfile && version >= 130) || esBarrier)
         commonBuiltins.append(
             "void memoryBarrier();"
@@ -4692,6 +4902,21 @@
             "void groupMemoryBarrier();"
             );
     }
+#ifdef NV_EXTENSIONS
+    if (profile != EEsProfile && version >= 450) {
+        stageBuiltins[EShLangMeshNV].append(
+            "void memoryBarrierShared();"
+            "void groupMemoryBarrier();"
+        );
+        stageBuiltins[EShLangTaskNV].append(
+            "void memoryBarrierShared();"
+            "void groupMemoryBarrier();"
+        );
+    }
+#endif
+
+    commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
+                          "void memoryBarrier(int, int, int);\n");
 
     //============================================================================
     //
@@ -4735,61 +4960,13 @@
             "\n");
     }
 
-    stageBuiltins[EShLangFragment].append(
-        "float dFdx(float p);"
-        "vec2  dFdx(vec2  p);"
-        "vec3  dFdx(vec3  p);"
-        "vec4  dFdx(vec4  p);"
-
-        "float dFdy(float p);"
-        "vec2  dFdy(vec2  p);"
-        "vec3  dFdy(vec3  p);"
-        "vec4  dFdy(vec4  p);"
-
-        "float fwidth(float p);"
-        "vec2  fwidth(vec2  p);"
-        "vec3  fwidth(vec3  p);"
-        "vec4  fwidth(vec4  p);"
-
-        "\n");
+    stageBuiltins[EShLangFragment].append(derivatives);
+    stageBuiltins[EShLangFragment].append("\n");
 
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
-        stageBuiltins[EShLangFragment].append(
-            "float dFdxFine(float p);"
-            "vec2  dFdxFine(vec2  p);"
-            "vec3  dFdxFine(vec3  p);"
-            "vec4  dFdxFine(vec4  p);"
-
-            "float dFdyFine(float p);"
-            "vec2  dFdyFine(vec2  p);"
-            "vec3  dFdyFine(vec3  p);"
-            "vec4  dFdyFine(vec4  p);"
-
-            "float fwidthFine(float p);"
-            "vec2  fwidthFine(vec2  p);"
-            "vec3  fwidthFine(vec3  p);"
-            "vec4  fwidthFine(vec4  p);"
-
-            "\n");
-
-        stageBuiltins[EShLangFragment].append(
-            "float dFdxCoarse(float p);"
-            "vec2  dFdxCoarse(vec2  p);"
-            "vec3  dFdxCoarse(vec3  p);"
-            "vec4  dFdxCoarse(vec4  p);"
-
-            "float dFdyCoarse(float p);"
-            "vec2  dFdyCoarse(vec2  p);"
-            "vec3  dFdyCoarse(vec3  p);"
-            "vec4  dFdyCoarse(vec4  p);"
-
-            "float fwidthCoarse(float p);"
-            "vec2  fwidthCoarse(vec2  p);"
-            "vec3  fwidthCoarse(vec3  p);"
-            "vec4  fwidthCoarse(vec4  p);"
-
-            "\n");
+        stageBuiltins[EShLangFragment].append(derivativeControls);
+        stageBuiltins[EShLangFragment].append("\n");
     }
 
     // GL_OES_shader_multisample_interpolation
@@ -4843,52 +5020,10 @@
 
     // GL_AMD_gpu_shader_half_float
     if (profile != EEsProfile && version >= 450) {
+        stageBuiltins[EShLangFragment].append(derivativesAndControl16bits);
+        stageBuiltins[EShLangFragment].append("\n");
+
         stageBuiltins[EShLangFragment].append(
-            "float16_t dFdx(float16_t);"
-            "f16vec2   dFdx(f16vec2);"
-            "f16vec3   dFdx(f16vec3);"
-            "f16vec4   dFdx(f16vec4);"
-
-            "float16_t dFdy(float16_t);"
-            "f16vec2   dFdy(f16vec2);"
-            "f16vec3   dFdy(f16vec3);"
-            "f16vec4   dFdy(f16vec4);"
-
-            "float16_t dFdxFine(float16_t);"
-            "f16vec2   dFdxFine(f16vec2);"
-            "f16vec3   dFdxFine(f16vec3);"
-            "f16vec4   dFdxFine(f16vec4);"
-
-            "float16_t dFdyFine(float16_t);"
-            "f16vec2   dFdyFine(f16vec2);"
-            "f16vec3   dFdyFine(f16vec3);"
-            "f16vec4   dFdyFine(f16vec4);"
-
-            "float16_t dFdxCoarse(float16_t);"
-            "f16vec2   dFdxCoarse(f16vec2);"
-            "f16vec3   dFdxCoarse(f16vec3);"
-            "f16vec4   dFdxCoarse(f16vec4);"
-
-            "float16_t dFdyCoarse(float16_t);"
-            "f16vec2   dFdyCoarse(f16vec2);"
-            "f16vec3   dFdyCoarse(f16vec3);"
-            "f16vec4   dFdyCoarse(f16vec4);"
-
-            "float16_t fwidth(float16_t);"
-            "f16vec2   fwidth(f16vec2);"
-            "f16vec3   fwidth(f16vec3);"
-            "f16vec4   fwidth(f16vec4);"
-
-            "float16_t fwidthFine(float16_t);"
-            "f16vec2   fwidthFine(f16vec2);"
-            "f16vec3   fwidthFine(f16vec3);"
-            "f16vec4   fwidthFine(f16vec4);"
-
-            "float16_t fwidthCoarse(float16_t);"
-            "f16vec2   fwidthCoarse(f16vec2);"
-            "f16vec3   fwidthCoarse(f16vec3);"
-            "f16vec4   fwidthCoarse(f16vec4);"
-
             "float16_t interpolateAtCentroid(float16_t);"
             "f16vec2   interpolateAtCentroid(f16vec2);"
             "f16vec3   interpolateAtCentroid(f16vec3);"
@@ -4922,6 +5057,50 @@
         }
 #endif
 
+#ifdef NV_EXTENSIONS
+
+    // Builtins for GL_NV_raytracing
+    if (profile != EEsProfile && version >= 460) {
+        stageBuiltins[EShLangRayGenNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+        stageBuiltins[EShLangIntersectNV].append(
+            "bool reportIntersectionNVX(float, uint);"
+            "\n");
+        stageBuiltins[EShLangAnyHitNV].append(
+            "void ignoreIntersectionNVX();"
+            "void terminateRayNVX();"
+            "\n");
+        stageBuiltins[EShLangClosestHitNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+        stageBuiltins[EShLangMissNV].append(
+            "void traceNVX(accelerationStructureNVX,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "\n");
+    }
+
+    //E_SPV_NV_compute_shader_derivatives
+    
+    stageBuiltins[EShLangCompute].append(derivatives);
+    stageBuiltins[EShLangCompute].append(derivativeControls);
+    stageBuiltins[EShLangCompute].append("\n");
+    
+
+    if (profile != EEsProfile && version >= 450) {
+
+        stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
+        stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
+        stageBuiltins[EShLangCompute].append("\n");
+    }
+
+    // Builtins for GL_NV_mesh_shader
+    if (profile != EEsProfile && version >= 450) {
+        stageBuiltins[EShLangMeshNV].append(
+            "void writePackedPrimitiveIndices4x8NV(uint, uint);"
+            "\n");   
+    }
+#endif
+
     //============================================================================
     //
     // Standard Uniforms
@@ -5101,6 +5280,89 @@
             "\n");
     }
 
+#ifdef NV_EXTENSIONS
+    //============================================================================
+    //
+    // Define the interface to the mesh/task shader.
+    //
+    //============================================================================
+
+    if (profile != EEsProfile && version >= 450) {
+        // per-vertex attributes
+        stageBuiltins[EShLangMeshNV].append(
+            "out gl_MeshPerVertexNV {"
+                "vec4 gl_Position;"
+                "float gl_PointSize;"
+                "float gl_ClipDistance[];"
+                "float gl_CullDistance[];"
+                "perviewNV vec4 gl_PositionPerViewNV[];"
+                "perviewNV float gl_ClipDistancePerViewNV[][8];"
+                "perviewNV float gl_CullDistancePerViewNV[][8];"
+            "} gl_MeshVerticesNV[];"
+        );
+
+        // per-primitive attributes
+        stageBuiltins[EShLangMeshNV].append(
+            "perprimitiveNV out gl_MeshPerPrimitiveNV {"
+                "int gl_PrimitiveID;"
+                "int gl_Layer;"
+                "int gl_ViewportIndex;"
+                "int gl_ViewportMask[];"
+                "perviewNV int gl_LayerPerViewNV[];"
+                "perviewNV int gl_ViewportMaskPerViewNV[][1];"
+            "} gl_MeshPrimitivesNV[];"
+        );
+
+        stageBuiltins[EShLangMeshNV].append(
+            "out uint gl_PrimitiveCountNV;"
+            "out uint gl_PrimitiveIndicesNV[];"
+
+            "in uint gl_MeshViewCountNV;"
+            "in uint gl_MeshViewIndicesNV[4];"
+
+            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
+
+            "in highp uvec3 gl_WorkGroupID;"
+            "in highp uvec3 gl_LocalInvocationID;"
+
+            "in highp uvec3 gl_GlobalInvocationID;"
+            "in highp uint gl_LocalInvocationIndex;"
+
+            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
+            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
+
+            "\n");
+
+        if (version >= 460) {
+            stageBuiltins[EShLangMeshNV].append(
+                "in int gl_DrawID;"
+            );
+        }
+
+        stageBuiltins[EShLangTaskNV].append(
+            "out uint gl_TaskCountNV;"
+
+            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
+
+            "in highp uvec3 gl_WorkGroupID;"
+            "in highp uvec3 gl_LocalInvocationID;"
+
+            "in highp uvec3 gl_GlobalInvocationID;"
+            "in highp uint gl_LocalInvocationIndex;"
+
+            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
+            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
+
+            "\n");
+
+        if (version >= 460) {
+            stageBuiltins[EShLangTaskNV].append(
+                "in int gl_DrawID;"
+            );
+        }
+    }
+#endif
+
     //============================================================================
     //
     // Define the interface to the vertex shader.
@@ -5685,6 +5947,14 @@
             stageBuiltins[EShLangFragment].append(
                 "in bool gl_FragFullyCoveredNV;"
                 );
+        if (version >= 450)
+            stageBuiltins[EShLangFragment].append(
+                "flat in ivec2 gl_FragmentSizeNV;"
+                "flat in int   gl_InvocationsPerPixelNV;"
+                "in vec3 gl_BaryCoordNV;"
+                "in vec3 gl_BaryCoordNoPerspNV;"
+                );
+
 #endif
     } else {
         // ES profile
@@ -5726,6 +5996,19 @@
         stageBuiltins[EShLangFragment].append(
             "highp float gl_FragDepthEXT;"       // GL_EXT_frag_depth
             );
+#ifdef NV_EXTENSIONS
+        if (version >= 320)
+            stageBuiltins[EShLangFragment].append(
+                "flat in ivec2 gl_FragmentSizeNV;"
+                "flat in int   gl_InvocationsPerPixelNV;"
+            );
+       if (version >= 320)
+            stageBuiltins[EShLangFragment].append(
+                "in vec3 gl_BaryCoordNV;"
+                "in vec3 gl_BaryCoordNoPerspNV;"
+                );
+#endif
+
     }
     stageBuiltins[EShLangFragment].append("\n");
 
@@ -5758,6 +6041,10 @@
         stageBuiltins[EShLangGeometry]      .append(ballotDecls);
         stageBuiltins[EShLangCompute]       .append(ballotDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
+#ifdef NV_EXTENSIONS
+        stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
+        stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
+#endif
     }
 
     if ((profile != EEsProfile && version >= 140) ||
@@ -5794,19 +6081,143 @@
         stageBuiltins[EShLangGeometry]      .append(ballotDecls);
         stageBuiltins[EShLangCompute]       .append(ballotDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
+#ifdef NV_EXTENSIONS
+        stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
+        stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
+#endif
 
         stageBuiltins[EShLangCompute].append(
             "highp   in uint  gl_NumSubgroups;"
             "highp   in uint  gl_SubgroupID;"
             "\n");
+#ifdef NV_EXTENSIONS
+        stageBuiltins[EShLangMeshNV].append(
+            "highp   in uint  gl_NumSubgroups;"
+            "highp   in uint  gl_SubgroupID;"
+            "\n");
+        stageBuiltins[EShLangTaskNV].append(
+            "highp   in uint  gl_NumSubgroups;"
+            "highp   in uint  gl_SubgroupID;"
+            "\n");
+#endif
     }
 
+#ifdef NV_EXTENSIONS
+    // GL_NV_raytracing
+    if (profile != EEsProfile && version >= 460) {
+
+        const char *constRayFlags =
+            "const uint gl_RayFlagsNoneNVX = 0U;"
+            "const uint gl_RayFlagsOpaqueNVX = 1U;"
+            "const uint gl_RayFlagsNoOpaqueNVX = 2U;"
+            "const uint gl_RayFlagsTerminateOnFirstHitNVX = 4U;"
+            "const uint gl_RayFlagsSkipClosestHitShaderNVX = 8U;"
+            "const uint gl_RayFlagsCullBackFacingTrianglesNVX = 16U;"
+            "const uint gl_RayFlagsCullFrontFacingTrianglesNVX = 32U;"
+            "const uint gl_RayFlagsCullOpaqueNVX = 64U;"
+            "const uint gl_RayFlagsCullNoOpaqueNVX = 128U;"
+            "\n";
+        const char *rayGenDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "\n";
+        const char *intersectDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in     int   gl_PrimitiveID;"
+            "in     int   gl_InstanceID;"
+            "in     int   gl_InstanceCustomIndexNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "in    mat4x3 gl_ObjectToWorldNVX;"
+            "in    mat4x3 gl_WorldToObjectNVX;"
+            "\n";
+        const char *hitDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in     int   gl_PrimitiveID;"
+            "in     int   gl_InstanceID;"
+            "in     int   gl_InstanceCustomIndexNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "in    float  gl_HitTNVX;"
+            "in    uint   gl_HitKindNVX;"
+            "in    mat4x3 gl_ObjectToWorldNVX;"
+            "in    mat4x3 gl_WorldToObjectNVX;"
+            "\n";
+        const char *missDecls =
+            "in    uvec2  gl_LaunchIDNVX;"
+            "in    uvec2  gl_LaunchSizeNVX;"
+            "in    vec3   gl_WorldRayOriginNVX;"
+            "in    vec3   gl_WorldRayDirectionNVX;"
+            "in    vec3   gl_ObjectRayOriginNVX;"
+            "in    vec3   gl_ObjectRayDirectionNVX;"
+            "in    float  gl_RayTminNVX;"
+            "in    float  gl_RayTmaxNVX;"
+            "\n";
+
+        stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
+        stageBuiltins[EShLangRayGenNV].append(constRayFlags);
+
+        stageBuiltins[EShLangIntersectNV].append(intersectDecls);
+
+        stageBuiltins[EShLangAnyHitNV].append(hitDecls);
+
+        stageBuiltins[EShLangClosestHitNV].append(hitDecls);
+        stageBuiltins[EShLangClosestHitNV].append(constRayFlags);
+
+        stageBuiltins[EShLangMissNV].append(missDecls);
+        stageBuiltins[EShLangMissNV].append(constRayFlags);
+    }
+    if ((profile != EEsProfile && version >= 140)) {
+        const char *deviceIndex =
+            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
+            "\n";
+
+        stageBuiltins[EShLangRayGenNV].append(deviceIndex);
+        stageBuiltins[EShLangIntersectNV].append(deviceIndex);
+        stageBuiltins[EShLangAnyHitNV].append(deviceIndex);
+        stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
+        stageBuiltins[EShLangMissNV].append(deviceIndex);
+    }
+#endif
+
     if (version >= 300 /* both ES and non-ES */) {
         stageBuiltins[EShLangFragment].append(
             "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
             "\n");
     }
 
+    if ((profile != EEsProfile && version >= 420) ||
+        (profile == EEsProfile && version >= 310)) {
+        commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
+        commonBuiltins.append("const int gl_ScopeWorkgroup   = 2;\n");
+        commonBuiltins.append("const int gl_ScopeSubgroup    = 3;\n");
+        commonBuiltins.append("const int gl_ScopeInvocation  = 4;\n");
+        commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
+
+        commonBuiltins.append("const int gl_SemanticsRelaxed         = 0x0;\n");
+        commonBuiltins.append("const int gl_SemanticsAcquire         = 0x2;\n");
+        commonBuiltins.append("const int gl_SemanticsRelease         = 0x4;\n");
+        commonBuiltins.append("const int gl_SemanticsAcquireRelease  = 0x8;\n");
+        commonBuiltins.append("const int gl_SemanticsMakeAvailable   = 0x2000;\n");
+        commonBuiltins.append("const int gl_SemanticsMakeVisible     = 0x4000;\n");
+
+        commonBuiltins.append("const int gl_StorageSemanticsNone     = 0x0;\n");
+        commonBuiltins.append("const int gl_StorageSemanticsBuffer   = 0x40;\n");
+        commonBuiltins.append("const int gl_StorageSemanticsShared   = 0x100;\n");
+        commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
+        commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
+    }
+
     // printf("%s\n", commonBuiltins.c_str());
     // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 }
@@ -6031,6 +6442,18 @@
 #ifdef AMD_EXTENSIONS
         }
 #endif
+
+#ifdef NV_EXTENSIONS
+        stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
+        stageBuiltins[EShLangCompute].append(typeName);
+        if (dimMap[sampler.dim] == 1)
+            stageBuiltins[EShLangCompute].append(", float");
+        else {
+            stageBuiltins[EShLangCompute].append(", vec");
+            stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
+        }
+        stageBuiltins[EShLangCompute].append(");\n");
+#endif
     }
 
     //
@@ -6106,23 +6529,44 @@
                 " imageAtomicExchange(volatile coherent "
             };
 
-            for (size_t i = 0; i < numBuiltins; ++i) {
+            // Loop twice to add prototypes with/without scope/semantics
+            for (int j = 0; j < 2; ++j) {
+                for (size_t i = 0; i < numBuiltins; ++i) {
+                    commonBuiltins.append(dataType);
+                    commonBuiltins.append(atomicFunc[i]);
+                    commonBuiltins.append(imageParams);
+                    commonBuiltins.append(", ");
+                    commonBuiltins.append(dataType);
+                    if (j == 1) {
+                        commonBuiltins.append(", int, int, int");
+                    }
+                    commonBuiltins.append(");\n");
+                }
+
                 commonBuiltins.append(dataType);
-                commonBuiltins.append(atomicFunc[i]);
+                commonBuiltins.append(" imageAtomicCompSwap(volatile coherent ");
                 commonBuiltins.append(imageParams);
                 commonBuiltins.append(", ");
                 commonBuiltins.append(dataType);
+                commonBuiltins.append(", ");
+                commonBuiltins.append(dataType);
+                if (j == 1) {
+                    commonBuiltins.append(", int, int, int, int, int");
+                }
                 commonBuiltins.append(");\n");
             }
 
             commonBuiltins.append(dataType);
-            commonBuiltins.append(" imageAtomicCompSwap(volatile coherent ");
+            commonBuiltins.append(" imageAtomicLoad(volatile coherent ");
+            commonBuiltins.append(imageParams);
+            commonBuiltins.append(", int, int, int);\n");
+
+            commonBuiltins.append("void imageAtomicStore(volatile coherent ");
             commonBuiltins.append(imageParams);
             commonBuiltins.append(", ");
             commonBuiltins.append(dataType);
-            commonBuiltins.append(", ");
-            commonBuiltins.append(dataType);
-            commonBuiltins.append(");\n");
+            commonBuiltins.append(", int, int, int);\n");
+
         } else {
             // not int or uint
             // GL_ARB_ES3_1_compatibility
@@ -6490,9 +6934,12 @@
                                             s.append(");\n");
 
                                             // Add to the per-language set of built-ins
-                                            if (bias || lodClamp)
+                                            if (bias || lodClamp) {
                                                 stageBuiltins[EShLangFragment].append(s);
-                                            else
+#ifdef NV_EXTENSIONS
+                                                stageBuiltins[EShLangCompute].append(s);
+#endif
+                                            } else
                                                 commonBuiltins.append(s);
 
                                         }
@@ -7209,6 +7656,31 @@
     }
 #endif
 
+#ifdef NV_EXTENSIONS
+    // SPV_NV_mesh_shader
+    if (profile != EEsProfile && version >= 450) {
+        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
+        s.append(builtInConstant);
+
+        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputPrimitivesNV = %d;", resources.maxMeshOutputPrimitivesNV);
+        s.append(builtInConstant);
+
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxMeshWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxMeshWorkGroupSizeX_NV,
+                                                                                                       resources.maxMeshWorkGroupSizeY_NV,
+                                                                                                       resources.maxMeshWorkGroupSizeZ_NV);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxTaskWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxTaskWorkGroupSizeX_NV,
+                                                                                                       resources.maxTaskWorkGroupSizeY_NV,
+                                                                                                       resources.maxTaskWorkGroupSizeZ_NV);
+        s.append(builtInConstant);
+
+        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshViewCountNV = %d;", resources.maxMeshViewCountNV);
+        s.append(builtInConstant);
+
+        s.append("\n");
+    }
+#endif
+
     s.append("\n");
 }
 
@@ -7392,6 +7864,13 @@
         }
 #endif
 
+#ifdef NV_EXTENSIONS
+        symbolTable.setFunctionExtensions("textureFootprintNV",          1, &E_GL_NV_shader_texture_footprint);
+        symbolTable.setFunctionExtensions("textureFootprintClampNV",     1, &E_GL_NV_shader_texture_footprint);
+        symbolTable.setFunctionExtensions("textureFootprintLodNV",       1, &E_GL_NV_shader_texture_footprint);
+        symbolTable.setFunctionExtensions("textureFootprintGradNV",      1, &E_GL_NV_shader_texture_footprint);
+        symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
+#endif
         // Compatibility variables, vertex only
         if (spvVersion.spv == 0) {
             BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
@@ -7812,6 +8291,30 @@
             symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
             BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
         }
+        if ((profile != EEsProfile && version >= 450) ||
+            (profile == EEsProfile && version >= 320)) {
+            symbolTable.setVariableExtensions("gl_FragmentSizeNV",        1, &E_GL_NV_shading_rate_image);
+            symbolTable.setVariableExtensions("gl_InvocationsPerPixelNV", 1, &E_GL_NV_shading_rate_image);
+            BuiltInVariable("gl_FragmentSizeNV",        EbvFragmentSizeNV, symbolTable);
+            BuiltInVariable("gl_InvocationsPerPixelNV", EbvInvocationsPerPixelNV, symbolTable);
+            symbolTable.setVariableExtensions("gl_BaryCoordNV",        1, &E_GL_NV_fragment_shader_barycentric);
+            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric);
+            BuiltInVariable("gl_BaryCoordNV",        EbvBaryCoordNV,        symbolTable);
+            BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
+        }
+        if (((profile != EEsProfile && version >= 450) ||
+            (profile == EEsProfile && version >= 320)) &&
+            language == EShLangCompute) {
+            symbolTable.setFunctionExtensions("dFdx",                   1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdy",                   1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidth",                 1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdxFine",               1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdyFine",               1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidthFine",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdxCoarse",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
+            symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
+        }
 #endif
 
         symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
@@ -7969,6 +8472,26 @@
             symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
             symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
         }
+
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_ScopeDevice",             1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_ScopeWorkgroup",          1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_ScopeSubgroup",           1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_ScopeInvocation",         1, &E_GL_KHR_memory_scope_semantics);
+
+            symbolTable.setVariableExtensions("gl_SemanticsRelaxed",        1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsAcquire",        1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsRelease",        1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable",  1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_SemanticsMakeVisible",    1, &E_GL_KHR_memory_scope_semantics);
+
+            symbolTable.setVariableExtensions("gl_StorageSemanticsNone",    1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer",  1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_StorageSemanticsShared",  1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_StorageSemanticsImage",   1, &E_GL_KHR_memory_scope_semantics);
+            symbolTable.setVariableExtensions("gl_StorageSemanticsOutput",  1, &E_GL_KHR_memory_scope_semantics);
+        }
         break;
 
     case EShLangCompute:
@@ -8003,6 +8526,8 @@
             symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
         }
 
+        symbolTable.setFunctionExtensions("controlBarrier",                 1, &E_GL_KHR_memory_scope_semantics);
+
         // GL_ARB_shader_ballot
         if (profile != EEsProfile) {
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
@@ -8027,7 +8552,7 @@
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
 
-        // GL_ARB_shader_ballot
+        // GL_KHR_shader_subgroup
         if (spvVersion.vulkan > 0) {
             symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
             symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
@@ -8065,6 +8590,240 @@
             symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
         }
         break;
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.setVariableExtensions("gl_LaunchIDNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_LaunchSizeNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_PrimitiveID", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_InstanceCustomIndexNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldRayOriginNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldRayDirectionNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayOriginNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayDirectionNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_RayTminNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_RayTmaxNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_HitTNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_HitKindNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorldNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_WorldToObjectNVX", 1, &E_GL_NVX_raytracing);
+            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
+
+            BuiltInVariable("gl_LaunchIDNVX",           EbvLaunchIdNV,           symbolTable);
+            BuiltInVariable("gl_LaunchSizeNVX",         EbvLaunchSizeNV,         symbolTable);
+            BuiltInVariable("gl_PrimitiveID",           EbvPrimitiveId,          symbolTable);
+            BuiltInVariable("gl_InstanceID",            EbvInstanceId,           symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexNVX",EbvInstanceCustomIndexNV,symbolTable);
+            BuiltInVariable("gl_WorldRayOriginNVX",     EbvWorldRayOriginNV,     symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionNVX",  EbvWorldRayDirectionNV,  symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginNVX",    EbvObjectRayOriginNV,    symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionNVX", EbvObjectRayDirectionNV, symbolTable);
+            BuiltInVariable("gl_RayTminNVX",            EbvRayTminNV,            symbolTable);
+            BuiltInVariable("gl_RayTmaxNVX",            EbvRayTmaxNV,            symbolTable);
+            BuiltInVariable("gl_HitTNVX",               EbvHitTNV,               symbolTable);
+            BuiltInVariable("gl_HitKindNVX",            EbvHitKindNV,            symbolTable);
+            BuiltInVariable("gl_ObjectToWorldNVX",      EbvObjectToWorldNV,      symbolTable);
+            BuiltInVariable("gl_WorldToObjectNVX",      EbvWorldToObjectNV,      symbolTable);
+            BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
+        } 
+        break;
+    case EShLangMeshNV:
+        if (profile != EEsProfile && version >= 450) {
+            // Per-vertex builtins
+            BuiltInVariable("gl_MeshVerticesNV", "gl_Position",     EbvPosition,     symbolTable);
+            BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize",    EbvPointSize,    symbolTable);
+            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistance", EbvClipDistance, symbolTable);
+            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistance", EbvCullDistance, symbolTable);
+            // Per-view builtins
+            BuiltInVariable("gl_MeshVerticesNV", "gl_PositionPerViewNV",     EbvPositionPerViewNV,     symbolTable);
+            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", EbvClipDistancePerViewNV, symbolTable);
+            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", EbvCullDistancePerViewNV, symbolTable);
+
+            // Per-primitive builtins
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_PrimitiveID",   EbvPrimitiveId,    symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_Layer",         EbvLayer,          symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportIndex", EbvViewportIndex,  symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMask",  EbvViewportMaskNV, symbolTable);
+            // Per-view builtins
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        EbvLayerPerViewNV,        symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
+
+            symbolTable.setVariableExtensions("gl_PrimitiveCountNV",     1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+
+            BuiltInVariable("gl_PrimitiveCountNV",     EbvPrimitiveCountNV,     symbolTable);
+            BuiltInVariable("gl_PrimitiveIndicesNV",   EbvPrimitiveIndicesNV,   symbolTable);
+            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
+            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
+            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
+            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
+            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
+            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
+            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
+
+            symbolTable.setVariableExtensions("gl_MaxMeshOutputVerticesNV",   1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MaxMeshOutputPrimitivesNV", 1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MaxMeshWorkGroupSizeNV",    1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
+
+            symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
+            symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
+
+            // GL_EXT_device_group
+            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
+            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
+
+            // GL_ARB_shader_draw_parameters
+            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
+            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
+            if (version >= 460) {
+                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
+            }
+
+            // GL_ARB_shader_ballot
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
+            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+        }
+        break;
+
+    case EShLangTaskNV:
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+
+            BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
+            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
+            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
+            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
+            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
+            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
+
+            symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
+
+            symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
+            symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
+            symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
+
+            // GL_EXT_device_group
+            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
+            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
+
+            // GL_ARB_shader_draw_parameters
+            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
+            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
+            if (version >= 460) {
+                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
+            }
+
+            // GL_ARB_shader_ballot
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
+            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+        }
+        break;
+#endif
 
     default:
         assert(false && "Language not supported");
@@ -8213,6 +8972,7 @@
     symbolTable.relateToOperator("all",          EOpAll);
 
     symbolTable.relateToOperator("barrier",                    EOpBarrier);
+    symbolTable.relateToOperator("controlBarrier",             EOpBarrier);
     symbolTable.relateToOperator("memoryBarrier",              EOpMemoryBarrier);
     symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter);
     symbolTable.relateToOperator("memoryBarrierBuffer",        EOpMemoryBarrierBuffer);
@@ -8226,6 +8986,8 @@
     symbolTable.relateToOperator("atomicXor",      EOpAtomicXor);
     symbolTable.relateToOperator("atomicExchange", EOpAtomicExchange);
     symbolTable.relateToOperator("atomicCompSwap", EOpAtomicCompSwap);
+    symbolTable.relateToOperator("atomicLoad",     EOpAtomicLoad);
+    symbolTable.relateToOperator("atomicStore",    EOpAtomicStore);
 
     symbolTable.relateToOperator("atomicCounterIncrement", EOpAtomicCounterIncrement);
     symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
@@ -8270,6 +9032,8 @@
         symbolTable.relateToOperator("imageAtomicXor",          EOpImageAtomicXor);
         symbolTable.relateToOperator("imageAtomicExchange",     EOpImageAtomicExchange);
         symbolTable.relateToOperator("imageAtomicCompSwap",     EOpImageAtomicCompSwap);
+        symbolTable.relateToOperator("imageAtomicLoad",         EOpImageAtomicLoad);
+        symbolTable.relateToOperator("imageAtomicStore",        EOpImageAtomicStore);
 
         symbolTable.relateToOperator("subpassLoad",             EOpSubpassLoad);
         symbolTable.relateToOperator("subpassLoadMS",           EOpSubpassLoadMS);
@@ -8301,6 +9065,14 @@
         symbolTable.relateToOperator("noise3", EOpNoise);
         symbolTable.relateToOperator("noise4", EOpNoise);
 
+#ifdef NV_EXTENSIONS
+        symbolTable.relateToOperator("textureFootprintNV",          EOpImageSampleFootprintNV);
+        symbolTable.relateToOperator("textureFootprintClampNV",     EOpImageSampleFootprintClampNV);
+        symbolTable.relateToOperator("textureFootprintLodNV",       EOpImageSampleFootprintLodNV);
+        symbolTable.relateToOperator("textureFootprintGradNV",      EOpImageSampleFootprintGradNV);
+        symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
+#endif
+
         if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
             (profile == EEsProfile && version == 100))) {
             symbolTable.relateToOperator("ftransform",               EOpFtransform);
@@ -8573,8 +9345,52 @@
         symbolTable.relateToOperator("memoryBarrierShared",         EOpMemoryBarrierShared);
         symbolTable.relateToOperator("groupMemoryBarrier",          EOpGroupMemoryBarrier);
         symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
+#ifdef NV_EXTENSIONS
+        if ((profile != EEsProfile && version >= 450) ||
+            (profile == EEsProfile && version >= 320)) {
+            symbolTable.relateToOperator("dFdx",        EOpDPdx);
+            symbolTable.relateToOperator("dFdy",        EOpDPdy);
+            symbolTable.relateToOperator("fwidth",      EOpFwidth);
+            symbolTable.relateToOperator("dFdxFine",    EOpDPdxFine);
+            symbolTable.relateToOperator("dFdyFine",    EOpDPdyFine);
+            symbolTable.relateToOperator("fwidthFine",  EOpFwidthFine);
+            symbolTable.relateToOperator("dFdxCoarse",  EOpDPdxCoarse);
+            symbolTable.relateToOperator("dFdyCoarse",  EOpDPdyCoarse);
+            symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse);
+        }
+#endif
         break;
 
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+        if (profile != EEsProfile && version >= 460)
+            symbolTable.relateToOperator("traceNVX", EOpTraceNV);
+        break;
+    case EShLangIntersectNV:
+        if (profile != EEsProfile && version >= 460)
+            symbolTable.relateToOperator("reportIntersectionNVX", EOpReportIntersectionNV);
+        break;
+    case EShLangAnyHitNV:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("ignoreIntersectionNVX", EOpIgnoreIntersectionNV);
+            symbolTable.relateToOperator("terminateRayNVX", EOpTerminateRayNV);
+        }
+        break;
+    case EShLangMeshNV:
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
+        }
+        // fall through
+    case EShLangTaskNV:
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
+            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
+        }
+        break;
+#endif
+
     default:
         assert(false && "Language not supported");
     }
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
old mode 100755
new mode 100644
index 8eb5ff5..769dad0
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -460,6 +460,9 @@
         return false;
     case EbtAtomicUint:
     case EbtSampler:
+#ifdef NV_EXTENSIONS
+    case EbtAccStructNV:
+#endif
         // opaque types can be passed to functions
         if (op == EOpFunction)
             break;
@@ -1573,27 +1576,29 @@
                 return false;
             }
         case EbtFloat16:
-            switch (from) {
 #ifdef AMD_EXTENSIONS
+            switch (from) {
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
             case EbtFloat16:
                 return extensionRequested(E_GL_AMD_gpu_shader_half_float);
-#endif
             default:
-                return false;
-        }
+                break;
+            }
+#endif
+            return false;
         case EbtUint16:
-            switch (from) {
 #ifdef AMD_EXTENSIONS
+            switch (from) {
             case EbtInt16:
             case EbtUint16:
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
-#endif
             default:
-                return false;
-        }
+                break;
+            }
+#endif
+            return false;
         default:
             return false;
         }
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index bfa9de4..ca5d7e4 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -153,6 +153,12 @@
         if (node->getQualifier().readonly)
             message = "can't modify a readonly buffer";
         break;
+#ifdef NV_EXTENSIONS
+    case EvqHitAttrNV:
+        if (language != EShLangIntersectNV)
+            message = "cannot modify hitAttributeNVX in this stage";
+        break;
+#endif
 
     default:
         //
@@ -168,6 +174,11 @@
         case EbtVoid:
             message = "can't modify void";
             break;
+#ifdef NV_EXTENSIONS
+        case EbtAccStructNV:
+            message = "can't modify accelerationStructureNVX";
+            break;
+#endif
         default:
             break;
         }
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
old mode 100755
new mode 100644
index 94af167..6d1004d
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -267,6 +267,10 @@
         if (tokens.size() != 1)
             error(loc, "extra tokens", "#pragma", "");
         intermediate.setUseStorageBuffer();
+    } else if (spvVersion.spv > 0 && tokens[0].compare("use_vulkan_memory_model") == 0) {
+        if (tokens.size() != 1)
+            error(loc, "extra tokens", "#pragma", "");
+        intermediate.setUseVulkanMemoryModel();
     } else if (tokens[0].compare("once") == 0) {
         warn(loc, "not implemented", "#pragma once", "");
     } else if (tokens[0].compare("glslang_binary_double_output") == 0)
@@ -487,12 +491,20 @@
         ioArraySymbolResizeList.push_back(symbol);
 }
 
-// Return true if this is a geometry shader input array or tessellation control output array.
+// Return true if this is a geometry shader input array or tessellation control output array
+// or mesh shader output array.
 bool TParseContext::isIoResizeArray(const TType& type) const
 {
     return type.isArray() &&
            ((language == EShLangGeometry    && type.getQualifier().storage == EvqVaryingIn) ||
-            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch));
+            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch)
+#ifdef NV_EXTENSIONS
+            ||
+            (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&  type.getQualifier().pervertexNV) ||
+            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)
+
+#endif
+            );
 }
 
 // If an array is not isIoResizeArray() but is an io array, make sure it has the right size
@@ -542,7 +554,7 @@
 
     // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
     if (symbolNode->getType().isUnsizedArray()) {
-        int newSize = getIoArrayImplicitSize();
+        int newSize = getIoArrayImplicitSize(symbolNode->getType().getQualifier().isPerPrimitive());
         if (newSize > 0)
             symbolNode->getWritableType().changeOuterArraySize(newSize);
     }
@@ -556,17 +568,27 @@
 // Types without an array size will be given one.
 // Types already having a size that is wrong will get an error.
 //
-void TParseContext::checkIoArraysConsistency(const TSourceLoc& loc, bool tailOnly)
+void TParseContext::checkIoArraysConsistency(const TSourceLoc& loc, bool tailOnly, bool isPerPrimitive)
 {
-    int requiredSize = getIoArrayImplicitSize();
+    int requiredSize = getIoArrayImplicitSize(isPerPrimitive);
     if (requiredSize == 0)
         return;
 
     const char* feature;
     if (language == EShLangGeometry)
         feature = TQualifier::getGeometryString(intermediate.getInputPrimitive());
-    else if (language == EShLangTessControl)
+    else if (language == EShLangTessControl
+#ifdef NV_EXTENSIONS
+          || language == EShLangFragment
+#endif
+        )
+
         feature = "vertices";
+#ifdef NV_EXTENSIONS
+     else if (language == EShLangMeshNV) {
+        feature = isPerPrimitive ? "max_primitives" : "max_vertices";
+     }
+#endif
     else
         feature = "unknown";
 
@@ -579,12 +601,24 @@
         checkIoArrayConsistency(loc, requiredSize, feature, ioArraySymbolResizeList[i]->getWritableType(), ioArraySymbolResizeList[i]->getName());
 }
 
-int TParseContext::getIoArrayImplicitSize() const
+int TParseContext::getIoArrayImplicitSize(bool isPerPrimitive) const
 {
     if (language == EShLangGeometry)
         return TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
     else if (language == EShLangTessControl)
         return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+#ifdef NV_EXTENSIONS
+    else if (language == EShLangFragment)
+        return 3; //Number of vertices for Fragment shader is always three.
+    else if (language == EShLangMeshNV) {
+        if (isPerPrimitive) {
+            return intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;            
+        } else {
+            return intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
+        }
+    }
+#endif
+
     else
         return 0;
 }
@@ -598,6 +632,14 @@
             error(loc, "inconsistent input primitive for array size of", feature, name.c_str());
         else if (language == EShLangTessControl)
             error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str());
+#ifdef NV_EXTENSIONS
+        else if (language == EShLangFragment) {
+            if (type.getOuterArraySize() > requiredSize)
+                error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str());
+        }
+        else if (language == EShLangMeshNV)
+            error(loc, "inconsistent output array size of", feature, name.c_str());
+#endif
         else
             assert(0);
     }
@@ -1028,8 +1070,16 @@
                         const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
                         if (argQualifier.volatil && ! formalQualifier.volatil)
                             error(arguments->getLoc(), message, "volatile", "");
-                        if (argQualifier.coherent && ! formalQualifier.coherent)
+                        if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
                             error(arguments->getLoc(), message, "coherent", "");
+                        if (argQualifier.devicecoherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
+                            error(arguments->getLoc(), message, "devicecoherent", "");
+                        if (argQualifier.queuefamilycoherent && ! (formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
+                            error(arguments->getLoc(), message, "queuefamilycoherent", "");
+                        if (argQualifier.workgroupcoherent && ! (formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
+                            error(arguments->getLoc(), message, "workgroupcoherent", "");
+                        if (argQualifier.subgroupcoherent && ! (formalQualifier.subgroupcoherent || formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
+                            error(arguments->getLoc(), message, "subgroupcoherent", "");
                         if (argQualifier.readonly && ! formalQualifier.readonly)
                             error(arguments->getLoc(), message, "readonly", "");
                         if (argQualifier.writeonly && ! formalQualifier.writeonly)
@@ -1289,8 +1339,15 @@
                     // without actually redeclaring the array.  (It is an error to use a member before the
                     // redeclaration, but not an error to use the array name itself.)
                     const TString& name = intermNode->getAsSymbolNode()->getName();
-                    if (name == "gl_in" || name == "gl_out")
-                        length = getIoArrayImplicitSize();
+                    if (name == "gl_in" || name == "gl_out"
+#ifdef NV_EXTENSIONS
+                        || name == "gl_MeshVerticesNV"
+                        || name == "gl_MeshPrimitivesNV"
+#endif
+                        )
+                    {
+                        length = getIoArrayImplicitSize(type.getQualifier().isPerPrimitive());
+                    }
                 }
                 if (length == 0) {
                     if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
@@ -1428,6 +1485,161 @@
     return conversionTree;
 }
 
+void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate, const TIntermOperator& callNode)
+{
+    const TIntermSequence* argp = &callNode.getAsAggregate()->getSequence();
+
+    const int gl_SemanticsRelaxed         = 0x0;
+    const int gl_SemanticsAcquire         = 0x2;
+    const int gl_SemanticsRelease         = 0x4;
+    const int gl_SemanticsAcquireRelease  = 0x8;
+    const int gl_SemanticsMakeAvailable   = 0x2000;
+    const int gl_SemanticsMakeVisible     = 0x4000;
+
+    const int gl_StorageSemanticsNone     = 0x0;
+    const int gl_StorageSemanticsBuffer   = 0x40;
+    const int gl_StorageSemanticsShared   = 0x100;
+    const int gl_StorageSemanticsImage    = 0x800;
+    const int gl_StorageSemanticsOutput   = 0x1000;
+
+
+    unsigned int semantics = 0, storageClassSemantics = 0;
+    unsigned int semantics2 = 0, storageClassSemantics2 = 0;
+
+    // Grab the semantics and storage class semantics from the operands, based on opcode
+    switch (callNode.getOp()) {
+    case EOpAtomicAdd:
+    case EOpAtomicMin:
+    case EOpAtomicMax:
+    case EOpAtomicAnd:
+    case EOpAtomicOr:
+    case EOpAtomicXor:
+    case EOpAtomicExchange:
+    case EOpAtomicStore:
+        storageClassSemantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    case EOpAtomicLoad:
+        storageClassSemantics = (*argp)[2]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    case EOpAtomicCompSwap:
+        storageClassSemantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics2 = (*argp)[6]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics2 = (*argp)[7]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+
+    case EOpImageAtomicAdd:
+    case EOpImageAtomicMin:
+    case EOpImageAtomicMax:
+    case EOpImageAtomicAnd:
+    case EOpImageAtomicOr:
+    case EOpImageAtomicXor:
+    case EOpImageAtomicExchange:
+    case EOpImageAtomicStore:
+        storageClassSemantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    case EOpImageAtomicLoad:
+        storageClassSemantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    case EOpImageAtomicCompSwap:
+        storageClassSemantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[6]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics2 = (*argp)[7]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics2 = (*argp)[8]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+
+    case EOpBarrier:
+        storageClassSemantics = (*argp)[2]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    case EOpMemoryBarrier:
+        storageClassSemantics = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[2]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        break;
+    default:
+        break;
+    }
+
+    if ((semantics & gl_SemanticsAcquire) && 
+        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore)) {
+        error(loc, "gl_SemanticsAcquire must not be used with (image) atomic store",
+              fnCandidate.getName().c_str(), "");
+    }
+    if ((semantics & gl_SemanticsRelease) && 
+        (callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpImageAtomicLoad)) {
+        error(loc, "gl_SemanticsRelease must not be used with (image) atomic load",
+              fnCandidate.getName().c_str(), "");
+    }
+    if ((semantics & gl_SemanticsAcquireRelease) && 
+        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore || 
+         callNode.getOp() == EOpAtomicLoad  || callNode.getOp() == EOpImageAtomicLoad)) {
+        error(loc, "gl_SemanticsAcquireRelease must not be used with (image) atomic load/store",
+              fnCandidate.getName().c_str(), "");
+    }
+    if (((semantics | semantics2) & ~(gl_SemanticsAcquire |
+                                      gl_SemanticsRelease |
+                                      gl_SemanticsAcquireRelease |
+                                      gl_SemanticsMakeAvailable |
+                                      gl_SemanticsMakeVisible))) {
+        error(loc, "Invalid semantics value", fnCandidate.getName().c_str(), "");
+    }
+    if (((storageClassSemantics | storageClassSemantics2) & ~(gl_StorageSemanticsBuffer |
+                                                              gl_StorageSemanticsShared |
+                                                              gl_StorageSemanticsImage |
+                                                              gl_StorageSemanticsOutput))) {
+        error(loc, "Invalid storage class semantics value", fnCandidate.getName().c_str(), "");
+    }
+
+    if (callNode.getOp() == EOpMemoryBarrier) {
+        if (!IsPow2(semantics & (gl_SemanticsAcquire | gl_SemanticsRelease | gl_SemanticsAcquireRelease))) {
+            error(loc, "Semantics must include exactly one of gl_SemanticsRelease, gl_SemanticsAcquire, or "
+                       "gl_SemanticsAcquireRelease", fnCandidate.getName().c_str(), "");
+        }
+    } else {
+        if (semantics & (gl_SemanticsAcquire | gl_SemanticsRelease | gl_SemanticsAcquireRelease)) {
+            if (!IsPow2(semantics & (gl_SemanticsAcquire | gl_SemanticsRelease | gl_SemanticsAcquireRelease))) {
+                error(loc, "Semantics must not include multiple of gl_SemanticsRelease, gl_SemanticsAcquire, or "
+                           "gl_SemanticsAcquireRelease", fnCandidate.getName().c_str(), "");
+            }
+        }
+        if (semantics2 & (gl_SemanticsAcquire | gl_SemanticsRelease | gl_SemanticsAcquireRelease)) {
+            if (!IsPow2(semantics2 & (gl_SemanticsAcquire | gl_SemanticsRelease | gl_SemanticsAcquireRelease))) {
+                error(loc, "semUnequal must not include multiple of gl_SemanticsRelease, gl_SemanticsAcquire, or "
+                           "gl_SemanticsAcquireRelease", fnCandidate.getName().c_str(), "");
+            }
+        }
+    }
+    if (callNode.getOp() == EOpMemoryBarrier) {
+        if (storageClassSemantics == 0) {
+            error(loc, "Storage class semantics must not be zero", fnCandidate.getName().c_str(), "");
+        }
+    }
+    if (callNode.getOp() == EOpBarrier && semantics != 0 && storageClassSemantics == 0) {
+        error(loc, "Storage class semantics must not be zero", fnCandidate.getName().c_str(), "");
+    }
+    if ((callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) &&
+        (semantics2 & (gl_SemanticsRelease | gl_SemanticsAcquireRelease))) {
+        error(loc, "semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease",
+              fnCandidate.getName().c_str(), "");
+    }
+    if ((semantics & gl_SemanticsMakeAvailable) &&
+        !(semantics & (gl_SemanticsRelease | gl_SemanticsAcquireRelease))) {
+        error(loc, "gl_SemanticsMakeAvailable requires gl_SemanticsRelease or gl_SemanticsAcquireRelease",
+              fnCandidate.getName().c_str(), "");
+    }
+    if ((semantics & gl_SemanticsMakeVisible) &&
+        !(semantics & (gl_SemanticsAcquire | gl_SemanticsAcquireRelease))) {
+        error(loc, "gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease",
+              fnCandidate.getName().c_str(), "");
+    }
+
+}
+
+
 //
 // Do additional checking of built-in function calls that is not caught
 // by normal semantic checks on argument type, extension tagging, etc.
@@ -1656,6 +1868,8 @@
     case EOpImageAtomicXor:
     case EOpImageAtomicExchange:
     case EOpImageAtomicCompSwap:
+    case EOpImageAtomicLoad:
+    case EOpImageAtomicStore:
     {
         // Make sure the image types have the correct layout() format and correct argument types
         const TType& imageType = arg0->getType();
@@ -1669,10 +1883,14 @@
                 error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
         }
 
+        if (argp->size() > 4) {
+            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
+            memorySemanticsCheck(loc, fnCandidate, callNode);
+        }
+
         break;
     }
 
-#ifdef NV_EXTENSIONS
     case EOpAtomicAdd:
     case EOpAtomicMin:
     case EOpAtomicMax:
@@ -1681,13 +1899,23 @@
     case EOpAtomicXor:
     case EOpAtomicExchange:
     case EOpAtomicCompSwap:
+    case EOpAtomicLoad:
+    case EOpAtomicStore:
     {
-        if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64)
-            requireExtensions(loc, 1, &E_GL_NV_shader_atomic_int64, fnCandidate.getName().c_str());
-
+        if (argp->size() > 3) {
+            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
+            memorySemanticsCheck(loc, fnCandidate, callNode);
+        } else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) {
+#ifdef NV_EXTENSIONS
+            const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
+                                                E_GL_EXT_shader_atomic_int64 };
+            requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
+#else
+            requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_int64, fnCandidate.getName().c_str());
+#endif
+        }
         break;
     }
-#endif
 
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
@@ -1751,6 +1979,14 @@
         }
         break;
 
+    case EOpBarrier:
+    case EOpMemoryBarrier:
+        if (argp->size() > 0) {
+            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
+            memorySemanticsCheck(loc, fnCandidate, callNode);
+        }
+        break;
+
     default:
         break;
     }
@@ -2655,18 +2891,12 @@
     // second argument
     //   * the constructor's second argument must be a scalar of type
     //     *sampler* or *samplerShadow*
-    //   * the presence or absence of depth comparison (Shadow) must match
-    //     between the constructed sampler type and the type of the second argument
     if (  function[1].type->getBasicType() != EbtSampler ||
         ! function[1].type->getSampler().isPureSampler() ||
           function[1].type->isArray()) {
         error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, "");
         return true;
     }
-    if (function.getType().getSampler().shadow != function[1].type->getSampler().shadow) {
-        error(loc, "sampler-constructor second argument presence of shadow must match constructor presence of shadow", token, "");
-        return true;
-    }
 
     return false;
 }
@@ -2734,6 +2964,20 @@
     else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform)
         error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 }
+#ifdef NV_EXTENSIONS
+void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
+{
+    if (type.getQualifier().storage == EvqUniform)
+        return;
+
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStructNV))
+        error(loc, "non-uniform struct contains an accelerationStructureNVX:", type.getBasicTypeString().c_str(), identifier.c_str());
+    else if (type.getBasicType() == EbtAccStructNV && type.getQualifier().storage != EvqUniform)
+        error(loc, "accelerationStructureNVX can only be used in uniform variables or function parameters:",
+            type.getBasicTypeString().c_str(), identifier.c_str());
+
+}
+#endif
 
 void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
@@ -2812,8 +3056,11 @@
     if (! symbolTable.atGlobalLevel())
         return;
 
-    if (qualifier.isMemory() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer)
+    if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
         error(loc, "memory qualifiers cannot be used on this type", "", "");
+    } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
+        error(loc, "memory qualifiers cannot be used on this type", "", "");
+    }
 
     if (qualifier.storage == EvqBuffer && publicType.basicType != EbtBlock)
         error(loc, "buffers can be declared only as blocks", "buffer", "");
@@ -2834,11 +3081,14 @@
     if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
+    if (!qualifier.flat
 #ifdef AMD_EXTENSIONS
-    if (! qualifier.flat && ! qualifier.explicitInterp) {
-#else
-    if (!qualifier.flat) {
+        && !qualifier.explicitInterp
 #endif
+#ifdef NV_EXTENSIONS
+        && !qualifier.pervertexNV
+#endif
+        ) {
         if (isTypeInt(publicType.basicType) ||
             publicType.basicType == EbtDouble ||
             (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8)   ||
@@ -2860,6 +3110,11 @@
     if (qualifier.patch && qualifier.isInterpolation())
         error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 
+#ifdef NV_EXTENSIONS
+    if (qualifier.perTaskNV && publicType.basicType != EbtBlock)
+        error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
+#endif
+
     if (qualifier.storage == EvqVaryingIn) {
         switch (language) {
         case EShLangVertex:
@@ -3026,6 +3281,13 @@
     if (dst.precision == EpqNone || (force && src.precision != EpqNone))
         dst.precision = src.precision;
 
+    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
+                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
+                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
+                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent)) ||
+                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent)))) {
+        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent qualifier allowed", GetPrecisionQualifierString(src.precision), "");
+    }
     // Layout qualifiers
     mergeObjectLayoutQualifiers(dst, src, false);
 
@@ -3041,9 +3303,19 @@
 #ifdef AMD_EXTENSIONS
     MERGE_SINGLETON(explicitInterp);
 #endif
+#ifdef NV_EXTENSIONS
+    MERGE_SINGLETON(perPrimitiveNV);
+    MERGE_SINGLETON(perViewNV);
+    MERGE_SINGLETON(perTaskNV);
+#endif
     MERGE_SINGLETON(patch);
     MERGE_SINGLETON(sample);
     MERGE_SINGLETON(coherent);
+    MERGE_SINGLETON(devicecoherent);
+    MERGE_SINGLETON(queuefamilycoherent);
+    MERGE_SINGLETON(workgroupcoherent);
+    MERGE_SINGLETON(subgroupcoherent);
+    MERGE_SINGLETON(nonprivate);
     MERGE_SINGLETON(volatil);
     MERGE_SINGLETON(restrict);
     MERGE_SINGLETON(readonly);
@@ -3377,7 +3649,7 @@
             if (! symbolTable.atBuiltInLevel()) {
                 if (isIoResizeArray(type)) {
                     ioArraySymbolResizeList.push_back(symbol);
-                    checkIoArraysConsistency(loc, true);
+                    checkIoArraysConsistency(loc, true, type.getQualifier().isPerPrimitive());
                 } else
                     fixIoArraySize(loc, symbol->getWritableType());
             }
@@ -3430,7 +3702,7 @@
     existingType.updateArraySizes(type);
 
     if (isIoResizeArray(type))
-        checkIoArraysConsistency(loc);
+        checkIoArraysConsistency(loc, false, type.getQualifier().isPerPrimitive());
 }
 
 // Policy and error check for needing a runtime sized array.
@@ -3466,6 +3738,28 @@
     return false;
 }
 
+#ifdef NV_EXTENSIONS
+// Fix mesh view output array dimension
+void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type)
+{
+    // see if member is a per-view attribute
+    if (type.getQualifier().isPerView()) {
+        // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value
+        int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
+
+        if (! type.isArray()) {
+            error(loc, "requires an view array dimension", "perviewNV", "");
+        }
+        else if (!type.isUnsizedArray() && type.getOuterArraySize() != maxViewCount) {
+            error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
+        }
+        else if (type.isUnsizedArray()) {
+            type.changeOuterArraySize(maxViewCount);
+        }
+    }
+}
+#endif
+
 // Returns true if the first argument to the #line directive is the line number for the next line.
 //
 // Desktop, pre-version 3.30:  "After processing this directive
@@ -3656,7 +3950,12 @@
     profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
     profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 
-    if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment") {
+    if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment"
+#ifdef NV_EXTENSIONS
+        && blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV"
+#endif
+       )
+    {
         error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str());
         return;
     }
@@ -3832,7 +4131,7 @@
     // Tracking for implicit sizing of array
     if (isIoResizeArray(block->getType())) {
         ioArraySymbolResizeList.push_back(block);
-        checkIoArraysConsistency(loc, true);
+        checkIoArraysConsistency(loc, true, block->getType().getQualifier().isPerPrimitive());
     } else if (block->getType().isArray())
         fixIoArraySize(loc, block->getWritableType());
 
@@ -3868,6 +4167,11 @@
     if (qualifier.isMemory()) {
         type.getQualifier().volatil   = qualifier.volatil;
         type.getQualifier().coherent  = qualifier.coherent;
+        type.getQualifier().devicecoherent  = qualifier.devicecoherent ;
+        type.getQualifier().queuefamilycoherent  = qualifier.queuefamilycoherent;
+        type.getQualifier().workgroupcoherent  = qualifier.workgroupcoherent;
+        type.getQualifier().subgroupcoherent  = qualifier.subgroupcoherent;
+        type.getQualifier().nonprivate = qualifier.nonprivate;
         type.getQualifier().readonly  = qualifier.readonly;
         type.getQualifier().writeonly = qualifier.writeonly;
         type.getQualifier().restrict  = qualifier.restrict;
@@ -4244,44 +4548,57 @@
         publicType.qualifier.layoutPushConstant = true;
         return;
     }
-    if (language == EShLangGeometry || language == EShLangTessEvaluation) {
+    if (language == EShLangGeometry || language == EShLangTessEvaluation
+#ifdef NV_EXTENSIONS
+        || language == EShLangMeshNV
+#endif
+       ) {
         if (id == TQualifier::getGeometryString(ElgTriangles)) {
             publicType.shaderQualifiers.geometry = ElgTriangles;
             return;
         }
-        if (language == EShLangGeometry) {
+        if (language == EShLangGeometry
+#ifdef NV_EXTENSIONS
+            || language == EShLangMeshNV
+#endif
+           ) {
             if (id == TQualifier::getGeometryString(ElgPoints)) {
                 publicType.shaderQualifiers.geometry = ElgPoints;
                 return;
             }
-            if (id == TQualifier::getGeometryString(ElgLineStrip)) {
-                publicType.shaderQualifiers.geometry = ElgLineStrip;
-                return;
-            }
             if (id == TQualifier::getGeometryString(ElgLines)) {
                 publicType.shaderQualifiers.geometry = ElgLines;
                 return;
             }
-            if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) {
-                publicType.shaderQualifiers.geometry = ElgLinesAdjacency;
-                return;
-            }
-            if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) {
-                publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency;
-                return;
-            }
-            if (id == TQualifier::getGeometryString(ElgTriangleStrip)) {
-                publicType.shaderQualifiers.geometry = ElgTriangleStrip;
-                return;
-            }
 #ifdef NV_EXTENSIONS
-            if (id == "passthrough") {
-               requireExtensions(loc, 1, &E_SPV_NV_geometry_shader_passthrough, "geometry shader passthrough");
-               publicType.qualifier.layoutPassthrough = true;
-               intermediate.setGeoPassthroughEXT();
-               return;
-            }
+            if (language == EShLangGeometry)
 #endif
+            {
+                if (id == TQualifier::getGeometryString(ElgLineStrip)) {
+                    publicType.shaderQualifiers.geometry = ElgLineStrip;
+                    return;
+                }
+                if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) {
+                    publicType.shaderQualifiers.geometry = ElgLinesAdjacency;
+                    return;
+                }
+                if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) {
+                    publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency;
+                    return;
+                }
+                if (id == TQualifier::getGeometryString(ElgTriangleStrip)) {
+                    publicType.shaderQualifiers.geometry = ElgTriangleStrip;
+                    return;
+                }
+#ifdef NV_EXTENSIONS
+                if (id == "passthrough") {
+                    requireExtensions(loc, 1, &E_SPV_NV_geometry_shader_passthrough, "geometry shader passthrough");
+                    publicType.qualifier.layoutPassthrough = true;
+                    intermediate.setGeoPassthroughEXT();
+                    return;
+                }
+#endif
+            }
         } else {
             assert(language == EShLangTessEvaluation);
 
@@ -4395,6 +4712,27 @@
             publicType.qualifier.layoutViewportRelative = true;
             return;
         }
+    } else {
+        if (language == EShLangRayGenNV || language == EShLangIntersectNV ||
+        language == EShLangAnyHitNV || language == EShLangClosestHitNV ||
+        language == EShLangMissNV || language == EShLangCallableNV) {
+            if (id == "shaderrecordnvx") {
+                publicType.qualifier.layoutShaderRecordNV = true;
+                return;
+            }
+        }
+    }
+    if (language == EShLangCompute) {
+        if (id.compare(0, 17, "derivative_group_") == 0) {
+            requireExtensions(loc, 1, &E_GL_NV_compute_shader_derivatives, "compute shader derivatives");
+            if (id == "derivative_group_quadsnv") {
+                publicType.shaderQualifiers.layoutDerivativeGroupQuads = true;
+                return;
+            } else if (id == "derivative_group_linearnv") {
+                publicType.shaderQualifiers.layoutDerivativeGroupLinear = true;
+                return;
+            }
+        }
     }
 #else
     }
@@ -4624,10 +4962,37 @@
         }
         break;
 
+#ifdef NV_EXTENSIONS
+    case EShLangMeshNV:
+        if (id == "max_vertices") {
+            publicType.shaderQualifiers.vertices = value;
+            if (value > resources.maxMeshOutputVerticesNV)
+                error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
+            return;
+        }
+        if (id == "max_primitives") {
+            publicType.shaderQualifiers.primitives = value;
+            if (value > resources.maxMeshOutputPrimitivesNV)
+                error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
+            return;
+        }
+        // Fall through
+
+    case EShLangTaskNV:
+        // Fall through
+#endif
     case EShLangCompute:
         if (id.compare(0, 11, "local_size_") == 0) {
-            profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
-            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
+#ifdef NV_EXTENSIONS
+            if (language == EShLangMeshNV || language == EShLangTaskNV) {
+                profileRequires(loc, ~EEsProfile, 450, E_GL_NV_mesh_shader, "gl_WorkGroupSize");
+            }
+            else
+#endif
+            {
+                profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
+                profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
+            }
             if (id.size() == 12 && value == 0) {
                 error(loc, "must be at least 1", id.c_str(), "");
                 return;
@@ -4736,6 +5101,10 @@
             dst.layoutViewportRelative = true;
         if (src.layoutSecondaryViewportRelativeOffset != -2048)
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
+        if (src.layoutShaderRecordNV)
+            dst.layoutShaderRecordNV = true;
+        if (src.pervertexNV)
+            dst.pervertexNV = true;
 #endif
     }
 }
@@ -4772,9 +5141,10 @@
         switch (qualifier.storage) {
         case EvqVaryingIn:
         case EvqVaryingOut:
-            if (type.getBasicType() != EbtBlock ||
-                (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
-                  (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))
+            if (!type.getQualifier().isTaskMemory() &&
+                (type.getBasicType() != EbtBlock ||
+                 (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
+                   (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone)))
                 error(loc, "SPIR-V requires location for user input/output", "location", "");
             break;
         default:
@@ -4800,6 +5170,10 @@
                     error(loc, "cannot specify on a variable declaration", "align", "");
                 if (qualifier.layoutPushConstant)
                     error(loc, "can only specify on a uniform block", "push_constant", "");
+#ifdef NV_EXTENSIONS
+                if (qualifier.layoutShaderRecordNV)
+                    error(loc, "can only specify on a buffer block", "shaderRecordNVX", "");
+#endif
             }
             break;
         default:
@@ -4863,12 +5237,22 @@
         case EvqVaryingOut:
             if (type.getBasicType() == EbtBlock)
                 profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block");
+#ifdef NV_EXTENSIONS
+            if (type.getQualifier().isTaskMemory())
+                error(loc, "cannot apply to taskNV in/out blocks", "location", "");
+#endif
             break;
         case EvqUniform:
         case EvqBuffer:
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
+#ifdef NV_EXTENSIONS
+        case EvqPayloadNV:
+        case EvqPayloadInNV:
+        case EvqHitAttrNV:
+            break;
+#endif
         default:
             error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
             break;
@@ -4952,7 +5336,10 @@
         if (spvVersion.spv > 0) {
             if (qualifier.isUniformOrBuffer()) {
                 if (type.getBasicType() == EbtBlock && !qualifier.layoutPushConstant &&
-                                                       !qualifier.layoutAttachment)
+#ifdef NV_EXTENSIONS
+                       !qualifier.layoutShaderRecordNV &&
+#endif
+                       !qualifier.layoutAttachment)
                     error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
                 else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
                     error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
@@ -5004,6 +5391,11 @@
     if (qualifier.layoutPushConstant && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "push_constant", "");
 
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV && type.getBasicType() != EbtBlock)
+        error(loc, "can only be used with a block", "shaderRecordNVX", "");
+#endif
+
     // input attachment
     if (type.isSubpass()) {
         if (! qualifier.hasAttachment())
@@ -5114,7 +5506,7 @@
     }
 
     if (qualifier.hasBinding()) {
-        if (! qualifier.isUniformOrBuffer())
+        if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory())
             error(loc, "requires uniform or buffer storage qualifier", "binding", "");
     }
     if (qualifier.hasStream()) {
@@ -5126,7 +5518,7 @@
             error(loc, "can only be used on an output", "xfb layout qualifier", "");
     }
     if (qualifier.hasUniformLayout()) {
-        if (! qualifier.isUniformOrBuffer()) {
+        if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory()) {
             if (qualifier.hasMatrix() || qualifier.hasPacking())
                 error(loc, "matrix or packing qualifiers can only be used on a uniform or buffer", "layout", "");
             if (qualifier.hasOffset() || qualifier.hasAlign())
@@ -5139,6 +5531,16 @@
         if (qualifier.hasSet())
             error(loc, "cannot be used with push_constant", "set", "");
     }
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV) {
+        if (qualifier.storage != EvqBuffer)
+            error(loc, "can only be used with a buffer", "shaderRecordNVX", "");
+        if (qualifier.hasBinding())
+            error(loc, "cannot be used with shaderRecordNVX", "binding", "");
+        if (qualifier.hasSet())
+            error(loc, "cannot be used with shaderRecordNVX", "set", "");
+    }
+#endif
 }
 
 // For places that can't have shader-level layout qualifiers
@@ -5167,13 +5569,25 @@
             error(loc, message, "local_size id", "");
     }
     if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        if (language == EShLangGeometry)
+        if (language == EShLangGeometry
+#ifdef NV_EXTENSIONS
+            || language == EShLangMeshNV
+#endif
+           )
             error(loc, message, "max_vertices", "");
         else if (language == EShLangTessControl)
             error(loc, message, "vertices", "");
         else
             assert(0);
     }
+#ifdef NV_EXTENSIONS
+    if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
+        if (language == EShLangMeshNV)
+            error(loc, message, "max_primitives", "");
+        else
+            assert(0);
+    }
+#endif
     if (shaderQualifiers.blendEquation)
         error(loc, message, "blend equation", "");
     if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
@@ -5556,6 +5970,9 @@
     samplerCheck(loc, type, identifier, initializer);
     atomicUintCheck(loc, type, identifier);
     transparentOpaqueCheck(loc, type, identifier);
+#ifdef NV_EXTENSIONS
+    accStructNVCheck(loc, type, identifier);
+#endif
 
     if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
         if (type.containsBasicType(EbtFloat16))
@@ -5917,8 +6334,14 @@
 
     // Combined texture-sampler constructors are completely semantic checked
     // in constructorTextureSamplerError()
-    if (op == EOpConstructTextureSampler)
+    if (op == EOpConstructTextureSampler) {
+        if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) {
+            // Transfer depth into the texture (SPIR-V image) type, as a hint
+            // for tools to know this texture/image is a depth image.
+            aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true;
+        }
         return intermediate.setAggregateOperator(aggrNode, op, type, loc);
+    }
 
     TTypeList::const_iterator memberTypes;
     if (op == EOpConstructStruct)
@@ -6198,6 +6621,14 @@
         if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage)
             error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), "");
         memberQualifier.storage = currentBlockQualifier.storage;
+#ifdef NV_EXTENSIONS
+        if (currentBlockQualifier.perPrimitiveNV)
+            memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV;
+        if (currentBlockQualifier.perViewNV)
+            memberQualifier.perViewNV = currentBlockQualifier.perViewNV;
+        if (currentBlockQualifier.perTaskNV)
+            memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV;
+#endif
         if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
             error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
         if (memberType.isArray())
@@ -6240,9 +6671,19 @@
 
     // Special case for "push_constant uniform", which has a default of std430,
     // contrary to normal uniform defaults, and can't have a default tracked for it.
-    if (currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking())
+    if ((currentBlockQualifier.layoutPushConstant && !currentBlockQualifier.hasPacking())
+#ifdef NV_EXTENSIONS
+        || (currentBlockQualifier.layoutShaderRecordNV && !currentBlockQualifier.hasPacking())
+#endif
+       )
         currentBlockQualifier.layoutPacking = ElpStd430;
 
+#ifdef NV_EXTENSIONS
+    // Special case for "taskNV in/out", which has a default of std430,
+    if (currentBlockQualifier.perTaskNV && !currentBlockQualifier.hasPacking())
+        currentBlockQualifier.layoutPacking = ElpStd430;
+#endif
+
     // fix and check for member layout qualifiers
 
     mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true);
@@ -6257,6 +6698,9 @@
 
     bool memberWithLocation = false;
     bool memberWithoutLocation = false;
+#ifdef NV_EXTENSIONS
+    bool memberWithPerViewQualifier = false;
+#endif
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TQualifier& memberQualifier = typeList[member].type->getQualifier();
         const TSourceLoc& memberLoc = typeList[member].loc;
@@ -6300,6 +6744,12 @@
                 error(memberLoc, "can only be used with std140 or std430 layout packing", "offset/align", "");
         }
 
+#ifdef NV_EXTENSIONS
+        if (memberQualifier.isPerView()) {
+            memberWithPerViewQualifier = true;
+        }
+#endif
+
         TQualifier newMemberQualification = defaultQualification;
         mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
         memberQualifier = newMemberQualification;
@@ -6314,6 +6764,14 @@
     for (unsigned int member = 0; member < typeList.size(); ++member)
         layoutTypeCheck(typeList[member].loc, *typeList[member].type);
 
+#ifdef NV_EXTENSIONS
+    if (memberWithPerViewQualifier) {
+        for (unsigned int member = 0; member < typeList.size(); ++member) {
+            resizeMeshViewDimension(typeList[member].loc, *typeList[member].type);
+        }
+    }
+#endif
+
     // reverse merge, so that currentBlockQualifier now has all layout information
     // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers)
     mergeObjectLayoutQualifiers(currentBlockQualifier, defaultQualification, true);
@@ -6377,7 +6835,7 @@
     // fix up
     if (isIoResizeArray(blockType)) {
         ioArraySymbolResizeList.push_back(&variable);
-        checkIoArraysConsistency(loc, true);
+        checkIoArraysConsistency(loc, true, blockType.getQualifier().isPerPrimitive());
     } else
         fixIoArraySize(loc, variable.getWritableType());
 
@@ -6405,17 +6863,56 @@
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "input block");
         // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
         // "Compute shaders do not permit user-defined input variables..."
-        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|EShLangFragmentMask), "input block");
-        if (language == EShLangFragment)
+        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|EShLangFragmentMask
+#ifdef NV_EXTENSIONS
+                                            |EShLangMeshNVMask
+#endif
+                                           ), "input block");
+        if (language == EShLangFragment) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
+        }
+#ifdef NV_EXTENSIONS
+        else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
+            error(loc, "input blocks cannot be used in a mesh shader", "out", "");
+        }
+#endif
         break;
     case EvqVaryingOut:
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
-        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask), "output block");
+        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask
+#ifdef NV_EXTENSIONS
+                                            |EShLangMeshNVMask|EShLangTaskNVMask
+#endif
+                                           ), "output block");
         // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
-        if (language == EShLangVertex && ! parsingBuiltins)
+        if (language == EShLangVertex && ! parsingBuiltins) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
+        }
+#ifdef NV_EXTENSIONS
+        else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
+            error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
+        }
+        else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
+            error(loc, "output blocks cannot be used in a task shader", "out", "");
+        }
+#endif
         break;
+#ifdef NV_EXTENSIONS
+    case EvqPayloadNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+            "rayPayloadNVX block");
+        break;
+    case EvqPayloadInNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+            "rayPayloadInNVX block");
+        break;
+    case EvqHitAttrNV:
+        profileRequires(loc, ~EEsProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX block");
+        requireStage(loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask), "hitAttributeNVX block");
+        break;
+#endif
     default:
         error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
         break;
@@ -6452,6 +6949,12 @@
         error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
     if (qualifier.layoutPushConstant)
         intermediate.addPushConstantCount();
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV)
+        intermediate.addShaderRecordNVCount();
+    if (qualifier.perTaskNV)
+        intermediate.addTaskNVCount();
+#endif
 }
 
 //
@@ -6537,7 +7040,7 @@
 //
 void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typeList)
 {
-    if (! qualifier.isUniformOrBuffer())
+    if (!qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory())
         return;
     if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430)
         return;
@@ -6669,7 +7172,11 @@
 void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, const TPublicType& publicType)
 {
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
+#ifdef NV_EXTENSIONS
+        assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV);
+#else
         assert(language == EShLangTessControl || language == EShLangGeometry);
+#endif
         const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -6680,6 +7187,17 @@
         if (language == EShLangTessControl)
             checkIoArraysConsistency(loc);
     }
+#ifdef NV_EXTENSIONS
+    if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) {
+        assert(language == EShLangMeshNV);
+        const char* id = "max_primitives";
+
+        if (publicType.qualifier.storage != EvqVaryingOut)
+            error(loc, "can only apply to 'out'", id, "");
+        if (! intermediate.setPrimitives(publicType.shaderQualifiers.primitives))
+            error(loc, "cannot change previously set layout value", id, "");
+    }
+#endif
     if (publicType.shaderQualifiers.invocations != TQualifier::layoutNotSet) {
         if (publicType.qualifier.storage != EvqVaryingIn)
             error(loc, "can only apply to 'in'", "invocations", "");
@@ -6696,6 +7214,12 @@
             case ElgTrianglesAdjacency:
             case ElgQuads:
             case ElgIsolines:
+#ifdef NV_EXTENSIONS
+                if (language == EShLangMeshNV) {
+                    error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
+                    break;
+                }
+#endif
                 if (intermediate.setInputPrimitive(publicType.shaderQualifiers.geometry)) {
                     if (language == EShLangGeometry)
                         checkIoArraysConsistency(loc);
@@ -6707,6 +7231,15 @@
             }
         } else if (publicType.qualifier.storage == EvqVaryingOut) {
             switch (publicType.shaderQualifiers.geometry) {
+#ifdef NV_EXTENSIONS
+            case ElgLines:
+            case ElgTriangles:
+                if (language != EShLangMeshNV) {
+                    error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
+                    break;
+                }
+#endif
+                // Fall through
             case ElgPoints:
             case ElgLineStrip:
             case ElgTriangleStrip:
@@ -6746,14 +7279,41 @@
                     error(loc, "cannot change previously set size", "local_size", "");
                 else {
                     int max = 0;
-                    switch (i) {
-                    case 0: max = resources.maxComputeWorkGroupSizeX; break;
-                    case 1: max = resources.maxComputeWorkGroupSizeY; break;
-                    case 2: max = resources.maxComputeWorkGroupSizeZ; break;
-                    default: break;
+                    if (language == EShLangCompute) {
+                        switch (i) {
+                        case 0: max = resources.maxComputeWorkGroupSizeX; break;
+                        case 1: max = resources.maxComputeWorkGroupSizeY; break;
+                        case 2: max = resources.maxComputeWorkGroupSizeZ; break;
+                        default: break;
+                        }
+                        if (intermediate.getLocalSize(i) > (unsigned int)max)
+                            error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
                     }
-                    if (intermediate.getLocalSize(i) > (unsigned int)max)
-                        error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
+#ifdef NV_EXTENSIONS
+                    else if (language == EShLangMeshNV) {
+                        switch (i) {
+                        case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
+                        case 1: max = resources.maxMeshWorkGroupSizeY_NV; break;
+                        case 2: max = resources.maxMeshWorkGroupSizeZ_NV; break;
+                        default: break;
+                        }
+                        if (intermediate.getLocalSize(i) > (unsigned int)max)
+                            error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", "");
+                    }
+                    else if (language == EShLangTaskNV) {
+                        switch (i) {
+                        case 0: max = resources.maxTaskWorkGroupSizeX_NV; break;
+                        case 1: max = resources.maxTaskWorkGroupSizeY_NV; break;
+                        case 2: max = resources.maxTaskWorkGroupSizeZ_NV; break;
+                        default: break;
+                        }
+                        if (intermediate.getLocalSize(i) > (unsigned int)max)
+                            error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", "");
+                    }
+#endif
+                    else {
+                        assert(0);
+                    }
 
                     // Fix the existing constant gl_WorkGroupSize with this new information.
                     TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize");
@@ -6792,6 +7352,36 @@
             error(loc, "can only apply to 'out'", "blend equation", "");
     }
 
+#ifdef NV_EXTENSIONS
+    if (publicType.shaderQualifiers.layoutDerivativeGroupQuads &&
+        publicType.shaderQualifiers.layoutDerivativeGroupLinear) {
+        error(loc, "cannot be both specified", "derivative_group_quadsNV and derivative_group_linearNV", "");
+    }
+
+    if (publicType.shaderQualifiers.layoutDerivativeGroupQuads) {
+        if (publicType.qualifier.storage == EvqVaryingIn) {
+            if ((intermediate.getLocalSize(0) & 1) ||
+                (intermediate.getLocalSize(1) & 1))
+                error(loc, "requires local_size_x and local_size_y to be multiple of two", "derivative_group_quadsNV", "");
+            else
+                intermediate.setLayoutDerivativeMode(LayoutDerivativeGroupQuads);
+        }
+        else
+            error(loc, "can only apply to 'in'", "derivative_group_quadsNV", "");
+    }
+    if (publicType.shaderQualifiers.layoutDerivativeGroupLinear) {
+        if (publicType.qualifier.storage == EvqVaryingIn) {
+            if((intermediate.getLocalSize(0) *
+                intermediate.getLocalSize(1) *
+                intermediate.getLocalSize(2)) % 4 != 0)
+                error(loc, "requires total group size to be multiple of four", "derivative_group_linearNV", "");
+            else
+                intermediate.setLayoutDerivativeMode(LayoutDerivativeGroupLinear);
+        }
+        else
+            error(loc, "can only apply to 'in'", "derivative_group_linearNV", "");
+    }
+#endif 
     const TQualifier& qualifier = publicType.qualifier;
 
     if (qualifier.isAuxiliary() ||
@@ -6847,6 +7437,10 @@
         error(loc, "cannot declare a default, can only be used on a block", "push_constant", "");
     if (qualifier.hasSpecConstantId())
         error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", "");
+#ifdef NV_EXTENSIONS
+    if (qualifier.layoutShaderRecordNV)
+        error(loc, "cannot declare a default, can only be used on a block", "shaderRecordNVX", "");
+#endif
 }
 
 //
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
old mode 100755
new mode 100644
index e40855e..b513f49
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -298,8 +298,8 @@
     void fixIoArraySize(const TSourceLoc&, TType&);
     void ioArrayCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void handleIoResizeArrayAccess(const TSourceLoc&, TIntermTyped* base);
-    void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false);
-    int getIoArrayImplicitSize() const;
+    void checkIoArraysConsistency(const TSourceLoc&, bool tailOnly = false, bool isPerPrimitive = false);
+    int getIoArrayImplicitSize(bool isPerPrimitive = false) const;
     void checkIoArrayConsistency(const TSourceLoc&, int requiredSize, const char* feature, TType&, const TString&);
 
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
@@ -323,6 +323,7 @@
     TFunction* handleConstructorCall(const TSourceLoc&, const TPublicType&);
     void handlePrecisionQualifier(const TSourceLoc&, TQualifier&, TPrecisionQualifier);
     void checkPrecisionQualifier(const TSourceLoc&, TPrecisionQualifier);
+    void memorySemanticsCheck(const TSourceLoc&, const TFunction&, const TIntermOperator& callNode);
 
     void assignError(const TSourceLoc&, const char* op, TString left, TString right);
     void unaryOpError(const TSourceLoc&, const char* op, TString operand);
@@ -347,6 +348,7 @@
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
+    void accStructNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
@@ -422,6 +424,8 @@
     // Determine loop control from attributes
     void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
 
+    void resizeMeshViewDimension(const TSourceLoc&, TType&);
+
 protected:
     void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
     void inheritGlobalDefaults(TQualifier& dst) const;
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
old mode 100755
new mode 100644
index 66ac4a8..7bdd430
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -380,6 +380,11 @@
     (*KeywordMap)["varying"] =                 VARYING;
     (*KeywordMap)["buffer"] =                  BUFFER;
     (*KeywordMap)["coherent"] =                COHERENT;
+    (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
+    (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
+    (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
+    (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
+    (*KeywordMap)["nonprivate"] =              NONPRIVATE;
     (*KeywordMap)["restrict"] =                RESTRICT;
     (*KeywordMap)["readonly"] =                READONLY;
     (*KeywordMap)["writeonly"] =               WRITEONLY;
@@ -683,15 +688,28 @@
     (*KeywordMap)["smooth"] =                  SMOOTH;
     (*KeywordMap)["flat"] =                    FLAT;
 #ifdef AMD_EXTENSIONS
-    (*KeywordMap)["__explicitInterpAMD"] =     __EXPLICITINTERPAMD;
+    (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
 #endif
     (*KeywordMap)["centroid"] =                CENTROID;
+#ifdef NV_EXTENSIONS
+    (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
+#endif
     (*KeywordMap)["precise"] =                 PRECISE;
     (*KeywordMap)["invariant"] =               INVARIANT;
     (*KeywordMap)["packed"] =                  PACKED;
     (*KeywordMap)["resource"] =                RESOURCE;
     (*KeywordMap)["superp"] =                  SUPERP;
 
+#ifdef NV_EXTENSIONS
+    (*KeywordMap)["rayPayloadNVX"] =            PAYLOADNV;
+    (*KeywordMap)["rayPayloadInNVX"] =          PAYLOADINNV;
+    (*KeywordMap)["hitAttributeNVX"] =          HITATTRNV;
+    (*KeywordMap)["accelerationStructureNVX"] = ACCSTRUCTNV;
+    (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
+    (*KeywordMap)["perviewNV"] =               PERVIEWNV;
+    (*KeywordMap)["taskNV"] =                  PERTASKNV;
+#endif
+
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
     ReservedSet->insert("common");
@@ -930,6 +948,18 @@
             return identifierOrType();
         return keyword;
 
+#ifdef NV_EXTENSIONS
+    case PAYLOADNV:
+    case PAYLOADINNV:
+    case HITATTRNV:
+    case ACCSTRUCTNV:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (parseContext.profile != EEsProfile && parseContext.version >= 460
+                 && parseContext.extensionTurnedOn(E_GL_NVX_raytracing)))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case ATOMIC_UINT:
         if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
             parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
@@ -937,6 +967,11 @@
         return es30ReservedFromGLSL(420);
 
     case COHERENT:
+    case DEVICECOHERENT:
+    case QUEUEFAMILYCOHERENT:
+    case WORKGROUPCOHERENT:
+    case SUBGROUPCOHERENT:
+    case NONPRIVATE:
     case RESTRICT:
     case READONLY:
     case WRITEONLY:
@@ -1490,13 +1525,22 @@
         return keyword;
 
 #ifdef AMD_EXTENSIONS
-    case __EXPLICITINTERPAMD:
+    case EXPLICITINTERPAMD:
         if (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
             parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
             return keyword;
         return identifierOrType();
 #endif
 
+#ifdef NV_EXTENSIONS
+    case PERVERTEXNV:
+        if (((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
+            (parseContext.profile == EEsProfile && parseContext.version >= 320)) &&
+            parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case FLAT:
         if (parseContext.profile == EEsProfile && parseContext.version < 300)
             reservedWord();
@@ -1543,6 +1587,16 @@
         return identifierOrReserved(reserved);
     }
 
+#ifdef NV_EXTENSIONS
+    case PERPRIMITIVENV:
+    case PERVIEWNV:
+    case PERTASKNV:
+        if (parseContext.profile != EEsProfile &&
+            (parseContext.version >= 450 || parseContext.extensionTurnedOn(E_GL_NV_mesh_shader)))
+            return keyword;
+        return identifierOrType();
+#endif
+
     default:
         parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
         return 0;
diff --git a/glslang/MachineIndependent/ScanContext.h b/glslang/MachineIndependent/ScanContext.h
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
old mode 100644
new mode 100755
index dd3e159..901b1fd
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -67,6 +67,11 @@
 #include "iomapper.h"
 #include "Initialize.h"
 
+// TODO: this really shouldn't be here, it is only because of the trial addition
+// of printing pre-processed tokens, which requires knowing the string literal
+// token to print ", but none of that seems appropriate for this file.
+#include "preprocessor/PpTokens.h"
+
 namespace { // anonymous namespace for file-local functions and symbols
 
 // Total number of successful initializers of glslang: a refcount
@@ -342,6 +347,31 @@
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
 
+#ifdef NV_EXTENSIONS
+    // check for ray tracing stages
+    if (profile != EEsProfile && version >= 450) {
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGenNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersectNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHitNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHitNV, source,
+            infoSink, commonTable, symbolTables);
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMissNV, source,
+            infoSink, commonTable, symbolTables);
+    }
+    // check for mesh
+    if (profile != EEsProfile && version >= 450)
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source,
+                                   infoSink, commonTable, symbolTables);
+
+    // check for task
+    if (profile != EEsProfile && version >= 450)
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
+                                   infoSink, commonTable, symbolTables);
+#endif
+
     return true;
 }
 
@@ -565,6 +595,28 @@
             version = profile == EEsProfile ? 310 : 420;
         }
         break;
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+    case EShLangCallableNV:
+        if (profile == EEsProfile || version < 460) {
+            correct = false;
+            infoSink.info.message(EPrefixError, "#version: raytracing shaders require non-es profile with version 460 or above");
+            version = 460;
+        }
+        break;
+    case EShLangMeshNV:
+    case EShLangTaskNV:
+        if ((profile == EEsProfile) ||
+            (profile != EEsProfile && version < 450)) {
+            correct = false;
+            infoSink.info.message(EPrefixError, "#version: mesh/task shaders require non-es profile with version 450 or above");
+            version = 450;
+        }
+#endif
     default:
         break;
     }
@@ -965,6 +1017,8 @@
 // DoPreprocessing is a valid ProcessingContext template argument,
 // which only performs the preprocessing step of compilation.
 // It places the result in the "string" argument to its constructor.
+//
+// This is not an officially supported or fully working path.
 struct DoPreprocessing {
     explicit DoPreprocessing(std::string* string): outputString(string) {}
     bool operator()(TParseContextBase& parseContext, TPpContext& ppContext,
@@ -1072,7 +1126,11 @@
                 outputBuffer += ' ';
             }
             lastToken = token;
+            if (token == PpAtomConstString)
+                outputBuffer += "\"";
             outputBuffer += ppToken.name;
+            if (token == PpAtomConstString)
+                outputBuffer += "\"";
         } while (true);
         outputBuffer += '\n';
         *outputString = std::move(outputBuffer);
@@ -1122,6 +1180,9 @@
 // Return: True if there were no issues found in preprocessing,
 //         False if during preprocessing any unknown version, pragmas or
 //         extensions were found.
+//
+// NOTE: Doing just preprocessing to obtain a correct preprocessed shader string
+// is not an officially supported or fully working path.
 bool PreprocessDeferred(
     TCompiler* compiler,
     const char* const shaderStrings[],
@@ -1726,6 +1787,9 @@
 
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
+//
+// NOTE: Doing just preprocessing to obtain a correct preprocessed shader string
+// is not an officially supported or fully working path.
 bool TShader::preprocess(const TBuiltInResource* builtInResources,
                          int defaultVersion, EProfile defaultProfile,
                          bool forceDefaultVersionAndProfile,
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index db46e10..bd7d5aa 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -72,6 +72,9 @@
     case EbtUint64:             mangledName += "u64";    break;
     case EbtBool:               mangledName += 'b';      break;
     case EbtAtomicUint:         mangledName += "au";     break;
+#ifdef NV_EXTENSIONS
+    case EbtAccStructNV:        mangledName += "asnv";   break;
+#endif
     case EbtSampler:
         switch (sampler.type) {
 #ifdef AMD_EXTENSIONS
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
old mode 100755
new mode 100644
index 00af4d4..250f325
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -194,6 +194,9 @@
     extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
+    extensionBehavior[E_GL_KHR_memory_scope_semantics]           = EBhDisable;
+
+    extensionBehavior[E_GL_EXT_shader_atomic_int64]              = EBhDisable;
 
     extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
@@ -232,6 +235,12 @@
     extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
     extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
     extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
+    extensionBehavior[E_GL_NV_shading_rate_image]                    = EBhDisable;
+    extensionBehavior[E_GL_NVX_raytracing]                           = EBhDisable;
+    extensionBehavior[E_GL_NV_fragment_shader_barycentric]           = EBhDisable;
+    extensionBehavior[E_GL_NV_compute_shader_derivatives]            = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_texture_footprint]              = EBhDisable;
+    extensionBehavior[E_GL_NV_mesh_shader]                           = EBhDisable;
 #endif
 
     // AEP
@@ -380,6 +389,8 @@
             "#define GL_KHR_shader_subgroup_clustered 1\n"
             "#define GL_KHR_shader_subgroup_quad 1\n"
 
+            "#define E_GL_EXT_shader_atomic_int64 1\n"
+
 #ifdef AMD_EXTENSIONS
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
@@ -400,6 +411,12 @@
             "#define GL_NV_shader_atomic_int64 1\n"
             "#define GL_NV_conservative_raster_underestimation 1\n"
             "#define GL_NV_shader_subgroup_partitioned 1\n"
+            "#define GL_NV_shading_rate_image 1\n"
+            "#define GL_NVX_raytracing 1\n"
+            "#define GL_NV_fragment_shader_barycentric 1\n"
+            "#define GL_NV_compute_shader_derivatives 1\n"
+            "#define GL_NV_shader_texture_footprint 1\n"
+            "#define GL_NV_mesh_shader 1\n"
 #endif
             "#define GL_KHX_shader_explicit_arithmetic_types 1\n"
             "#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
@@ -487,6 +504,16 @@
     case EShLangGeometry:       return "geometry";
     case EShLangFragment:       return "fragment";
     case EShLangCompute:        return "compute";
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:       return "ray-generation";
+    case EShLangIntersectNV:    return "intersection";
+    case EShLangAnyHitNV:       return "any-hit";
+    case EShLangClosestHitNV:   return "closest-hit";
+    case EShLangMissNV:         return "miss";
+    case EShLangCallableNV:     return "callable";
+    case EShLangMeshNV:         return "mesh";
+    case EShLangTaskNV:         return "task";
+#endif
     default:                    return "unknown stage";
     }
 }
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
old mode 100755
new mode 100644
index 025e01c..e4cbbbb
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -148,6 +148,9 @@
 const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
 const char* const E_GL_KHR_shader_subgroup_clustered        = "GL_KHR_shader_subgroup_clustered";
 const char* const E_GL_KHR_shader_subgroup_quad             = "GL_KHR_shader_subgroup_quad";
+const char* const E_GL_KHR_memory_scope_semantics           = "GL_KHR_memory_scope_semantics";
+
+const char* const E_GL_EXT_shader_atomic_int64              = "GL_EXT_shader_atomic_int64";
 
 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";
@@ -204,6 +207,12 @@
 const char* const E_GL_NV_conservative_raster_underestimation   = "GL_NV_conservative_raster_underestimation";
 const char* const E_GL_NV_shader_noperspective_interpolation    = "GL_NV_shader_noperspective_interpolation";
 const char* const E_GL_NV_shader_subgroup_partitioned           = "GL_NV_shader_subgroup_partitioned";
+const char* const E_GL_NV_shading_rate_image                    = "GL_NV_shading_rate_image";
+const char* const E_GL_NVX_raytracing                           = "GL_NVX_raytracing";
+const char* const E_GL_NV_fragment_shader_barycentric           = "GL_NV_fragment_shader_barycentric";
+const char* const E_GL_NV_compute_shader_derivatives            = "GL_NV_compute_shader_derivatives";
+const char* const E_GL_NV_shader_texture_footprint              = "GL_NV_shader_texture_footprint";
+const char* const E_GL_NV_mesh_shader                           = "GL_NV_mesh_shader";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
old mode 100755
new mode 100644
index 4d16b2b..9d89d46
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -140,13 +140,13 @@
 %token <lex> U8VEC2  U8VEC3  U8VEC4
 %token <lex> VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM
-%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
+%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM PAYLOADNV PAYLOADINNV HITATTRNV
+%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT SUBGROUPCOHERENT NONPRIVATE
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
 %token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
 %token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
-%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
+%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
 
 %token <lex> MAT2X2 MAT2X3 MAT2X4
 %token <lex> MAT3X2 MAT3X3 MAT3X4
@@ -164,6 +164,7 @@
 %token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
 %token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
+%token <lex> ACCSTRUCTNV
 
 // combined image/sampler
 %token <lex> SAMPLER1D SAMPLER2D SAMPLER3D SAMPLERCUBE SAMPLER1DSHADOW SAMPLER2DSHADOW
@@ -1135,7 +1136,7 @@
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
     }
-    | __EXPLICITINTERPAMD {
+    | EXPLICITINTERPAMD {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck($1.loc, "__explicitInterpAMD");
         parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -1144,6 +1145,40 @@
         $$.qualifier.explicitInterp = true;
 #endif
     }
+    | PERVERTEXNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "pervertexNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        $$.init($1.loc);
+        $$.qualifier.pervertexNV = true;
+#endif
+    }
+    | PERPRIMITIVENV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "perprimitiveNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perprimitiveNV");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+#endif
+    }
+    | PERVIEWNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "perviewNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perviewNV");
+        $$.init($1.loc);
+        $$.qualifier.perViewNV = true;
+#endif
+    }
+    | PERTASKNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "taskNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "taskNV");
+        $$.init($1.loc);
+        $$.qualifier.perTaskNV = true;
+#endif
+    }
     ;
 
 layout_qualifier
@@ -1305,11 +1340,45 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqBuffer;
     }
+    | HITATTRNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "hitAttributeNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
+            | EShLangAnyHitNVMask), "hitAttributeNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttrNV;
+#endif
+    }
+    | PAYLOADNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "rayPayloadNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadNV;
+#endif
+    }
+    | PAYLOADINNV {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck($1.loc, "rayPayloadInNVX");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNVX");
+        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadInNV;
+#endif
+    }
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
+#ifdef NV_EXTENSIONS
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+#else
         parseContext.requireStage($1.loc, EShLangCompute, "shared");
+#endif
         $$.init($1.loc);
         $$.qualifier.storage = EvqShared;
     }
@@ -1317,6 +1386,31 @@
         $$.init($1.loc);
         $$.qualifier.coherent = true;
     }
+    | DEVICECOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
+        $$.qualifier.devicecoherent = true;
+    }
+    | QUEUEFAMILYCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
+        $$.qualifier.queuefamilycoherent = true;
+    }
+    | WORKGROUPCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
+        $$.qualifier.workgroupcoherent = true;
+    }
+    | SUBGROUPCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
+        $$.qualifier.subgroupcoherent = true;
+    }
+    | NONPRIVATE {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
+        $$.qualifier.nonprivate = true;
+    }
     | VOLATILE {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -2114,6 +2208,12 @@
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
+    | ACCSTRUCTNV {
+#ifdef NV_EXTENSIONS
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStructNV;
+#endif
+    }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
old mode 100755
new mode 100644
index 96e245e..32ec5ba
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -90,11 +90,11 @@
 
 #line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
 
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULL 0
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -203,320 +203,333 @@
     BUFFER = 335,
     SHARED = 336,
     NONUNIFORM = 337,
-    COHERENT = 338,
-    VOLATILE = 339,
-    RESTRICT = 340,
-    READONLY = 341,
-    WRITEONLY = 342,
-    DVEC2 = 343,
-    DVEC3 = 344,
-    DVEC4 = 345,
-    DMAT2 = 346,
-    DMAT3 = 347,
-    DMAT4 = 348,
-    F16VEC2 = 349,
-    F16VEC3 = 350,
-    F16VEC4 = 351,
-    F16MAT2 = 352,
-    F16MAT3 = 353,
-    F16MAT4 = 354,
-    F32VEC2 = 355,
-    F32VEC3 = 356,
-    F32VEC4 = 357,
-    F32MAT2 = 358,
-    F32MAT3 = 359,
-    F32MAT4 = 360,
-    F64VEC2 = 361,
-    F64VEC3 = 362,
-    F64VEC4 = 363,
-    F64MAT2 = 364,
-    F64MAT3 = 365,
-    F64MAT4 = 366,
-    NOPERSPECTIVE = 367,
-    FLAT = 368,
-    SMOOTH = 369,
-    LAYOUT = 370,
-    __EXPLICITINTERPAMD = 371,
-    MAT2X2 = 372,
-    MAT2X3 = 373,
-    MAT2X4 = 374,
-    MAT3X2 = 375,
-    MAT3X3 = 376,
-    MAT3X4 = 377,
-    MAT4X2 = 378,
-    MAT4X3 = 379,
-    MAT4X4 = 380,
-    DMAT2X2 = 381,
-    DMAT2X3 = 382,
-    DMAT2X4 = 383,
-    DMAT3X2 = 384,
-    DMAT3X3 = 385,
-    DMAT3X4 = 386,
-    DMAT4X2 = 387,
-    DMAT4X3 = 388,
-    DMAT4X4 = 389,
-    F16MAT2X2 = 390,
-    F16MAT2X3 = 391,
-    F16MAT2X4 = 392,
-    F16MAT3X2 = 393,
-    F16MAT3X3 = 394,
-    F16MAT3X4 = 395,
-    F16MAT4X2 = 396,
-    F16MAT4X3 = 397,
-    F16MAT4X4 = 398,
-    F32MAT2X2 = 399,
-    F32MAT2X3 = 400,
-    F32MAT2X4 = 401,
-    F32MAT3X2 = 402,
-    F32MAT3X3 = 403,
-    F32MAT3X4 = 404,
-    F32MAT4X2 = 405,
-    F32MAT4X3 = 406,
-    F32MAT4X4 = 407,
-    F64MAT2X2 = 408,
-    F64MAT2X3 = 409,
-    F64MAT2X4 = 410,
-    F64MAT3X2 = 411,
-    F64MAT3X3 = 412,
-    F64MAT3X4 = 413,
-    F64MAT4X2 = 414,
-    F64MAT4X3 = 415,
-    F64MAT4X4 = 416,
-    ATOMIC_UINT = 417,
-    SAMPLER1D = 418,
-    SAMPLER2D = 419,
-    SAMPLER3D = 420,
-    SAMPLERCUBE = 421,
-    SAMPLER1DSHADOW = 422,
-    SAMPLER2DSHADOW = 423,
-    SAMPLERCUBESHADOW = 424,
-    SAMPLER1DARRAY = 425,
-    SAMPLER2DARRAY = 426,
-    SAMPLER1DARRAYSHADOW = 427,
-    SAMPLER2DARRAYSHADOW = 428,
-    ISAMPLER1D = 429,
-    ISAMPLER2D = 430,
-    ISAMPLER3D = 431,
-    ISAMPLERCUBE = 432,
-    ISAMPLER1DARRAY = 433,
-    ISAMPLER2DARRAY = 434,
-    USAMPLER1D = 435,
-    USAMPLER2D = 436,
-    USAMPLER3D = 437,
-    USAMPLERCUBE = 438,
-    USAMPLER1DARRAY = 439,
-    USAMPLER2DARRAY = 440,
-    SAMPLER2DRECT = 441,
-    SAMPLER2DRECTSHADOW = 442,
-    ISAMPLER2DRECT = 443,
-    USAMPLER2DRECT = 444,
-    SAMPLERBUFFER = 445,
-    ISAMPLERBUFFER = 446,
-    USAMPLERBUFFER = 447,
-    SAMPLERCUBEARRAY = 448,
-    SAMPLERCUBEARRAYSHADOW = 449,
-    ISAMPLERCUBEARRAY = 450,
-    USAMPLERCUBEARRAY = 451,
-    SAMPLER2DMS = 452,
-    ISAMPLER2DMS = 453,
-    USAMPLER2DMS = 454,
-    SAMPLER2DMSARRAY = 455,
-    ISAMPLER2DMSARRAY = 456,
-    USAMPLER2DMSARRAY = 457,
-    SAMPLEREXTERNALOES = 458,
-    F16SAMPLER1D = 459,
-    F16SAMPLER2D = 460,
-    F16SAMPLER3D = 461,
-    F16SAMPLER2DRECT = 462,
-    F16SAMPLERCUBE = 463,
-    F16SAMPLER1DARRAY = 464,
-    F16SAMPLER2DARRAY = 465,
-    F16SAMPLERCUBEARRAY = 466,
-    F16SAMPLERBUFFER = 467,
-    F16SAMPLER2DMS = 468,
-    F16SAMPLER2DMSARRAY = 469,
-    F16SAMPLER1DSHADOW = 470,
-    F16SAMPLER2DSHADOW = 471,
-    F16SAMPLER1DARRAYSHADOW = 472,
-    F16SAMPLER2DARRAYSHADOW = 473,
-    F16SAMPLER2DRECTSHADOW = 474,
-    F16SAMPLERCUBESHADOW = 475,
-    F16SAMPLERCUBEARRAYSHADOW = 476,
-    SAMPLER = 477,
-    SAMPLERSHADOW = 478,
-    TEXTURE1D = 479,
-    TEXTURE2D = 480,
-    TEXTURE3D = 481,
-    TEXTURECUBE = 482,
-    TEXTURE1DARRAY = 483,
-    TEXTURE2DARRAY = 484,
-    ITEXTURE1D = 485,
-    ITEXTURE2D = 486,
-    ITEXTURE3D = 487,
-    ITEXTURECUBE = 488,
-    ITEXTURE1DARRAY = 489,
-    ITEXTURE2DARRAY = 490,
-    UTEXTURE1D = 491,
-    UTEXTURE2D = 492,
-    UTEXTURE3D = 493,
-    UTEXTURECUBE = 494,
-    UTEXTURE1DARRAY = 495,
-    UTEXTURE2DARRAY = 496,
-    TEXTURE2DRECT = 497,
-    ITEXTURE2DRECT = 498,
-    UTEXTURE2DRECT = 499,
-    TEXTUREBUFFER = 500,
-    ITEXTUREBUFFER = 501,
-    UTEXTUREBUFFER = 502,
-    TEXTURECUBEARRAY = 503,
-    ITEXTURECUBEARRAY = 504,
-    UTEXTURECUBEARRAY = 505,
-    TEXTURE2DMS = 506,
-    ITEXTURE2DMS = 507,
-    UTEXTURE2DMS = 508,
-    TEXTURE2DMSARRAY = 509,
-    ITEXTURE2DMSARRAY = 510,
-    UTEXTURE2DMSARRAY = 511,
-    F16TEXTURE1D = 512,
-    F16TEXTURE2D = 513,
-    F16TEXTURE3D = 514,
-    F16TEXTURE2DRECT = 515,
-    F16TEXTURECUBE = 516,
-    F16TEXTURE1DARRAY = 517,
-    F16TEXTURE2DARRAY = 518,
-    F16TEXTURECUBEARRAY = 519,
-    F16TEXTUREBUFFER = 520,
-    F16TEXTURE2DMS = 521,
-    F16TEXTURE2DMSARRAY = 522,
-    SUBPASSINPUT = 523,
-    SUBPASSINPUTMS = 524,
-    ISUBPASSINPUT = 525,
-    ISUBPASSINPUTMS = 526,
-    USUBPASSINPUT = 527,
-    USUBPASSINPUTMS = 528,
-    F16SUBPASSINPUT = 529,
-    F16SUBPASSINPUTMS = 530,
-    IMAGE1D = 531,
-    IIMAGE1D = 532,
-    UIMAGE1D = 533,
-    IMAGE2D = 534,
-    IIMAGE2D = 535,
-    UIMAGE2D = 536,
-    IMAGE3D = 537,
-    IIMAGE3D = 538,
-    UIMAGE3D = 539,
-    IMAGE2DRECT = 540,
-    IIMAGE2DRECT = 541,
-    UIMAGE2DRECT = 542,
-    IMAGECUBE = 543,
-    IIMAGECUBE = 544,
-    UIMAGECUBE = 545,
-    IMAGEBUFFER = 546,
-    IIMAGEBUFFER = 547,
-    UIMAGEBUFFER = 548,
-    IMAGE1DARRAY = 549,
-    IIMAGE1DARRAY = 550,
-    UIMAGE1DARRAY = 551,
-    IMAGE2DARRAY = 552,
-    IIMAGE2DARRAY = 553,
-    UIMAGE2DARRAY = 554,
-    IMAGECUBEARRAY = 555,
-    IIMAGECUBEARRAY = 556,
-    UIMAGECUBEARRAY = 557,
-    IMAGE2DMS = 558,
-    IIMAGE2DMS = 559,
-    UIMAGE2DMS = 560,
-    IMAGE2DMSARRAY = 561,
-    IIMAGE2DMSARRAY = 562,
-    UIMAGE2DMSARRAY = 563,
-    F16IMAGE1D = 564,
-    F16IMAGE2D = 565,
-    F16IMAGE3D = 566,
-    F16IMAGE2DRECT = 567,
-    F16IMAGECUBE = 568,
-    F16IMAGE1DARRAY = 569,
-    F16IMAGE2DARRAY = 570,
-    F16IMAGECUBEARRAY = 571,
-    F16IMAGEBUFFER = 572,
-    F16IMAGE2DMS = 573,
-    F16IMAGE2DMSARRAY = 574,
-    STRUCT = 575,
-    VOID = 576,
-    WHILE = 577,
-    IDENTIFIER = 578,
-    TYPE_NAME = 579,
-    FLOATCONSTANT = 580,
-    DOUBLECONSTANT = 581,
-    INT16CONSTANT = 582,
-    UINT16CONSTANT = 583,
-    INT32CONSTANT = 584,
-    UINT32CONSTANT = 585,
-    INTCONSTANT = 586,
-    UINTCONSTANT = 587,
-    INT64CONSTANT = 588,
-    UINT64CONSTANT = 589,
-    BOOLCONSTANT = 590,
-    FLOAT16CONSTANT = 591,
-    LEFT_OP = 592,
-    RIGHT_OP = 593,
-    INC_OP = 594,
-    DEC_OP = 595,
-    LE_OP = 596,
-    GE_OP = 597,
-    EQ_OP = 598,
-    NE_OP = 599,
-    AND_OP = 600,
-    OR_OP = 601,
-    XOR_OP = 602,
-    MUL_ASSIGN = 603,
-    DIV_ASSIGN = 604,
-    ADD_ASSIGN = 605,
-    MOD_ASSIGN = 606,
-    LEFT_ASSIGN = 607,
-    RIGHT_ASSIGN = 608,
-    AND_ASSIGN = 609,
-    XOR_ASSIGN = 610,
-    OR_ASSIGN = 611,
-    SUB_ASSIGN = 612,
-    LEFT_PAREN = 613,
-    RIGHT_PAREN = 614,
-    LEFT_BRACKET = 615,
-    RIGHT_BRACKET = 616,
-    LEFT_BRACE = 617,
-    RIGHT_BRACE = 618,
-    DOT = 619,
-    COMMA = 620,
-    COLON = 621,
-    EQUAL = 622,
-    SEMICOLON = 623,
-    BANG = 624,
-    DASH = 625,
-    TILDE = 626,
-    PLUS = 627,
-    STAR = 628,
-    SLASH = 629,
-    PERCENT = 630,
-    LEFT_ANGLE = 631,
-    RIGHT_ANGLE = 632,
-    VERTICAL_BAR = 633,
-    CARET = 634,
-    AMPERSAND = 635,
-    QUESTION = 636,
-    INVARIANT = 637,
-    PRECISE = 638,
-    HIGH_PRECISION = 639,
-    MEDIUM_PRECISION = 640,
-    LOW_PRECISION = 641,
-    PRECISION = 642,
-    PACKED = 643,
-    RESOURCE = 644,
-    SUPERP = 645
+    PAYLOADNV = 338,
+    PAYLOADINNV = 339,
+    HITATTRNV = 340,
+    COHERENT = 341,
+    VOLATILE = 342,
+    RESTRICT = 343,
+    READONLY = 344,
+    WRITEONLY = 345,
+    DEVICECOHERENT = 346,
+    QUEUEFAMILYCOHERENT = 347,
+    WORKGROUPCOHERENT = 348,
+    SUBGROUPCOHERENT = 349,
+    NONPRIVATE = 350,
+    DVEC2 = 351,
+    DVEC3 = 352,
+    DVEC4 = 353,
+    DMAT2 = 354,
+    DMAT3 = 355,
+    DMAT4 = 356,
+    F16VEC2 = 357,
+    F16VEC3 = 358,
+    F16VEC4 = 359,
+    F16MAT2 = 360,
+    F16MAT3 = 361,
+    F16MAT4 = 362,
+    F32VEC2 = 363,
+    F32VEC3 = 364,
+    F32VEC4 = 365,
+    F32MAT2 = 366,
+    F32MAT3 = 367,
+    F32MAT4 = 368,
+    F64VEC2 = 369,
+    F64VEC3 = 370,
+    F64VEC4 = 371,
+    F64MAT2 = 372,
+    F64MAT3 = 373,
+    F64MAT4 = 374,
+    NOPERSPECTIVE = 375,
+    FLAT = 376,
+    SMOOTH = 377,
+    LAYOUT = 378,
+    EXPLICITINTERPAMD = 379,
+    PERVERTEXNV = 380,
+    PERPRIMITIVENV = 381,
+    PERVIEWNV = 382,
+    PERTASKNV = 383,
+    MAT2X2 = 384,
+    MAT2X3 = 385,
+    MAT2X4 = 386,
+    MAT3X2 = 387,
+    MAT3X3 = 388,
+    MAT3X4 = 389,
+    MAT4X2 = 390,
+    MAT4X3 = 391,
+    MAT4X4 = 392,
+    DMAT2X2 = 393,
+    DMAT2X3 = 394,
+    DMAT2X4 = 395,
+    DMAT3X2 = 396,
+    DMAT3X3 = 397,
+    DMAT3X4 = 398,
+    DMAT4X2 = 399,
+    DMAT4X3 = 400,
+    DMAT4X4 = 401,
+    F16MAT2X2 = 402,
+    F16MAT2X3 = 403,
+    F16MAT2X4 = 404,
+    F16MAT3X2 = 405,
+    F16MAT3X3 = 406,
+    F16MAT3X4 = 407,
+    F16MAT4X2 = 408,
+    F16MAT4X3 = 409,
+    F16MAT4X4 = 410,
+    F32MAT2X2 = 411,
+    F32MAT2X3 = 412,
+    F32MAT2X4 = 413,
+    F32MAT3X2 = 414,
+    F32MAT3X3 = 415,
+    F32MAT3X4 = 416,
+    F32MAT4X2 = 417,
+    F32MAT4X3 = 418,
+    F32MAT4X4 = 419,
+    F64MAT2X2 = 420,
+    F64MAT2X3 = 421,
+    F64MAT2X4 = 422,
+    F64MAT3X2 = 423,
+    F64MAT3X3 = 424,
+    F64MAT3X4 = 425,
+    F64MAT4X2 = 426,
+    F64MAT4X3 = 427,
+    F64MAT4X4 = 428,
+    ATOMIC_UINT = 429,
+    ACCSTRUCTNV = 430,
+    SAMPLER1D = 431,
+    SAMPLER2D = 432,
+    SAMPLER3D = 433,
+    SAMPLERCUBE = 434,
+    SAMPLER1DSHADOW = 435,
+    SAMPLER2DSHADOW = 436,
+    SAMPLERCUBESHADOW = 437,
+    SAMPLER1DARRAY = 438,
+    SAMPLER2DARRAY = 439,
+    SAMPLER1DARRAYSHADOW = 440,
+    SAMPLER2DARRAYSHADOW = 441,
+    ISAMPLER1D = 442,
+    ISAMPLER2D = 443,
+    ISAMPLER3D = 444,
+    ISAMPLERCUBE = 445,
+    ISAMPLER1DARRAY = 446,
+    ISAMPLER2DARRAY = 447,
+    USAMPLER1D = 448,
+    USAMPLER2D = 449,
+    USAMPLER3D = 450,
+    USAMPLERCUBE = 451,
+    USAMPLER1DARRAY = 452,
+    USAMPLER2DARRAY = 453,
+    SAMPLER2DRECT = 454,
+    SAMPLER2DRECTSHADOW = 455,
+    ISAMPLER2DRECT = 456,
+    USAMPLER2DRECT = 457,
+    SAMPLERBUFFER = 458,
+    ISAMPLERBUFFER = 459,
+    USAMPLERBUFFER = 460,
+    SAMPLERCUBEARRAY = 461,
+    SAMPLERCUBEARRAYSHADOW = 462,
+    ISAMPLERCUBEARRAY = 463,
+    USAMPLERCUBEARRAY = 464,
+    SAMPLER2DMS = 465,
+    ISAMPLER2DMS = 466,
+    USAMPLER2DMS = 467,
+    SAMPLER2DMSARRAY = 468,
+    ISAMPLER2DMSARRAY = 469,
+    USAMPLER2DMSARRAY = 470,
+    SAMPLEREXTERNALOES = 471,
+    F16SAMPLER1D = 472,
+    F16SAMPLER2D = 473,
+    F16SAMPLER3D = 474,
+    F16SAMPLER2DRECT = 475,
+    F16SAMPLERCUBE = 476,
+    F16SAMPLER1DARRAY = 477,
+    F16SAMPLER2DARRAY = 478,
+    F16SAMPLERCUBEARRAY = 479,
+    F16SAMPLERBUFFER = 480,
+    F16SAMPLER2DMS = 481,
+    F16SAMPLER2DMSARRAY = 482,
+    F16SAMPLER1DSHADOW = 483,
+    F16SAMPLER2DSHADOW = 484,
+    F16SAMPLER1DARRAYSHADOW = 485,
+    F16SAMPLER2DARRAYSHADOW = 486,
+    F16SAMPLER2DRECTSHADOW = 487,
+    F16SAMPLERCUBESHADOW = 488,
+    F16SAMPLERCUBEARRAYSHADOW = 489,
+    SAMPLER = 490,
+    SAMPLERSHADOW = 491,
+    TEXTURE1D = 492,
+    TEXTURE2D = 493,
+    TEXTURE3D = 494,
+    TEXTURECUBE = 495,
+    TEXTURE1DARRAY = 496,
+    TEXTURE2DARRAY = 497,
+    ITEXTURE1D = 498,
+    ITEXTURE2D = 499,
+    ITEXTURE3D = 500,
+    ITEXTURECUBE = 501,
+    ITEXTURE1DARRAY = 502,
+    ITEXTURE2DARRAY = 503,
+    UTEXTURE1D = 504,
+    UTEXTURE2D = 505,
+    UTEXTURE3D = 506,
+    UTEXTURECUBE = 507,
+    UTEXTURE1DARRAY = 508,
+    UTEXTURE2DARRAY = 509,
+    TEXTURE2DRECT = 510,
+    ITEXTURE2DRECT = 511,
+    UTEXTURE2DRECT = 512,
+    TEXTUREBUFFER = 513,
+    ITEXTUREBUFFER = 514,
+    UTEXTUREBUFFER = 515,
+    TEXTURECUBEARRAY = 516,
+    ITEXTURECUBEARRAY = 517,
+    UTEXTURECUBEARRAY = 518,
+    TEXTURE2DMS = 519,
+    ITEXTURE2DMS = 520,
+    UTEXTURE2DMS = 521,
+    TEXTURE2DMSARRAY = 522,
+    ITEXTURE2DMSARRAY = 523,
+    UTEXTURE2DMSARRAY = 524,
+    F16TEXTURE1D = 525,
+    F16TEXTURE2D = 526,
+    F16TEXTURE3D = 527,
+    F16TEXTURE2DRECT = 528,
+    F16TEXTURECUBE = 529,
+    F16TEXTURE1DARRAY = 530,
+    F16TEXTURE2DARRAY = 531,
+    F16TEXTURECUBEARRAY = 532,
+    F16TEXTUREBUFFER = 533,
+    F16TEXTURE2DMS = 534,
+    F16TEXTURE2DMSARRAY = 535,
+    SUBPASSINPUT = 536,
+    SUBPASSINPUTMS = 537,
+    ISUBPASSINPUT = 538,
+    ISUBPASSINPUTMS = 539,
+    USUBPASSINPUT = 540,
+    USUBPASSINPUTMS = 541,
+    F16SUBPASSINPUT = 542,
+    F16SUBPASSINPUTMS = 543,
+    IMAGE1D = 544,
+    IIMAGE1D = 545,
+    UIMAGE1D = 546,
+    IMAGE2D = 547,
+    IIMAGE2D = 548,
+    UIMAGE2D = 549,
+    IMAGE3D = 550,
+    IIMAGE3D = 551,
+    UIMAGE3D = 552,
+    IMAGE2DRECT = 553,
+    IIMAGE2DRECT = 554,
+    UIMAGE2DRECT = 555,
+    IMAGECUBE = 556,
+    IIMAGECUBE = 557,
+    UIMAGECUBE = 558,
+    IMAGEBUFFER = 559,
+    IIMAGEBUFFER = 560,
+    UIMAGEBUFFER = 561,
+    IMAGE1DARRAY = 562,
+    IIMAGE1DARRAY = 563,
+    UIMAGE1DARRAY = 564,
+    IMAGE2DARRAY = 565,
+    IIMAGE2DARRAY = 566,
+    UIMAGE2DARRAY = 567,
+    IMAGECUBEARRAY = 568,
+    IIMAGECUBEARRAY = 569,
+    UIMAGECUBEARRAY = 570,
+    IMAGE2DMS = 571,
+    IIMAGE2DMS = 572,
+    UIMAGE2DMS = 573,
+    IMAGE2DMSARRAY = 574,
+    IIMAGE2DMSARRAY = 575,
+    UIMAGE2DMSARRAY = 576,
+    F16IMAGE1D = 577,
+    F16IMAGE2D = 578,
+    F16IMAGE3D = 579,
+    F16IMAGE2DRECT = 580,
+    F16IMAGECUBE = 581,
+    F16IMAGE1DARRAY = 582,
+    F16IMAGE2DARRAY = 583,
+    F16IMAGECUBEARRAY = 584,
+    F16IMAGEBUFFER = 585,
+    F16IMAGE2DMS = 586,
+    F16IMAGE2DMSARRAY = 587,
+    STRUCT = 588,
+    VOID = 589,
+    WHILE = 590,
+    IDENTIFIER = 591,
+    TYPE_NAME = 592,
+    FLOATCONSTANT = 593,
+    DOUBLECONSTANT = 594,
+    INT16CONSTANT = 595,
+    UINT16CONSTANT = 596,
+    INT32CONSTANT = 597,
+    UINT32CONSTANT = 598,
+    INTCONSTANT = 599,
+    UINTCONSTANT = 600,
+    INT64CONSTANT = 601,
+    UINT64CONSTANT = 602,
+    BOOLCONSTANT = 603,
+    FLOAT16CONSTANT = 604,
+    LEFT_OP = 605,
+    RIGHT_OP = 606,
+    INC_OP = 607,
+    DEC_OP = 608,
+    LE_OP = 609,
+    GE_OP = 610,
+    EQ_OP = 611,
+    NE_OP = 612,
+    AND_OP = 613,
+    OR_OP = 614,
+    XOR_OP = 615,
+    MUL_ASSIGN = 616,
+    DIV_ASSIGN = 617,
+    ADD_ASSIGN = 618,
+    MOD_ASSIGN = 619,
+    LEFT_ASSIGN = 620,
+    RIGHT_ASSIGN = 621,
+    AND_ASSIGN = 622,
+    XOR_ASSIGN = 623,
+    OR_ASSIGN = 624,
+    SUB_ASSIGN = 625,
+    LEFT_PAREN = 626,
+    RIGHT_PAREN = 627,
+    LEFT_BRACKET = 628,
+    RIGHT_BRACKET = 629,
+    LEFT_BRACE = 630,
+    RIGHT_BRACE = 631,
+    DOT = 632,
+    COMMA = 633,
+    COLON = 634,
+    EQUAL = 635,
+    SEMICOLON = 636,
+    BANG = 637,
+    DASH = 638,
+    TILDE = 639,
+    PLUS = 640,
+    STAR = 641,
+    SLASH = 642,
+    PERCENT = 643,
+    LEFT_ANGLE = 644,
+    RIGHT_ANGLE = 645,
+    VERTICAL_BAR = 646,
+    CARET = 647,
+    AMPERSAND = 648,
+    QUESTION = 649,
+    INVARIANT = 650,
+    PRECISE = 651,
+    HIGH_PRECISION = 652,
+    MEDIUM_PRECISION = 653,
+    LOW_PRECISION = 654,
+    PRECISION = 655,
+    PACKED = 656,
+    RESOURCE = 657,
+    SUPERP = 658
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
+
 union YYSTYPE
 {
 #line 70 "MachineIndependent/glslang.y" /* yacc.c:355  */
@@ -554,8 +567,10 @@
         };
     } interm;
 
-#line 558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
+
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -583,7 +598,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -640,11 +655,30 @@
 # endif
 #endif
 
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if (! defined __GNUC__ || __GNUC__ < 2 \
-      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
-#  define __attribute__(Spec) /* empty */
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
 # endif
 #endif
 
@@ -804,23 +838,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  366
+#define YYFINAL  379
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   8949
+#define YYLAST   9248
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  391
+#define YYNTOKENS  404
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  107
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  556
+#define YYNRULES  569
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  697
+#define YYNSTATES  710
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   645
+#define YYMAXUTOK   658
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -893,69 +927,71 @@
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   293,   293,   299,   302,   306,   310,   313,   317,   321,
-     325,   329,   333,   336,   340,   344,   347,   355,   358,   361,
-     364,   367,   372,   380,   387,   394,   400,   404,   411,   414,
-     420,   427,   437,   445,   450,   477,   485,   491,   495,   499,
-     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,   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
+       0,   294,   294,   300,   303,   307,   311,   314,   318,   322,
+     326,   330,   334,   337,   341,   345,   348,   356,   359,   362,
+     365,   368,   373,   381,   388,   395,   401,   405,   412,   415,
+     421,   428,   438,   446,   451,   478,   486,   492,   496,   500,
+     520,   521,   522,   523,   529,   530,   535,   540,   549,   550,
+     555,   563,   564,   570,   579,   580,   585,   590,   595,   603,
+     604,   612,   623,   624,   633,   634,   643,   644,   653,   654,
+     662,   663,   671,   672,   680,   681,   681,   699,   700,   716,
+     720,   724,   728,   733,   737,   741,   745,   749,   753,   757,
+     764,   767,   778,   785,   790,   795,   803,   807,   811,   815,
+     820,   825,   834,   834,   845,   849,   856,   863,   866,   873,
+     881,   901,   924,   939,   964,   975,   985,   995,  1005,  1014,
+    1017,  1021,  1025,  1030,  1038,  1043,  1048,  1053,  1058,  1067,
+    1078,  1105,  1114,  1121,  1128,  1139,  1148,  1158,  1166,  1174,
+    1185,  1191,  1194,  1201,  1205,  1209,  1217,  1226,  1229,  1240,
+    1243,  1246,  1250,  1254,  1258,  1262,  1268,  1272,  1284,  1298,
+    1303,  1309,  1315,  1322,  1328,  1333,  1338,  1343,  1353,  1363,
+    1373,  1385,  1389,  1394,  1399,  1404,  1409,  1414,  1418,  1422,
+    1426,  1430,  1436,  1445,  1452,  1455,  1463,  1467,  1476,  1481,
+    1489,  1493,  1503,  1507,  1511,  1516,  1521,  1526,  1531,  1535,
+    1540,  1545,  1550,  1555,  1560,  1565,  1570,  1575,  1580,  1584,
+    1589,  1594,  1599,  1605,  1611,  1617,  1623,  1629,  1635,  1641,
+    1647,  1653,  1659,  1665,  1671,  1676,  1681,  1686,  1691,  1696,
+    1701,  1707,  1713,  1719,  1725,  1731,  1737,  1743,  1749,  1755,
+    1761,  1767,  1773,  1779,  1785,  1791,  1797,  1803,  1809,  1815,
+    1821,  1827,  1833,  1839,  1845,  1851,  1857,  1863,  1868,  1873,
+    1878,  1883,  1888,  1893,  1898,  1903,  1908,  1913,  1918,  1923,
+    1929,  1935,  1941,  1947,  1953,  1959,  1965,  1971,  1977,  1983,
+    1989,  1995,  2001,  2007,  2013,  2019,  2025,  2031,  2037,  2043,
+    2049,  2055,  2061,  2067,  2073,  2079,  2085,  2091,  2097,  2103,
+    2109,  2115,  2121,  2127,  2133,  2139,  2145,  2151,  2157,  2163,
+    2169,  2175,  2181,  2187,  2193,  2199,  2205,  2211,  2217,  2222,
+    2227,  2232,  2237,  2242,  2247,  2252,  2257,  2262,  2267,  2272,
+    2277,  2282,  2287,  2295,  2303,  2311,  2319,  2327,  2335,  2343,
+    2351,  2359,  2367,  2375,  2383,  2391,  2396,  2401,  2406,  2411,
+    2416,  2421,  2426,  2431,  2436,  2441,  2446,  2451,  2456,  2461,
+    2466,  2471,  2479,  2487,  2492,  2497,  2502,  2510,  2515,  2520,
+    2525,  2533,  2538,  2543,  2548,  2556,  2561,  2566,  2571,  2576,
+    2581,  2589,  2594,  2602,  2607,  2615,  2620,  2628,  2633,  2641,
+    2646,  2654,  2659,  2667,  2672,  2677,  2682,  2687,  2692,  2697,
+    2702,  2707,  2712,  2717,  2722,  2727,  2732,  2737,  2742,  2750,
+    2755,  2760,  2765,  2773,  2778,  2783,  2788,  2796,  2801,  2806,
+    2811,  2819,  2824,  2829,  2834,  2842,  2847,  2852,  2857,  2865,
+    2870,  2875,  2880,  2888,  2893,  2898,  2903,  2911,  2916,  2921,
+    2926,  2934,  2939,  2944,  2949,  2957,  2962,  2967,  2972,  2980,
+    2985,  2990,  2995,  3003,  3008,  3013,  3018,  3026,  3031,  3036,
+    3041,  3049,  3054,  3059,  3064,  3072,  3077,  3082,  3088,  3094,
+    3100,  3109,  3118,  3124,  3130,  3136,  3142,  3147,  3163,  3168,
+    3173,  3181,  3181,  3192,  3192,  3202,  3205,  3218,  3240,  3267,
+    3271,  3277,  3282,  3293,  3296,  3302,  3311,  3314,  3320,  3324,
+    3325,  3331,  3332,  3333,  3334,  3335,  3336,  3337,  3341,  3342,
+    3346,  3342,  3358,  3359,  3363,  3363,  3370,  3370,  3384,  3387,
+    3395,  3403,  3414,  3415,  3419,  3422,  3428,  3435,  3439,  3447,
+    3451,  3464,  3467,  3473,  3473,  3493,  3496,  3502,  3514,  3526,
+    3529,  3535,  3535,  3550,  3550,  3566,  3566,  3587,  3590,  3596,
+    3599,  3605,  3609,  3616,  3621,  3626,  3633,  3636,  3645,  3649,
+    3658,  3661,  3664,  3672,  3672,  3694,  3700,  3703,  3708,  3711
 };
 #endif
 
@@ -976,21 +1012,24 @@
   "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
   "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
   "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
-  "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
-  "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4",
+  "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "COHERENT",
+  "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DEVICECOHERENT",
+  "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", "SUBGROUPCOHERENT",
+  "NONPRIVATE", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4",
   "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4",
   "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4",
   "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4",
-  "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT", "__EXPLICITINTERPAMD",
-  "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2",
-  "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2",
-  "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2",
-  "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4",
-  "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3",
-  "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2",
-  "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4",
-  "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3",
-  "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D",
+  "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT", "EXPLICITINTERPAMD",
+  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "MAT2X2",
+  "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3",
+  "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3",
+  "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3",
+  "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2",
+  "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4",
+  "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
+  "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
+  "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
+  "ATOMIC_UINT", "ACCSTRUCTNV", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D",
   "SAMPLERCUBE", "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
   "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
   "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
@@ -1082,7 +1121,7 @@
   "for_init_statement", "conditionopt", "for_rest_statement",
   "jump_statement", "translation_unit", "external_declaration",
   "function_definition", "$@13", "attribute", "attribute_list",
-  "single_attribute", YY_NULL
+  "single_attribute", YY_NULLPTR
 };
 #endif
 
@@ -1130,16 +1169,17 @@
      615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
      625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
      635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
-     645
+     645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
+     655,   656,   657,   658
 };
 # endif
 
-#define YYPACT_NINF -634
+#define YYPACT_NINF -645
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-634)))
+  (!!((Yystate) == (-645)))
 
-#define YYTABLE_NINF -502
+#define YYTABLE_NINF -515
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1148,76 +1188,77 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    3391,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -311,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -295,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -301,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -241,  -634,  -302,  -342,
-    -290,  -254,  5696,  -300,  -634,  -210,  -634,  -634,  -634,  -634,
-    4160,  -634,  -634,  -634,  -634,  -219,  -634,  -634,   696,  -634,
-    -634,  -189,   -69,  -207,  -634,  8625,  -320,  -634,  -634,  -203,
-    -634,  5696,  -634,  -634,  -634,  5696,  -155,  -154,  -634,  -324,
-    -288,  -634,  -634,  -634,  6417,  -190,  -634,  -634,  -634,  -292,
-    -634,  -196,  -287,  -634,  -634,  5696,  -195,  -634,  -306,  1081,
-    -634,  -634,  -634,  -634,  -219,  -325,  -634,  6785,  -310,  -634,
-    -151,  -634,  -277,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  7889,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  -309,  -634,  -634,  -634,
-    -185,  -283,  8257,  -183,  -634,  7889,  -227,  -263,  -299,  -318,
-    -194,  -204,  -202,  -200,  -165,  -166,  -321,  -179,  -634,  -634,
-    7153,  -634,  -140,  7889,  -634,   -69,  5696,  5696,  -139,  4544,
-    -634,  -634,  -634,  -182,  -180,  -634,  -173,  -169,  -178,  7521,
-    -164,  7889,  -174,  -163,  -167,  -162,  -634,  -634,  -252,  -634,
-    -634,  -237,  -634,  -342,  -161,  -158,  -634,  -634,  -634,  -634,
-    1466,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-     -19,  -190,  6785,  -296,  6785,  -634,  -634,  6785,  5696,  -634,
-    -127,  -634,  -634,  -634,  -278,  -634,  -634,  7889,  -121,  -634,
-    -634,  7889,  -156,  -634,  -634,  -634,  7889,  7889,  7889,  7889,
-    7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,
-    7889,  7889,  7889,  7889,  7889,  -634,  -634,  -634,  -157,  -634,
-    -634,  -634,  -634,  4928,  -139,  -219,  -236,  -634,  -634,  -634,
-    -634,  -634,  1851,  -634,  7889,  -634,  -634,  -230,  7889,  -213,
-    -634,  -634,  -118,  -634,  1851,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  -634,  -634,
-    -634,  -634,  -634,  -634,  -634,  6785,  -634,  -270,  -634,  5312,
-    -634,  -634,  -153,  -150,  -634,  -634,  -634,  -634,  -634,  -227,
-    -227,  -263,  -263,  -299,  -299,  -299,  -299,  -318,  -318,  -194,
-    -204,  -202,  -200,  -165,  -166,  7889,  -634,  -634,  -226,  -190,
-    -139,  -634,  -113,  3006,  -275,  -634,  -253,  -634,  3776,  -148,
-    -282,  -634,  1851,  -634,  -634,  -634,  -634,  6049,  -634,  -634,
-    -208,  -634,  -634,  -147,  -634,  -634,  3776,  -146,  -634,  -150,
-    -111,  5696,  -145,  7889,  -144,  -118,  -143,  -634,  -634,  7889,
-    7889,  -634,  -149,  -141,   196,  -136,  2621,  -634,  -116,  -120,
-    2236,  -137,  -634,  -634,  -634,  -634,  -239,  7889,  2236,  -146,
-    -634,  -634,  1851,  6785,  -634,  -634,  -634,  -634,  -119,  -150,
-    -634,  -634,  1851,  -112,  -634,  -634,  -634
+    3495,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -317,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -266,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -314,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -273,
+    -645,  -315,  -355,  -335,  -299,  5878,  -286,  -645,  -239,  -645,
+    -645,  -645,  -645,  4290,  -645,  -645,  -645,  -645,  -233,  -645,
+    -645,   709,  -645,  -645,  -181,   -69,  -218,  -645,  8911,  -340,
+    -645,  -645,  -212,  -645,  5878,  -645,  -645,  -645,  5878,  -168,
+    -167,  -645,  -337,  -303,  -645,  -645,  -645,  6625,  -203,  -645,
+    -645,  -645,  -305,  -645,  -209,  -304,  -645,  -645,  5878,  -208,
+    -645,  -333,  1107,  -645,  -645,  -645,  -645,  -233,  -323,  -645,
+    7006,  -311,  -645,  -164,  -645,  -275,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  8149,
+    8149,  8149,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -322,
+    -645,  -645,  -645,  -198,  -296,  8530,  -196,  -645,  8149,  -251,
+    -292,  -222,  -331,  -225,  -217,  -215,  -213,  -178,  -179,  -334,
+    -192,  -645,  -645,  7387,  -645,  -153,  8149,  -645,   -69,  5878,
+    5878,  -152,  4687,  -645,  -645,  -645,  -195,  -194,  -645,  -186,
+    -183,  -191,  7768,  -182,  8149,  -187,  -177,  -180,  -176,  -645,
+    -645,  -216,  -645,  -645,  -274,  -645,  -355,  -175,  -174,  -645,
+    -645,  -645,  -645,  1505,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -645,   -19,  -203,  7006,  -310,  7006,  -645,  -645,
+    7006,  5878,  -645,  -135,  -645,  -645,  -645,  -295,  -645,  -645,
+    8149,  -134,  -645,  -645,  8149,  -169,  -645,  -645,  -645,  8149,
+    8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,
+    8149,  8149,  8149,  8149,  8149,  8149,  8149,  8149,  -645,  -645,
+    -645,  -170,  -645,  -645,  -645,  -645,  5084,  -152,  -233,  -268,
+    -645,  -645,  -645,  -645,  -645,  1903,  -645,  8149,  -645,  -645,
+    -263,  8149,  -240,  -645,  -645,  -131,  -645,  1903,  -645,  -645,
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  8149,
+    8149,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  7006,  -645,
+    -267,  -645,  5481,  -645,  -645,  -166,  -163,  -645,  -645,  -645,
+    -645,  -645,  -251,  -251,  -292,  -292,  -222,  -222,  -222,  -222,
+    -331,  -331,  -225,  -217,  -215,  -213,  -178,  -179,  8149,  -645,
+    -645,  -261,  -203,  -152,  -645,  -126,  3097,  -291,  -645,  -288,
+    -645,  3893,  -161,  -336,  -645,  1903,  -645,  -645,  -645,  -645,
+    6244,  -645,  -645,  -236,  -645,  -645,  -160,  -645,  -645,  3893,
+    -159,  -645,  -163,  -124,  5878,  -158,  8149,  -157,  -131,  -156,
+    -645,  -645,  8149,  8149,  -645,  -162,  -154,   196,  -149,  2699,
+    -645,  -148,  -151,  2301,  -150,  -645,  -645,  -645,  -645,  -284,
+    8149,  2301,  -159,  -645,  -645,  1903,  7006,  -645,  -645,  -645,
+    -645,  -130,  -163,  -645,  -645,  1903,  -146,  -645,  -645,  -645
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1225,108 +1266,109 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   153,   154,   183,   181,   184,   182,   185,   152,   196,
-     186,   187,   194,   195,   192,   193,   190,   191,   188,   189,
-     169,   212,   213,   214,   215,   216,   217,   230,   231,   232,
-     227,   228,   229,   242,   243,   244,   224,   225,   226,   239,
-     240,   241,   221,   222,   223,   236,   237,   238,   218,   219,
-     220,   233,   234,   235,   197,   198,   199,   245,   246,   247,
-     158,   156,   157,   155,   161,   159,   160,   162,   163,   171,
-     164,   165,   166,   167,   168,   200,   201,   202,   257,   258,
-     259,   203,   204,   205,   269,   270,   271,   206,   207,   208,
-     281,   282,   283,   209,   210,   211,   293,   294,   295,   134,
-     133,   132,     0,   135,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   332,   333,   334,   335,   336,   337,   339,   340,   341,
-     342,   343,   344,   346,   347,   350,   351,   352,   354,   355,
-     317,   318,   338,   345,   356,   358,   359,   360,   362,   363,
-     454,   319,   320,   321,   348,   322,   326,   327,   330,   353,
-     357,   361,   323,   324,   328,   329,   349,   325,   331,   364,
-     365,   366,   368,   370,   372,   374,   376,   380,   381,   382,
-     383,   384,   385,   387,   388,   389,   390,   391,   392,   394,
-     396,   397,   398,   400,   401,   378,   386,   393,   402,   404,
-     405,   406,   408,   409,   367,   369,   371,   395,   373,   375,
-     377,   379,   399,   403,   407,   455,   456,   459,   460,   461,
-     462,   457,   458,   410,   412,   413,   414,   416,   417,   418,
-     420,   421,   422,   424,   425,   426,   428,   429,   430,   432,
-     433,   434,   436,   437,   438,   440,   441,   442,   444,   445,
-     446,   448,   449,   450,   452,   453,   411,   415,   419,   423,
-     427,   435,   439,   443,   431,   447,   451,     0,   180,   464,
-     549,   131,   142,   465,   466,   467,     0,   548,     0,   550,
-       0,   108,   107,     0,   119,   124,   149,   148,   146,   150,
-       0,   143,   145,   151,   129,   174,   147,   463,     0,   545,
-     547,     0,     0,     0,   470,     0,     0,    96,    93,     0,
-     106,     0,   115,   109,   117,     0,   118,     0,    94,   125,
-       0,    99,   144,   130,     0,   175,     1,   546,   172,     0,
-     141,   139,     0,   137,   468,     0,     0,    97,     0,     0,
-     551,   110,   114,   116,   112,   120,   111,     0,   126,   102,
-       0,   100,     0,     2,    12,    13,    10,    11,     4,     5,
-       6,     7,     8,     9,    15,    14,     0,     0,     0,   176,
-      42,    41,    43,    40,     3,    17,    36,    19,    24,    25,
-       0,     0,    29,     0,    44,     0,    48,    51,    54,    59,
-      62,    64,    66,    68,    70,    72,    74,     0,    35,    33,
-       0,   170,     0,     0,   136,     0,     0,     0,     0,     0,
-     472,    95,    98,     0,     0,   530,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   496,   505,   509,    44,    77,
-      90,     0,   485,     0,   151,   129,   488,   507,   487,   486,
-       0,   489,   490,   511,   491,   518,   492,   493,   526,   494,
-       0,   113,     0,   121,     0,   480,   128,     0,     0,   104,
-       0,   101,    37,    38,     0,    21,    22,     0,     0,    27,
-      26,     0,   180,    30,    32,    39,     0,     0,     0,     0,
+       0,   157,   158,   195,   193,   196,   194,   197,   156,   208,
+     198,   199,   206,   207,   204,   205,   202,   203,   200,   201,
+     181,   224,   225,   226,   227,   228,   229,   242,   243,   244,
+     239,   240,   241,   254,   255,   256,   236,   237,   238,   251,
+     252,   253,   233,   234,   235,   248,   249,   250,   230,   231,
+     232,   245,   246,   247,   209,   210,   211,   257,   258,   259,
+     162,   160,   161,   159,   165,   163,   164,   166,   170,   183,
+     168,   169,   167,   171,   177,   178,   179,   180,   172,   173,
+     174,   175,   176,   212,   213,   214,   269,   270,   271,   215,
+     216,   217,   281,   282,   283,   218,   219,   220,   293,   294,
+     295,   221,   222,   223,   305,   306,   307,   134,   133,   132,
+       0,   135,   136,   137,   138,   139,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   318,   317,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   345,   346,   347,   348,   349,   350,
+     352,   353,   354,   355,   356,   357,   359,   360,   363,   364,
+     365,   367,   368,   330,   331,   351,   358,   369,   371,   372,
+     373,   375,   376,   467,   332,   333,   334,   361,   335,   339,
+     340,   343,   366,   370,   374,   336,   337,   341,   342,   362,
+     338,   344,   377,   378,   379,   381,   383,   385,   387,   389,
+     393,   394,   395,   396,   397,   398,   400,   401,   402,   403,
+     404,   405,   407,   409,   410,   411,   413,   414,   391,   399,
+     406,   415,   417,   418,   419,   421,   422,   380,   382,   384,
+     408,   386,   388,   390,   392,   412,   416,   420,   468,   469,
+     472,   473,   474,   475,   470,   471,   423,   425,   426,   427,
+     429,   430,   431,   433,   434,   435,   437,   438,   439,   441,
+     442,   443,   445,   446,   447,   449,   450,   451,   453,   454,
+     455,   457,   458,   459,   461,   462,   463,   465,   466,   424,
+     428,   432,   436,   440,   448,   452,   456,   444,   460,   464,
+       0,   192,   477,   562,   131,   146,   478,   479,   480,     0,
+     561,     0,   563,     0,   108,   107,     0,   119,   124,   153,
+     152,   150,   154,     0,   147,   149,   155,   129,   186,   151,
+     476,     0,   558,   560,     0,     0,     0,   483,     0,     0,
+      96,    93,     0,   106,     0,   115,   109,   117,     0,   118,
+       0,    94,   125,     0,    99,   148,   130,     0,   187,     1,
+     559,   184,     0,   145,   143,     0,   141,   481,     0,     0,
+      97,     0,     0,   564,   110,   114,   116,   112,   120,   111,
+       0,   126,   102,     0,   100,     0,     2,    12,    13,    10,
+      11,     4,     5,     6,     7,     8,     9,    15,    14,     0,
+       0,     0,   188,    42,    41,    43,    40,     3,    17,    36,
+      19,    24,    25,     0,     0,    29,     0,    44,     0,    48,
+      51,    54,    59,    62,    64,    66,    68,    70,    72,    74,
+       0,    35,    33,     0,   182,     0,     0,   140,     0,     0,
+       0,     0,     0,   485,    95,    98,     0,     0,   543,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   509,   518,
+     522,    44,    77,    90,     0,   498,     0,   155,   129,   501,
+     520,   500,   499,     0,   502,   503,   524,   504,   531,   505,
+     506,   539,   507,     0,   113,     0,   121,     0,   493,   128,
+       0,     0,   104,     0,   101,    37,    38,     0,    21,    22,
+       0,     0,    27,    26,     0,   192,    30,    32,    39,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    75,   177,   178,     0,   173,
-      92,   140,   138,     0,     0,   478,     0,   476,   471,   473,
-     541,   540,     0,   532,     0,   544,   542,     0,     0,     0,
-     525,   528,     0,   495,     0,    80,    81,    83,    82,    85,
-      86,    87,    88,    89,    84,    79,     0,     0,   510,   506,
-     508,   512,   519,   527,   123,     0,   483,     0,   127,     0,
-     105,    16,     0,    23,    20,    31,    45,    46,    47,    50,
-      49,    52,    53,    57,    58,    55,    56,    60,    61,    63,
-      65,    67,    69,    71,    73,     0,   179,   469,     0,   479,
-       0,   474,     0,     0,     0,   543,     0,   524,     0,   555,
-       0,   553,   497,    78,    91,   122,   481,     0,   103,    18,
-       0,   475,   477,     0,   535,   534,   537,   503,   520,   516,
-       0,     0,     0,     0,     0,     0,     0,   482,   484,     0,
-       0,   536,     0,     0,   515,     0,     0,   513,     0,     0,
-       0,     0,   552,   554,   498,    76,     0,   538,     0,   503,
-     502,   504,   522,     0,   500,   529,   499,   556,     0,   539,
-     533,   514,   523,     0,   517,   531,   521
+       0,     0,     0,     0,     0,     0,     0,     0,    75,   189,
+     190,     0,   185,    92,   144,   142,     0,     0,   491,     0,
+     489,   484,   486,   554,   553,     0,   545,     0,   557,   555,
+       0,     0,     0,   538,   541,     0,   508,     0,    80,    81,
+      83,    82,    85,    86,    87,    88,    89,    84,    79,     0,
+       0,   523,   519,   521,   525,   532,   540,   123,     0,   496,
+       0,   127,     0,   105,    16,     0,    23,    20,    31,    45,
+      46,    47,    50,    49,    52,    53,    57,    58,    55,    56,
+      60,    61,    63,    65,    67,    69,    71,    73,     0,   191,
+     482,     0,   492,     0,   487,     0,     0,     0,   556,     0,
+     537,     0,   568,     0,   566,   510,    78,    91,   122,   494,
+       0,   103,    18,     0,   488,   490,     0,   548,   547,   550,
+     516,   533,   529,     0,     0,     0,     0,     0,     0,     0,
+     495,   497,     0,     0,   549,     0,     0,   528,     0,     0,
+     526,     0,     0,     0,     0,   565,   567,   511,    76,     0,
+     551,     0,   516,   515,   517,   535,     0,   513,   542,   512,
+     569,     0,   552,   546,   527,   536,     0,   530,   544,   534
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,  -634,  -289,  -634,  -358,  -355,  -401,  -364,  -279,  -307,
-    -276,  -280,  -273,  -281,  -634,  -354,  -634,  -378,  -634,  -367,
-    -397,     1,  -634,  -634,  -634,     2,  -634,  -634,  -634,   -98,
-     -93,   -92,  -634,  -634,  -600,  -634,  -634,  -634,  -634,  -181,
-    -634,  -319,  -326,  -634,     6,  -634,     0,  -332,  -634,   -54,
-    -634,  -634,  -634,  -428,  -433,  -272,  -353,  -477,  -634,  -357,
-    -467,  -633,  -400,  -634,  -634,  -410,  -408,  -634,  -634,   -80,
-    -545,  -350,  -634,  -216,  -634,  -371,  -634,  -214,  -634,  -634,
-    -634,  -634,  -212,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
-    -634,   -61,  -634,  -634,  -634,  -634,  -375
+    -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,  -645,  -297,  -645,  -468,  -373,  -437,  -374,  -319,  -312,
+    -316,  -290,  -293,  -289,  -645,  -367,  -645,  -391,  -645,  -376,
+    -412,     1,  -645,  -645,  -645,     2,  -645,  -645,  -645,  -112,
+    -107,  -108,  -645,  -645,  -613,  -645,  -645,  -645,  -645,  -197,
+    -645,  -332,  -339,  -645,     6,  -645,     0,  -345,  -645,   -67,
+    -645,  -645,  -645,  -440,  -444,  -294,  -369,  -490,  -645,  -370,
+    -480,  -644,  -410,  -645,  -645,  -422,  -421,  -645,  -645,   -90,
+    -561,  -363,  -645,  -229,  -645,  -384,  -645,  -227,  -645,  -645,
+    -645,  -645,  -226,  -645,  -645,  -645,  -645,  -645,  -645,  -645,
+    -645,   -73,  -645,  -645,  -645,  -645,  -389
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   414,   415,   416,   592,   417,   418,   419,   420,   421,
-     422,   423,   468,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   469,   615,   470,   576,   471,
-     541,   472,   318,   498,   392,   473,   320,   321,   322,   352,
-     353,   354,   323,   324,   325,   326,   327,   328,   372,   373,
-     329,   330,   331,   332,   438,   369,   439,   365,   335,   336,
-     337,   446,   375,   449,   450,   546,   547,   496,   587,   476,
-     477,   478,   479,   564,   656,   685,   664,   665,   666,   686,
-     480,   481,   482,   483,   667,   652,   484,   485,   668,   693,
-     486,   487,   488,   628,   552,   623,   646,   662,   663,   489,
-     338,   339,   340,   349,   490,   630,   631
+      -1,   427,   428,   429,   605,   430,   431,   432,   433,   434,
+     435,   436,   481,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   482,   628,   483,   589,   484,
+     554,   485,   331,   511,   405,   486,   333,   334,   335,   365,
+     366,   367,   336,   337,   338,   339,   340,   341,   385,   386,
+     342,   343,   344,   345,   451,   382,   452,   378,   348,   349,
+     350,   459,   388,   462,   463,   559,   560,   509,   600,   489,
+     490,   491,   492,   577,   669,   698,   677,   678,   679,   699,
+     493,   494,   495,   496,   680,   665,   497,   498,   681,   706,
+     499,   500,   501,   641,   565,   636,   659,   675,   676,   502,
+     351,   352,   353,   362,   503,   643,   644
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1334,118 +1376,240 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     334,   317,   319,   355,   362,   455,   333,   456,   457,   495,
-     437,   460,   370,   580,   378,   584,   549,   586,   543,   632,
-     588,   346,   343,   523,   524,   534,   348,   388,   650,   362,
-     505,   506,   355,   681,   386,   364,   364,   684,   521,   522,
-     364,   504,   492,   387,   513,   684,   650,   341,   377,   -34,
-     440,   507,   491,   493,   440,   508,   447,   497,   525,   526,
-     535,   344,   452,   342,   440,   357,   347,   441,   358,   350,
-     589,   585,   444,   442,   389,   424,   510,   390,   445,   654,
-     391,   591,   511,   655,   647,   622,   538,   577,   500,   540,
-     577,   501,   557,   636,   559,   637,   565,   566,   567,   568,
-     569,   570,   571,   572,   573,   574,   648,   519,   635,   520,
-     549,   351,   577,   359,   495,   575,   495,   502,   503,   495,
-     688,   362,   603,   604,   605,   606,   577,   447,   577,   620,
-     447,   578,   621,   595,   368,   577,   515,   692,   625,   620,
-     593,   364,   641,   313,   314,   315,   516,   517,   518,   527,
-     528,   424,   577,   627,   424,   374,   549,   577,   659,   379,
-     658,   599,   600,   607,   608,   580,   601,   602,   384,   385,
-     440,   443,   499,   451,   509,   514,   529,   530,   531,   447,
-     532,   533,   536,   539,   545,   553,   550,   624,   551,   554,
-     555,   626,   560,   562,   558,   561,   590,   -35,   633,   634,
-     -33,   563,   594,   -28,   616,   629,   694,   495,   639,   643,
-     653,   660,   669,   619,   670,   577,  -501,   672,   678,   677,
-     674,   679,   687,   610,   447,   580,   465,   596,   597,   598,
-     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
-     424,   424,   424,   424,   424,   424,   682,   683,   640,   695,
-     609,   696,   612,   614,   371,   611,   671,   382,   381,   495,
-     613,   649,   345,   383,   542,   680,   644,   642,   690,   380,
-     447,   691,   618,   645,   581,   661,   582,   367,   583,   649,
-     673,   675,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   676,     0,     0,     0,     0,     0,   540,
-       0,     0,     0,   463,     0,   495,     0,     0,     0,   651,
-     689,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   356,     0,     0,   362,     0,   651,   333,     0,
-     363,     0,     0,     0,     0,     0,   333,     0,   334,   317,
-     319,     0,     0,     0,   333,   376,     0,     0,     0,     0,
-       0,   356,     0,     0,     0,   356,     0,   333,     0,     0,
-       0,   333,     0,     0,   424,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   448,     0,     0,     0,   475,
-       0,   333,     0,     0,     0,   474,     0,     0,     0,     0,
+     347,   330,   332,   368,   375,   468,   346,   469,   470,   508,
+     450,   473,   383,   593,   391,   597,   645,   599,   562,   556,
+     601,   359,   356,   536,   537,   547,   361,   401,   663,   375,
+     518,   519,   368,   377,   399,   694,   377,   363,   667,   697,
+     453,   390,   668,   400,   526,   517,   663,   697,   465,   -34,
+     377,   520,   504,   506,   354,   521,   460,   505,   538,   539,
+     548,   357,   453,   453,   612,   613,   360,   454,   457,   510,
+     598,   602,   402,   455,   458,   403,   523,   604,   404,   364,
+     437,   660,   524,   590,   661,   635,   551,   590,   701,   553,
+     590,   532,   370,   533,   590,   371,   570,   372,   572,   616,
+     617,   618,   619,   513,   590,   355,   514,   591,   648,   649,
+     633,   650,   562,   634,   508,   590,   508,   633,   638,   508,
+     654,   375,   515,   516,   326,   327,   328,   460,   534,   535,
+     460,   540,   541,   608,   705,   529,   530,   531,   590,   640,
+     377,   528,   590,   672,   606,   578,   579,   580,   581,   582,
+     583,   584,   585,   586,   587,   381,   437,   387,   562,   437,
+     671,   614,   615,   392,   588,   593,   620,   621,   397,   398,
+     453,   456,   512,   464,   522,   527,   542,   543,   544,   460,
+     545,   546,   549,   552,   558,   566,   563,   564,   567,   571,
+     568,   637,   573,   575,   574,   639,   -35,   -33,   646,   647,
+     576,   603,   607,   -28,   629,   642,   707,   508,   652,   656,
+     666,   673,   682,   632,   683,   590,  -514,   685,   691,   690,
+     687,   692,   700,   622,   460,   593,   478,   695,   624,   696,
+     709,   623,   609,   610,   611,   437,   437,   437,   437,   437,
+     437,   437,   437,   437,   437,   437,   437,   437,   437,   437,
+     437,   708,   653,   626,   684,   625,   395,   394,   627,   508,
+     396,   555,   358,   631,   655,   662,   657,   384,   693,   703,
+     460,   704,   393,   658,   594,   674,   595,   596,   380,   686,
+       0,   688,     0,   662,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   689,     0,   553,
+       0,     0,     0,     0,     0,   508,     0,     0,     0,   664,
+       0,     0,     0,     0,   702,     0,   476,     0,     0,     0,
+       0,     0,     0,     0,     0,   375,     0,   664,     0,     0,
+       0,     0,     0,     0,     0,   369,     0,     0,     0,     0,
+       0,   346,     0,   376,     0,     0,     0,     0,     0,   346,
+       0,   347,   330,   332,     0,     0,     0,   346,   389,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,   369,   437,
+     346,     0,     0,     0,   346,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   461,     0,
+       0,     0,   488,     0,   346,     0,     0,     0,   487,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   448,   544,     0,   448,
-       0,     0,   333,   333,     0,   333,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   461,
+     557,     0,   461,     0,     0,   346,   346,     0,   346,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     475,     0,     0,     0,     0,     0,   474,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   448,     0,
-       0,     0,     0,     0,   333,     0,     0,     0,     0,     0,
+       0,     0,     0,   488,     0,     0,     0,     0,     0,   487,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   461,     0,     0,     0,     0,     0,   346,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   448,     0,     0,     0,     0,     0,   333,
-       0,     0,   475,     0,     0,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,   475,     0,     0,     0,     0,     0,
-     474,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   448,
-       0,     0,     0,     0,     0,   333,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   461,     0,     0,     0,
+       0,     0,   346,     0,     0,   488,     0,     0,     0,     0,
+       0,   487,     0,     0,     0,     0,     0,   488,     0,     0,
+       0,     0,     0,   487,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   461,     0,     0,     0,     0,     0,   346,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   475,     0,     0,     0,     0,   475,   474,
-       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
-       0,   363,   474,     0,     0,     0,     0,   333,     0,     0,
-       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
-     475,     0,   474,     0,     0,     0,   474,     0,   475,     0,
-       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
-       0,     0,   475,     0,     0,     0,   366,     0,   474,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
-     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   488,     0,     0,     0,
+       0,   488,   487,     0,     0,   488,     0,   487,     0,     0,
+       0,   487,     0,     0,     0,     0,     0,     0,     0,   488,
+       0,     0,     0,     0,   376,   487,     0,     0,     0,     0,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,   488,
+       0,     0,     0,   488,     0,   487,     0,     0,     0,   487,
+       0,   488,     0,     0,     0,   488,     0,   487,     0,     0,
+       0,   487,     0,     0,     0,   488,     0,     0,     0,   379,
+       0,   487,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,     0,     0,   322,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   310,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     323,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   324,   325,   326,   327,   328,   329,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,   466,
+     467,   468,     0,   469,   470,   471,   472,   473,   474,   475,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   476,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+     477,     0,   478,   479,     0,     0,     0,     0,   480,   423,
+     424,   425,   426,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   327,   328,   329,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,   466,   467,   468,
+       0,   469,   470,   471,   472,   473,   474,   475,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     476,   406,   322,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,     0,     0,   419,   420,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   421,     0,   477,     0,
+     478,   592,     0,     0,     0,     0,   480,   423,   424,   425,
+     426,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     324,   325,   326,   327,   328,   329,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,   466,   467,   468,     0,   469,
+     470,   471,   472,   473,   474,   475,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   476,   406,
+     322,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,     0,     0,   419,   420,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   421,     0,   477,     0,   478,     0,
+       0,     0,     0,     0,   480,   423,   424,   425,   426,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   324,   325,
+     326,   327,   328,   329,     1,     2,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
-     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      17,    18,    19,   466,   467,   468,     0,   469,   470,   471,
+     472,   473,   474,   475,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
@@ -1474,283 +1638,174 @@
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
      286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
-     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
-       0,   464,     0,   465,   466,     0,     0,     0,     0,   467,
-     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
-     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
-     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   476,   406,   322,   407,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,     0,     0,   419,   420,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   408,     0,   464,     0,   465,   579,
-       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
-     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
-     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
-       0,   464,     0,   465,     0,     0,     0,     0,     0,   467,
-     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
-     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
-     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,   421,     0,   477,     0,   392,     0,     0,     0,
+       0,     0,   480,   423,   424,   425,   426,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   324,   325,   326,   327,
+     328,   329,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,   466,   467,   468,     0,   469,   470,   471,   472,   473,
+     474,   475,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   476,   406,   322,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,     0,
+       0,   419,   420,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   408,     0,   464,     0,   379,     0,
-       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
-     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
-     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
-       0,   464,     0,     0,     0,     0,     0,     0,     0,   467,
-     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
-     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+     421,     0,   477,     0,     0,     0,     0,     0,     0,     0,
+     480,   423,   424,   425,   426,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   324,   325,   326,   327,   328,   329,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,     0,     0,   309,     0,     0,     0,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   480,   423,
+     424,   425,   426,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   327,   328,   329,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
+       0,     0,     0,     0,     0,     0,   323,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
-     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+     324,   325,   326,   327,   328,   329,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,     0,   406,
+     322,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,     0,     0,   419,   420,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   410,   411,   412,   413,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,     0,   421,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   423,   424,   425,   426,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   324,   325,
+     326,   327,   328,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
@@ -1782,13 +1837,54 @@
      277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
      287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,     0,   360,   309,     0,     0,     0,     0,     0,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,     0,   373,   322,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   361,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   311,   312,   313,   314,   315,     1,     2,     3,
+       0,   374,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   324,   325,   326,   327,   328,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,     0,   322,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   561,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   324,   325,   326,   327,   328,     1,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    20,    21,    22,
@@ -1820,14 +1916,55 @@
      273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,     0,     0,   309,     0,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,     0,
+       0,   322,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   548,     0,     0,
+     630,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   324,
+     325,   326,   327,   328,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,     0,     0,   322,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   311,   312,   313,   314,
-     315,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   651,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   324,   325,   326,   327,
+     328,     1,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    20,    21,    22,    23,    24,    25,    26,    27,    28,
@@ -1859,17 +1996,469 @@
      279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
      289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-       0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,     0,     0,   322,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
+       4,     5,     6,     7,     0,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
+       0,     0,     0,   324,   325,   326,   327,   328,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   617,     0,     0,     0,     0,     0,     0,     0,     0,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,     0,
+     406,   322,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,     0,     0,   419,   420,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     311,   312,   313,   314,   315,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+       0,     0,     0,     0,     0,   421,     0,     0,     0,   507,
+     670,     0,     0,     0,     0,     0,   423,   424,   425,   426,
+       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   406,   322,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,     0,     0,   419,   420,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   421,     0,     0,   422,
+       0,     0,     0,     0,     0,     0,     0,   423,   424,   425,
+     426,     3,     4,     5,     6,     7,     0,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    69,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,     0,   406,   322,   407,   408,   409,   410,   411,   412,
+     413,   414,   415,   416,   417,   418,     0,     0,   419,   420,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   421,     0,     0,
+       0,   507,     0,     0,     0,     0,     0,     0,   423,   424,
+     425,   426,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,     0,   406,   322,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,     0,     0,   419,
+     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   421,     0,
+       0,   550,     0,     0,     0,     0,     0,     0,     0,   423,
+     424,   425,   426,     3,     4,     5,     6,     7,     0,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,     0,   406,   322,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,     0,     0,
+     419,   420,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   421,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   569,
+     423,   424,   425,   426,     3,     4,     5,     6,     7,     0,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,     0,   406,   322,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,     0,
+       0,   419,   420,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     421,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   423,   424,   425,   426,     3,     4,     5,     6,     7,
+       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    69,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   525,     0,   406,   322,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+       0,     0,   419,   420,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   421,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   423,   424,   425,   426,     3,     4,     5,     6,
+       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,     0,     0,   322
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,     0,     0,   335,   343,    24,     0,    26,    27,   400,
+     377,    30,    81,   493,   359,   505,   577,   507,   462,   459,
+     510,   336,   336,   354,   355,   359,   381,   372,   641,   368,
+     352,   353,   364,   373,   371,   679,   373,   372,   374,   683,
+     373,   381,   378,   380,   435,   421,   659,   691,   381,   371,
+     373,   373,   397,   398,   371,   377,   388,   380,   389,   390,
+     394,   375,   373,   373,   532,   533,   381,   372,   372,   380,
+     380,   511,   375,   378,   378,   378,   372,   372,   381,   378,
+     377,   372,   378,   378,   372,   565,   453,   378,   372,   456,
+     378,   383,   378,   385,   378,   381,   472,   336,   474,   536,
+     537,   538,   539,   378,   378,   371,   381,   381,   598,   376,
+     378,   378,   556,   381,   505,   378,   507,   378,   381,   510,
+     381,   460,   419,   420,   397,   398,   399,   459,   350,   351,
+     462,   356,   357,   524,   695,   386,   387,   388,   378,   379,
+     373,   438,   378,   379,   520,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   336,   453,   375,   602,   456,
+     650,   534,   535,   375,   380,   645,   540,   541,   336,   336,
+     373,   380,   336,   381,   372,   371,   393,   392,   391,   511,
+     358,   360,   374,   336,   336,   371,   381,   381,   371,   371,
+     381,   567,   379,   373,   371,   571,   371,   371,   589,   590,
+     376,   336,   336,   372,   374,   336,   696,   598,   374,   335,
+     371,   371,   336,   558,   372,   378,   375,   374,   372,   381,
+     376,    25,   372,   542,   556,   705,   375,   375,   544,   380,
+     376,   543,   529,   530,   531,   532,   533,   534,   535,   536,
+     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
+     547,   381,   628,   546,   666,   545,   368,   364,   547,   650,
+     368,   458,   329,   557,   633,   641,   636,   336,   678,   691,
+     602,   692,   362,   636,   503,   659,   503,   503,   351,   668,
+      -1,   672,    -1,   659,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   673,    -1,   666,
+      -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,    -1,   641,
+      -1,    -1,    -1,    -1,   690,    -1,   335,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   664,    -1,   659,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   335,    -1,    -1,    -1,    -1,
+      -1,   335,    -1,   343,    -1,    -1,    -1,    -1,    -1,   343,
+      -1,   351,   351,   351,    -1,    -1,    -1,   351,   358,    -1,
+      -1,    -1,    -1,    -1,   364,    -1,    -1,    -1,   368,   666,
+     364,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   388,    -1,
+      -1,    -1,   392,    -1,   388,    -1,    -1,    -1,   392,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   459,
+     460,    -1,   462,    -1,    -1,   459,   460,    -1,   462,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   493,    -1,    -1,    -1,    -1,    -1,   493,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   511,    -1,    -1,    -1,    -1,    -1,   511,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,
+      -1,    -1,   556,    -1,    -1,   565,    -1,    -1,    -1,    -1,
+      -1,   565,    -1,    -1,    -1,    -1,    -1,   577,    -1,    -1,
+      -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   602,    -1,    -1,    -1,    -1,    -1,   602,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   636,    -1,    -1,    -1,
+      -1,   641,   636,    -1,    -1,   645,    -1,   641,    -1,    -1,
+      -1,   645,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   659,
+      -1,    -1,    -1,    -1,   664,   659,    -1,    -1,    -1,    -1,
+     664,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,
+      -1,    -1,    -1,   683,    -1,   679,    -1,    -1,    -1,   683,
+      -1,   691,    -1,    -1,    -1,   695,    -1,   691,    -1,    -1,
+      -1,   695,    -1,    -1,    -1,   705,    -1,    -1,    -1,     0,
+      -1,   705,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,    -1,    -1,   337,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,   400,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+     373,    -1,   375,   376,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,   400,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
@@ -1897,17 +2486,98 @@
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,     0,     0,   309,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   638,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   311,   312,   313,   314,   315,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,    -1,    -1,   352,   353,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,   373,    -1,
+     375,   376,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     395,   396,   397,   398,   399,   400,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   371,    -1,   373,    -1,   375,    -1,
+      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,   396,
+     397,   398,   399,   400,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
+     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
+     349,    -1,    -1,   352,   353,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   371,    -1,   373,    -1,   375,    -1,    -1,    -1,
+      -1,    -1,   381,   382,   383,   384,   385,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,
+     399,   400,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
@@ -1935,721 +2605,136 @@
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
      281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
-     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     3,     4,     5,     6,     7,     0,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,   311,   312,
-     313,   314,   315,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
-       0,   494,   657,     0,     0,     0,     0,     0,   410,   411,
-     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
-       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
-       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,     0,
-     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   408,     0,     0,   409,     0,
-       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
-       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
-       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
-       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,     0,   393,   309,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,     0,     0,   406,   407,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   408,     0,     0,     0,   494,     0,     0,
-       0,     0,     0,     0,   410,   411,   412,   413,     3,     4,
-       5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
-       0,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,     0,     0,     0,     0,     0,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,     0,   393,   309,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-       0,     0,   406,   407,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   408,     0,     0,   537,     0,     0,     0,     0,     0,
-       0,     0,   410,   411,   412,   413,     3,     4,     5,     6,
-       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    69,     0,     0,     0,     0,     0,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,     0,     0,     0,     0,     0,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,     0,   393,   309,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
-     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   556,
-     410,   411,   412,   413,     3,     4,     5,     6,     7,     0,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   410,   411,
-     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
-       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
-       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   512,     0,
-     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   408,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
-       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
-       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,     0,     0,   309
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,     0,     0,   322,   330,    24,     0,    26,    27,   387,
-     364,    30,    81,   480,   346,   492,   449,   494,   446,   564,
-     497,   323,   323,   341,   342,   346,   368,   359,   628,   355,
-     339,   340,   351,   666,   358,   360,   360,   670,   337,   338,
-     360,   408,   367,   367,   422,   678,   646,   358,   368,   358,
-     360,   360,   384,   385,   360,   364,   375,   367,   376,   377,
-     381,   362,   368,   358,   360,   365,   368,   359,   368,   359,
-     498,   367,   359,   365,   362,   364,   359,   365,   365,   361,
-     368,   359,   365,   365,   359,   552,   440,   365,   365,   443,
-     365,   368,   459,   363,   461,   365,   348,   349,   350,   351,
-     352,   353,   354,   355,   356,   357,   359,   370,   585,   372,
-     543,   365,   365,   323,   492,   367,   494,   406,   407,   497,
-     359,   447,   523,   524,   525,   526,   365,   446,   365,   365,
-     449,   368,   368,   511,   323,   365,   425,   682,   368,   365,
-     507,   360,   368,   384,   385,   386,   373,   374,   375,   343,
-     344,   440,   365,   366,   443,   362,   589,   365,   366,   362,
-     637,   519,   520,   527,   528,   632,   521,   522,   323,   323,
-     360,   367,   323,   368,   359,   358,   380,   379,   378,   498,
-     345,   347,   361,   323,   323,   358,   368,   554,   368,   358,
-     368,   558,   366,   360,   358,   358,   323,   358,   576,   577,
-     358,   363,   323,   359,   361,   323,   683,   585,   361,   322,
-     358,   358,   323,   545,   359,   365,   362,   361,   359,   368,
-     363,    25,   359,   530,   543,   692,   362,   516,   517,   518,
-     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
-     529,   530,   531,   532,   533,   534,   362,   367,   615,   368,
-     529,   363,   532,   534,   323,   531,   653,   355,   351,   637,
-     533,   628,   316,   355,   445,   665,   623,   620,   678,   349,
-     589,   679,   544,   623,   490,   646,   490,   338,   490,   646,
-     655,   659,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   660,    -1,    -1,    -1,    -1,    -1,   653,
-      -1,    -1,    -1,   322,    -1,   683,    -1,    -1,    -1,   628,
-     677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   322,    -1,    -1,   651,    -1,   646,   322,    -1,
-     330,    -1,    -1,    -1,    -1,    -1,   330,    -1,   338,   338,
-     338,    -1,    -1,    -1,   338,   345,    -1,    -1,    -1,    -1,
-      -1,   351,    -1,    -1,    -1,   355,    -1,   351,    -1,    -1,
-      -1,   355,    -1,    -1,   653,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   375,    -1,    -1,    -1,   379,
-      -1,   375,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,    -1,
+      -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     371,    -1,   373,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     381,   382,   383,   384,   385,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,   400,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,   400,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     395,   396,   397,   398,   399,   400,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,    -1,   336,
+     337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   446,   447,    -1,   449,
-      -1,    -1,   446,   447,    -1,   449,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     480,    -1,    -1,    -1,    -1,    -1,   480,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   498,    -1,
-      -1,    -1,    -1,    -1,   498,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,   543,
-      -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,   552,    -1,
-      -1,    -1,    -1,    -1,   564,    -1,    -1,    -1,    -1,    -1,
-     564,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,
-      -1,    -1,    -1,    -1,    -1,   589,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   623,    -1,    -1,    -1,    -1,   628,   623,
-      -1,    -1,   632,    -1,   628,    -1,    -1,    -1,   632,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,    -1,    -1,
-      -1,   651,   646,    -1,    -1,    -1,    -1,   651,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   666,    -1,    -1,    -1,
-     670,    -1,   666,    -1,    -1,    -1,   670,    -1,   678,    -1,
-      -1,    -1,   682,    -1,   678,    -1,    -1,    -1,   682,    -1,
-      -1,    -1,   692,    -1,    -1,    -1,     0,    -1,   692,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
-     324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
-      -1,   360,    -1,   362,   363,    -1,    -1,    -1,    -1,   368,
-     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,   363,
-      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
-      -1,   360,    -1,   362,    -1,    -1,    -1,    -1,    -1,   368,
-     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,    -1,
-      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
-      -1,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
-     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,    -1,    -1,   324,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,    -1,   371,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,   396,
+     397,   398,   399,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
@@ -2681,13 +2766,54 @@
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,    -1,   323,   324,    -1,    -1,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,   336,   337,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   382,   383,   384,   385,   386,     3,     4,     5,
+      -1,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,   399,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,    -1,   337,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   376,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,   396,   397,   398,   399,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,
@@ -2719,14 +2845,55 @@
      286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,    -1,    -1,   324,    -1,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,    -1,
+      -1,   337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
+     376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   395,
+     396,   397,   398,   399,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,    -1,    -1,   337,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,
-     386,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   395,   396,   397,   398,
+     399,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
@@ -2758,64 +2925,100 @@
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
      302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-      -1,    -1,   324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,    -1,    -1,   337,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   395,   396,   397,   398,   399,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,    -1,
+     336,   337,   338,   339,   340,   341,   342,   343,   344,   345,
+     346,   347,   348,   349,    -1,    -1,   352,   353,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     382,   383,   384,   385,   386,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,    -1,    -1,   324,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,    -1,   375,
+     376,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,    -1,    -1,   352,   353,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   382,   383,   384,   385,   386,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,   374,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,
+     385,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    96,    97,    98,    99,   100,   101,   102,   103,
      104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     114,   115,   116,   117,   118,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,   133,
      134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
      154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
@@ -2834,23 +3037,102 @@
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
-     324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,    -1,   336,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   349,    -1,    -1,   352,   353,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,    -1,
+      -1,   375,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     5,     6,     7,     8,     9,    -1,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,    -1,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,    -1,    -1,   352,
+     353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,    -1,
+      -1,   374,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,
+     383,   384,   385,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,    -1,   336,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   348,   349,    -1,    -1,
+     352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   371,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
+     382,   383,   384,   385,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
-     384,   385,   386,    34,    35,    36,    37,    38,    39,    40,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
@@ -2870,122 +3152,51 @@
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
      301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,    -1,   336,   337,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,    -1,
+      -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
-      -1,   362,   363,    -1,    -1,    -1,    -1,    -1,   369,   370,
-     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+     371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   382,   383,   384,   385,     5,     6,     7,     8,     9,
+      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,   336,   337,   338,   339,
+     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
+      -1,    -1,   352,   353,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
-      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,   361,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,    -1,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   358,    -1,    -1,    -1,   362,    -1,    -1,
-      -1,    -1,    -1,    -1,   369,   370,   371,   372,     5,     6,
-       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
-      -1,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,    -1,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-      -1,    -1,   339,   340,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   358,    -1,    -1,   361,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   369,   370,   371,   372,     5,     6,     7,     8,
+      -1,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   382,   383,   384,   385,     5,     6,     7,     8,
        9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
@@ -2993,11 +3204,11 @@
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
@@ -3017,117 +3228,8 @@
      289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
      309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,    -1,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
-     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
-     369,   370,   371,   372,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   369,   370,
-     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
-      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
-       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,    -1,    -1,   324
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,    -1,    -1,   337
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -3164,107 +3266,109 @@
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   324,
-     368,   382,   383,   384,   385,   386,   387,   422,   423,   426,
-     427,   428,   429,   433,   434,   435,   436,   437,   438,   441,
-     442,   443,   444,   445,   447,   449,   450,   451,   491,   492,
-     493,   358,   358,   323,   362,   450,   323,   368,   368,   494,
-     359,   365,   430,   431,   432,   442,   447,   365,   368,   323,
-     323,   368,   443,   447,   360,   448,     0,   492,   323,   446,
-      81,   323,   439,   440,   362,   453,   447,   368,   448,   362,
-     470,   431,   430,   432,   323,   323,   358,   367,   448,   362,
-     365,   368,   425,   323,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,   336,   339,   340,   358,   361,
-     369,   370,   371,   372,   392,   393,   394,   396,   397,   398,
-     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
-     409,   410,   411,   412,   413,   414,   415,   416,   445,   447,
-     360,   359,   365,   367,   359,   365,   452,   442,   447,   454,
-     455,   368,   368,    22,    23,    24,    26,    27,    28,    29,
-      30,    31,    32,   322,   360,   362,   363,   368,   403,   416,
-     418,   420,   422,   426,   445,   447,   460,   461,   462,   463,
-     471,   472,   473,   474,   477,   478,   481,   482,   483,   490,
-     495,   448,   367,   448,   362,   418,   458,   367,   424,   323,
-     365,   368,   403,   403,   420,   339,   340,   360,   364,   359,
-     359,   365,   321,   418,   358,   403,   373,   374,   375,   370,
-     372,   337,   338,   341,   342,   376,   377,   343,   344,   380,
-     379,   378,   345,   347,   346,   381,   361,   361,   416,   323,
-     416,   421,   440,   454,   447,   323,   456,   457,   363,   455,
-     368,   368,   485,   358,   358,   368,   368,   420,   358,   420,
-     366,   358,   360,   363,   464,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   367,   419,   365,   368,   363,
-     461,   474,   478,   483,   458,   367,   458,   459,   458,   454,
-     323,   359,   395,   420,   323,   418,   403,   403,   403,   405,
-     405,   406,   406,   407,   407,   407,   407,   408,   408,   409,
-     410,   411,   412,   413,   414,   417,   361,   363,   456,   448,
-     365,   368,   461,   486,   420,   368,   420,   366,   484,   323,
-     496,   497,   471,   418,   418,   458,   363,   365,   363,   361,
-     420,   368,   457,   322,   460,   472,   487,   359,   359,   420,
-     435,   442,   476,   358,   361,   365,   465,   363,   458,   366,
-     358,   476,   488,   489,   467,   468,   469,   475,   479,   323,
-     359,   421,   361,   497,   363,   418,   420,   368,   359,    25,
-     463,   462,   362,   367,   462,   466,   470,   359,   359,   420,
-     466,   467,   471,   480,   458,   368,   363
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   337,   381,   395,   396,   397,   398,   399,   400,
+     435,   436,   439,   440,   441,   442,   446,   447,   448,   449,
+     450,   451,   454,   455,   456,   457,   458,   460,   462,   463,
+     464,   504,   505,   506,   371,   371,   336,   375,   463,   336,
+     381,   381,   507,   372,   378,   443,   444,   445,   455,   460,
+     378,   381,   336,   336,   381,   456,   460,   373,   461,     0,
+     505,   336,   459,    81,   336,   452,   453,   375,   466,   460,
+     381,   461,   375,   483,   444,   443,   445,   336,   336,   371,
+     380,   461,   375,   378,   381,   438,   336,   338,   339,   340,
+     341,   342,   343,   344,   345,   346,   347,   348,   349,   352,
+     353,   371,   374,   382,   383,   384,   385,   405,   406,   407,
+     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
+     429,   458,   460,   373,   372,   378,   380,   372,   378,   465,
+     455,   460,   467,   468,   381,   381,    22,    23,    24,    26,
+      27,    28,    29,    30,    31,    32,   335,   373,   375,   376,
+     381,   416,   429,   431,   433,   435,   439,   458,   460,   473,
+     474,   475,   476,   484,   485,   486,   487,   490,   491,   494,
+     495,   496,   503,   508,   461,   380,   461,   375,   431,   471,
+     380,   437,   336,   378,   381,   416,   416,   433,   352,   353,
+     373,   377,   372,   372,   378,   334,   431,   371,   416,   386,
+     387,   388,   383,   385,   350,   351,   354,   355,   389,   390,
+     356,   357,   393,   392,   391,   358,   360,   359,   394,   374,
+     374,   429,   336,   429,   434,   453,   467,   460,   336,   469,
+     470,   376,   468,   381,   381,   498,   371,   371,   381,   381,
+     433,   371,   433,   379,   371,   373,   376,   477,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   380,   432,
+     378,   381,   376,   474,   487,   491,   496,   471,   380,   471,
+     472,   471,   467,   336,   372,   408,   433,   336,   431,   416,
+     416,   416,   418,   418,   419,   419,   420,   420,   420,   420,
+     421,   421,   422,   423,   424,   425,   426,   427,   430,   374,
+     376,   469,   461,   378,   381,   474,   499,   433,   381,   433,
+     379,   497,   336,   509,   510,   484,   431,   431,   471,   376,
+     378,   376,   374,   433,   381,   470,   335,   473,   485,   500,
+     372,   372,   433,   448,   455,   489,   371,   374,   378,   478,
+     376,   471,   379,   371,   489,   501,   502,   480,   481,   482,
+     488,   492,   336,   372,   434,   374,   510,   376,   431,   433,
+     381,   372,    25,   476,   475,   375,   380,   475,   479,   483,
+     372,   372,   433,   479,   480,   484,   493,   471,   381,   376
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   391,   392,   393,   393,   393,   393,   393,   393,   393,
-     393,   393,   393,   393,   393,   393,   393,   394,   394,   394,
-     394,   394,   394,   395,   396,   397,   398,   398,   399,   399,
-     400,   400,   401,   402,   402,   402,   403,   403,   403,   403,
-     404,   404,   404,   404,   405,   405,   405,   405,   406,   406,
-     406,   407,   407,   407,   408,   408,   408,   408,   408,   409,
-     409,   409,   410,   410,   411,   411,   412,   412,   413,   413,
-     414,   414,   415,   415,   416,   417,   416,   418,   418,   419,
-     419,   419,   419,   419,   419,   419,   419,   419,   419,   419,
-     420,   420,   421,   422,   422,   422,   422,   422,   422,   422,
-     422,   422,   424,   423,   425,   425,   426,   427,   427,   428,
-     428,   429,   430,   430,   431,   431,   431,   431,   432,   433,
-     433,   433,   433,   433,   434,   434,   434,   434,   434,   435,
-     435,   436,   437,   437,   437,   437,   438,   439,   439,   440,
-     440,   440,   441,   442,   442,   443,   443,   443,   443,   443,
-     443,   443,   444,   444,   444,   444,   444,   444,   444,   444,
-     444,   444,   444,   444,   444,   444,   444,   444,   444,   444,
-     444,   445,   446,   446,   447,   447,   448,   448,   448,   448,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   449,   449,   449,   449,   450,   450,   450,   452,   451,
-     453,   451,   454,   454,   455,   455,   456,   456,   457,   457,
-     458,   458,   458,   459,   459,   460,   461,   461,   462,   462,
-     462,   462,   462,   462,   462,   463,   464,   465,   463,   466,
-     466,   468,   467,   469,   467,   470,   470,   471,   471,   472,
-     472,   473,   473,   474,   475,   475,   476,   476,   477,   477,
-     479,   478,   480,   480,   481,   481,   482,   482,   484,   483,
-     485,   483,   486,   483,   487,   487,   488,   488,   489,   489,
-     490,   490,   490,   490,   490,   491,   491,   492,   492,   492,
-     494,   493,   495,   496,   496,   497,   497
+       0,   404,   405,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   407,   407,   407,
+     407,   407,   407,   408,   409,   410,   411,   411,   412,   412,
+     413,   413,   414,   415,   415,   415,   416,   416,   416,   416,
+     417,   417,   417,   417,   418,   418,   418,   418,   419,   419,
+     419,   420,   420,   420,   421,   421,   421,   421,   421,   422,
+     422,   422,   423,   423,   424,   424,   425,   425,   426,   426,
+     427,   427,   428,   428,   429,   430,   429,   431,   431,   432,
+     432,   432,   432,   432,   432,   432,   432,   432,   432,   432,
+     433,   433,   434,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   437,   436,   438,   438,   439,   440,   440,   441,
+     441,   442,   443,   443,   444,   444,   444,   444,   445,   446,
+     446,   446,   446,   446,   447,   447,   447,   447,   447,   448,
+     448,   449,   450,   450,   450,   450,   450,   450,   450,   450,
+     451,   452,   452,   453,   453,   453,   454,   455,   455,   456,
+     456,   456,   456,   456,   456,   456,   457,   457,   457,   457,
+     457,   457,   457,   457,   457,   457,   457,   457,   457,   457,
+     457,   457,   457,   457,   457,   457,   457,   457,   457,   457,
+     457,   457,   457,   458,   459,   459,   460,   460,   461,   461,
+     461,   461,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+     462,   462,   462,   462,   462,   462,   462,   462,   463,   463,
+     463,   465,   464,   466,   464,   467,   467,   468,   468,   469,
+     469,   470,   470,   471,   471,   471,   472,   472,   473,   474,
+     474,   475,   475,   475,   475,   475,   475,   475,   476,   477,
+     478,   476,   479,   479,   481,   480,   482,   480,   483,   483,
+     484,   484,   485,   485,   486,   486,   487,   488,   488,   489,
+     489,   490,   490,   492,   491,   493,   493,   494,   494,   495,
+     495,   497,   496,   498,   496,   499,   496,   500,   500,   501,
+     501,   502,   502,   503,   503,   503,   503,   503,   504,   504,
+     505,   505,   505,   507,   506,   508,   509,   509,   510,   510
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -3283,11 +3387,13 @@
        3,     4,     0,     6,     2,     3,     2,     1,     1,     2,
        3,     3,     2,     3,     2,     1,     2,     1,     1,     1,
        3,     4,     6,     5,     1,     2,     3,     5,     4,     1,
-       2,     1,     1,     1,     1,     1,     4,     1,     3,     1,
-       3,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       4,     1,     3,     1,     3,     1,     1,     1,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     1,     3,     1,     2,     2,     3,     3,     4,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     4,     1,     1,     3,     1,     2,     2,     3,
+       3,     4,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3316,16 +3422,15 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
-       0,     5,     1,     2,     3,     4,     1,     3,     1,     2,
-       1,     3,     4,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     0,     0,     5,     1,
-       1,     0,     2,     0,     2,     2,     3,     1,     2,     1,
-       2,     1,     2,     5,     3,     1,     1,     4,     1,     2,
-       0,     8,     0,     1,     3,     2,     1,     2,     0,     6,
-       0,     8,     0,     7,     1,     1,     1,     0,     2,     3,
-       2,     2,     2,     3,     2,     1,     2,     1,     1,     1,
-       0,     3,     5,     1,     3,     1,     4
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     2,     1,     3,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
+       0,     5,     1,     1,     0,     2,     0,     2,     2,     3,
+       1,     2,     1,     2,     1,     2,     5,     3,     1,     1,
+       4,     1,     2,     0,     8,     0,     1,     3,     2,     1,
+       2,     0,     6,     0,     8,     0,     7,     1,     1,     1,
+       0,     2,     3,     2,     2,     2,     3,     2,     1,     2,
+       1,     1,     1,     0,     3,     5,     1,     3,     1,     4
 };
 
 
@@ -3610,11 +3715,11 @@
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULL;
+  const char *yyformat = YY_NULLPTR;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -3671,7 +3776,7 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -4008,250 +4113,250 @@
   switch (yyn)
     {
         case 2:
-#line 293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 3:
-#line 299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 4024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 4:
-#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 7:
-#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
-    }
-#line 4068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
-    }
-#line 4077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 10:
-#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-    }
-#line 4086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 11:
-#line 329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-    }
-#line 4095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
-    }
-#line 4103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
-    }
-#line 4112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
-    }
 #line 4121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 15:
-#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 3:
+#line 300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
 #line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 4:
+#line 303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 5:
+#line 307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 6:
+#line 311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 7:
+#line 314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 8:
+#line 318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
+    }
+#line 4173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 9:
+#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
+    }
+#line 4182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 10:
+#line 326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 11:
+#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+    }
+#line 4208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
+    }
+#line 4217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 14:
+#line 341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
+    }
+#line 4226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 4234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 16:
-#line 347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 348 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4259,11 +4364,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4271,29 +4376,29 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 4275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4321,50 +4426,50 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 478 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 36:
-#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 37:
-#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 38:
-#line 495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 39:
-#line 499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -4381,179 +4486,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 46:
-#line 534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 47:
-#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 50:
-#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 53:
-#line 569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 56:
-#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 57:
-#line 589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 58:
-#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4562,11 +4667,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 61:
-#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4575,124 +4680,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 681 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 4692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4705,17 +4810,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4729,119 +4834,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 79:
-#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 80:
-#line 719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 81:
-#line 723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 82:
-#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 83:
-#line 732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 85:
-#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 741 "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 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 745 "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 4806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 87:
-#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 749 "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 4815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 753 "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 4824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 89:
-#line 756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 757 "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 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 767 "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);
@@ -4850,40 +4955,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 93:
-#line 784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 785 "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 4873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 789 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 790 "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 4883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 95:
-#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4892,75 +4997,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 96:
-#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 807 "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 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 810 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 811 "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 4923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 815 "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 4933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 820 "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 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 825 "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 4954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 833 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4970,54 +5075,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 105:
-#line 848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 106:
-#line 855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5026,11 +5131,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5048,11 +5153,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 901 "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",
@@ -5072,11 +5177,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 923 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 924 "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");
@@ -5092,11 +5197,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 939 "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");
@@ -5116,11 +5221,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5132,11 +5237,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5144,11 +5249,11 @@
         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 5148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 985 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5159,11 +5264,11 @@
         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 5163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 117:
-#line 994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5171,118 +5276,118 @@
         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 5175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 118:
-#line 1004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1005 "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 5186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1017 "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 5203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 121:
-#line 1020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1021 "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 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1025 "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 5222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 123:
-#line 1029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1030 "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 5232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 124:
-#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1038 "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 5242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 1042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1043 "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 5252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 1047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1048 "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 5262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 1052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1053 "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 5272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 1057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1058 "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 5282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 129:
-#line 1066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1067 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5294,11 +5399,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 130:
-#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1078 "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));
@@ -5323,22 +5428,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 131:
-#line 1104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1105 "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 5338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5346,11 +5451,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 133:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5358,11 +5463,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 134:
-#line 1127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
 #ifdef NV_EXTENSIONS
@@ -5374,11 +5479,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 135:
-#line 1138 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -5388,84 +5493,138 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 5392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
-#line 1150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1148 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.pervertexNV = true;
+#endif
     }
-#line 5400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perprimitiveNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.perPrimitiveNV = true;
+#endif
     }
-#line 5408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 1159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perviewNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.perViewNV = true;
+#endif
+    }
+#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 139:
+#line 1174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "taskNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.perTaskNV = true;
+#endif
+    }
+#line 5551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 140:
+#line 1185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
+    }
+#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 141:
+#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 142:
+#line 1194 "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 5418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 143:
+#line 1201 "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 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 1170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 144:
+#line 1205 "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 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 1174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 145:
+#line 1209 "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 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 142:
-#line 1182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 146:
+#line 1217 "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 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 143:
-#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 147:
+#line 1226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 144:
-#line 1194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 148:
+#line 1229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5474,80 +5633,80 @@
         (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 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 1205 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 149:
+#line 1240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 146:
-#line 1208 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 150:
+#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 151:
+#line 1246 "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 5503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 148:
-#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 149:
-#line 1219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 150:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 151:
-#line 1227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 152:
-#line 1233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 153:
+#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 154:
+#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 155:
+#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 156:
+#line 1268 "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 5547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1272 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5560,11 +5719,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5579,43 +5738,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1298 "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 5593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1303 "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 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1309 "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 5615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1280 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1315 "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");
@@ -5623,189 +5782,288 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1322 "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 5638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1328 "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 5648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1333 "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 5658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1338 "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 5668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
+            | EShLangAnyHitNVMask), "hitAttributeNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "hitAttributeNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqHitAttrNV;
+#endif
+    }
+#line 5842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 168:
+#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadNV;
+#endif
+    }
+#line 5857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 169:
+#line 1363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNVX");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitNVMask |
+            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNVX");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_NVX_raytracing, "rayPayloadInNVX");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadInNV;
+#endif
+    }
+#line 5872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 170:
+#line 1373 "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");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
+#ifdef NV_EXTENSIONS
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+#else
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
+#endif
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 172:
+#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
+        (yyval.interm.type).qualifier.devicecoherent = true;
+    }
+#line 5908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 173:
+#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
+        (yyval.interm.type).qualifier.queuefamilycoherent = true;
+    }
+#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 174:
+#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
+        (yyval.interm.type).qualifier.workgroupcoherent = true;
+    }
+#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 175:
+#line 1404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
+        (yyval.interm.type).qualifier.subgroupcoherent = true;
+    }
+#line 5938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 176:
+#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
+        (yyval.interm.type).qualifier.nonprivate = true;
+    }
+#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 177:
+#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1430 "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 5737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1436 "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 5748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1452 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1455 "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 5775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 186:
+#line 1463 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1467 "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 5795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 189:
+#line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5814,20 +6072,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 190:
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 191:
+#line 1493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5835,1484 +6093,1495 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1503 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1417 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+#line 1511 "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 5867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 5877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+#line 1521 "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 5887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 197:
+#line 1526 "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 5897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 198:
+#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+#line 1535 "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 5916 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 5926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 201:
+#line 1545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 5936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 202:
+#line 1550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 5946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 203:
+#line 1555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 5956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 204:
+#line 1560 "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 5966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 205:
+#line 1565 "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 5976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 206:
+#line 1570 "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 5986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 207:
+#line 1575 "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 5996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#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 6005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 197:
-#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 6015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 198:
-#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 6025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 199:
-#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 6035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 200:
-#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 6046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 201:
-#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 6057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 202:
-#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 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 203:
-#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 204:
-#line 1529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 205:
-#line 1535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 206:
-#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 6112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 207:
-#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 6123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 1553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1580 "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);
+        (yyval.interm.type).basicType = EbtBool;
     }
-#line 6134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 1559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1584 "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).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1589 "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).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#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 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 212:
-#line 1577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1594 "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 6177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#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 6187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#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 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#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 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 216:
-#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 6217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 217:
-#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 6227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 218:
-#line 1607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 219:
-#line 1613 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 220:
-#line 1619 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1631 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
 #line 6293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 1643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 212:
+#line 1599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
 #line 6304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 1649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 213:
+#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
 #line 6315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
+  case 214:
+#line 1611 "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 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 215:
+#line 1617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 216:
+#line 1623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1629 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1635 "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 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 219:
+#line 1641 "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 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 220:
+#line 1647 "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 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 221:
+#line 1653 "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 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 222:
+#line 1659 "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 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 223:
+#line 1665 "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 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 224:
+#line 1671 "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 6435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 225:
+#line 1676 "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 6445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
   case 226:
-#line 1655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1681 "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 6455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 227:
+#line 1686 "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 6465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 228:
+#line 1691 "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 6475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 229:
+#line 1696 "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 6485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 230:
+#line 1701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 231:
+#line 1707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 232:
+#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 233:
+#line 1719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 234:
+#line 1725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 235:
+#line 1731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 236:
+#line 1737 "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 6562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 237:
+#line 1743 "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 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 238:
+#line 1749 "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 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 227:
-#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 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#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 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#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 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#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 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#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 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#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 6392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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(3);
-    }
-#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1709 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#line 1715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#line 1721 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#line 1727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#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 6469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#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 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#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 6491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#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 6502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#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 6513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#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 6524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#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 6534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#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 6544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 247:
-#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 6554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 248:
-#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 6564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#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 6574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#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 6584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+#line 1755 "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 = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
     }
-#line 6594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 240:
+#line 1761 "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 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 241:
+#line 1767 "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 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 242:
+#line 1773 "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 6628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 243:
+#line 1779 "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 6639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 244:
+#line 1785 "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 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 245:
+#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 246:
+#line 1797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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(3);
+    }
+#line 6672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 247:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 248:
+#line 1809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 249:
+#line 1815 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        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 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1827 "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 6727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1804 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1833 "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 = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
     }
-#line 6604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1839 "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 = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
     }
-#line 6614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1845 "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 = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
     }
-#line 6624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1851 "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 = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 3);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
     }
-#line 6634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1857 "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 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 257:
+#line 1863 "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 6792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 258:
+#line 1868 "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 6802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1873 "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 6644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 257:
-#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 6655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 258:
-#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 6666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 259:
-#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 6677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 1847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1878 "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).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6822 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 1853 "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).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1888 "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 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 263:
-#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 6721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 264:
-#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 6732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 265:
-#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 6743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 266:
-#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 6754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 267:
-#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 6765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 268:
-#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 6776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 269:
-#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 6787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 270:
-#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 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 271:
-#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 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 272:
-#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 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 273:
-#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 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 274:
-#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).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
 #line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1937 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 263:
+#line 1893 "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).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1898 "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 6862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 265:
+#line 1903 "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 6872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 266:
+#line 1908 "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 6882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 267:
+#line 1913 "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 6892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 268:
+#line 1918 "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 6902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 269:
+#line 1923 "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 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 1929 "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 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 271:
+#line 1935 "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 6935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 272:
+#line 1941 "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 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 273:
+#line 1947 "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 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 274:
+#line 1953 "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 6968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 1959 "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 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 1943 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1955 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1961 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1989 "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 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 281:
+#line 1995 "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 7045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 282:
+#line 2001 "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 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 283:
+#line 2007 "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 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 281:
-#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 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 282:
-#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 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 283:
-#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 6941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1991 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat;
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat;
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 2003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2025 "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 7100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 287:
+#line 2031 "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 7111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 288:
+#line 2037 "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 7122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 289:
+#line 2043 "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 7133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 290:
+#line 2049 "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 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 291:
+#line 2055 "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 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 292:
+#line 2061 "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 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 293:
+#line 2067 "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 7177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 294:
+#line 2073 "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 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 295:
+#line 2079 "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 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 296:
+#line 2085 "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 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 297:
+#line 2091 "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 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 298:
+#line 2097 "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 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 299:
+#line 2103 "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 6985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 2015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 300:
+#line 2109 "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 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 2021 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 301:
+#line 2115 "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 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 2027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 302:
+#line 2121 "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 7018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 2033 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 303:
+#line 2127 "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 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 304:
+#line 2133 "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 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 2045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 305:
+#line 2139 "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 7051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 2051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 306:
+#line 2145 "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 7062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 2057 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 307:
+#line 2151 "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 7073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 2063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 308:
+#line 2157 "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 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2163 "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 7095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2075 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 310:
+#line 2169 "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 7106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 311:
+#line 2175 "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 7117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2087 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 312:
+#line 2181 "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 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2187 "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 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2193 "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 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2199 "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 7161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2111 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2205 "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 7172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2117 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef NV_EXTENSIONS
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStructNV;
+#endif
+    }
+#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 318:
+#line 2217 "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 7182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2122 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2222 "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 7192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2127 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2227 "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 7202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2132 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2232 "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 7212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2237 "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 7222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2242 "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 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2247 "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 7242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2252 "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 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2257 "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 7262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2262 "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 7272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2267 "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 7282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2172 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2272 "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 7292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2177 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2277 "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 7302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2282 "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 7312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7321,11 +7590,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 #endif
     }
-#line 7325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2195 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 333:
+#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7334,11 +7603,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 #endif
     }
-#line 7338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 334:
+#line 2303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7347,11 +7616,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 #endif
     }
-#line 7351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7360,11 +7629,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 #endif
     }
-#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7373,11 +7642,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 #endif
     }
-#line 7377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7386,11 +7655,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 #endif
     }
-#line 7390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7399,11 +7668,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 #endif
     }
-#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7412,11 +7681,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7425,11 +7694,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7438,11 +7707,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 #endif
     }
-#line 7442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7451,11 +7720,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 #endif
     }
-#line 7455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7464,11 +7733,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2383 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7477,171 +7746,171 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 #endif
     }
-#line 7481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2291 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2391 "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 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 346:
+#line 2396 "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 7501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2401 "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 7511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2406 "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 7521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2411 "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 7531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2416 "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 7541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2421 "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 7551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2426 "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 7561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2431 "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 7571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2436 "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 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2441 "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 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2446 "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 7601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2451 "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 7611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+#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(EbtUint, EsdCube, true);
     }
-#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#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(EbtFloat, EsdRect);
     }
-#line 7631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#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.set(EbtFloat, EsdRect, false, true);
     }
-#line 7641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7650,11 +7919,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
 #endif
     }
-#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7663,41 +7932,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
 #endif
     }
-#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2487 "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 7677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2492 "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 7687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2497 "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 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7706,41 +7975,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 7710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2510 "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 7720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+#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.set(EbtUint, EsdBuffer);
     }
-#line 7730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2520 "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 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 370:
+#line 2525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7749,41 +8018,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 371:
+#line 2533 "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 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 372:
+#line 2538 "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 7773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2543 "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 7783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 374:
+#line 2548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7792,61 +8061,61 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 7796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2556 "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 7806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 376:
+#line 2561 "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 7816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 377:
+#line 2566 "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 7826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 378:
+#line 2571 "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 7836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2476 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 379:
+#line 2576 "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 7846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 380:
+#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7855,21 +8124,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
 #endif
     }
-#line 7859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2589 "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 7869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7878,21 +8147,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
 #endif
     }
-#line 7882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8151 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 383:
+#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(EbtFloat, Esd3D);
     }
-#line 7892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 384:
+#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7901,21 +8170,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
 #endif
     }
-#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2615 "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 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7924,21 +8193,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
 #endif
     }
-#line 7928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 387:
+#line 2628 "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 7938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 388:
+#line 2633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7947,21 +8216,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 389:
+#line 2641 "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 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7970,21 +8239,21 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2654 "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 7984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -7993,161 +8262,161 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2667 "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 8007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2672 "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 8017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2677 "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 8027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 396:
+#line 2682 "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 8037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2687 "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 8047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2692 "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 8057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2697 "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 8067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2702 "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 8077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2707 "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 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2712 "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 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2717 "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 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2722 "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 8117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2727 "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 8127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2732 "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 8137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2737 "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 8147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 408:
+#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8156,41 +8425,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
 #endif
     }
-#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2750 "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 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2755 "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 8180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2760 "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 8190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8459 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8199,41 +8468,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2773 "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 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2778 "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 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2783 "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 8233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 416:
+#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8242,41 +8511,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2796 "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 8256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2801 "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 8266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2806 "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 8276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 420:
+#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
@@ -8285,41 +8554,41 @@
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2719 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2819 "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 8299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2824 "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 8309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2829 "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 8319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8328,41 +8597,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
 #endif
     }
-#line 8332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2842 "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 8342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2847 "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 8352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2852 "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 8362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8371,41 +8640,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
 #endif
     }
-#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2865 "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 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2870 "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 8395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2875 "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 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8414,41 +8683,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
 #endif
     }
-#line 8418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2888 "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 8428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2893 "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 8438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2898 "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 8448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8457,41 +8726,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
 #endif
     }
-#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2911 "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 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2816 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2916 "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 8481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2921 "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 8491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8500,41 +8769,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
 #endif
     }
-#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2934 "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 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2939 "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 8524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2944 "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 8534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8543,41 +8812,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
 #endif
     }
-#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 2957 "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 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2862 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 2962 "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 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 2967 "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 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 2972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8586,41 +8855,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 2980 "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 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 2985 "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 8610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 2990 "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 8620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 2995 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8629,41 +8898,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 3003 "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 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 3008 "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 8653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 3013 "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 8663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8672,41 +8941,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 3026 "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 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 3031 "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 8696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 3036 "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 8706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8715,41 +8984,41 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
 #endif
     }
-#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3049 "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 8729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3054 "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 8739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3059 "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 8749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
@@ -8758,64 +9027,64 @@
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
 #endif
     }
-#line 8762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 2972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3072 "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 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3077 "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 8782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3082 "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 8793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 2988 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3088 "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 8804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 2994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3094 "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 8815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 3000 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3100 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -8825,11 +9094,11 @@
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
 #endif
     }
-#line 8829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 3009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
@@ -8839,65 +9108,65 @@
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
 #endif
     }
-#line 8843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3118 "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 8854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3124 "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 8865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 3030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3130 "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 8876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 3036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3136 "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 8887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 3042 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3142 "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 8897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 3047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3147 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -8911,47 +9180,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 8915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 3063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3163 "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 8925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 3068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3168 "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 8935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 3073 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3173 "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 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 8951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3181 "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);
@@ -8963,17 +9232,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -8981,19 +9250,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 8985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3205 "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) {
@@ -9004,11 +9273,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3218 "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");
@@ -9031,11 +9300,11 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3240 "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");
@@ -9060,38 +9329,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3177 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3277 "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 9091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3182 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -9100,219 +9369,219 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3196 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3296 "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 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3302 "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 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 483:
-#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 9142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 484:
-#line 3214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 9150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 485:
-#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 486:
-#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 487:
-#line 3225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 488:
-#line 3231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 489:
-#line 3232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 490:
-#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 491:
-#line 3234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 492:
-#line 3235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 493:
-#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 494:
-#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 495:
-#line 3241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = 0; }
-#line 9216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 496:
-#line 3242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
+    }
+#line 9411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 497:
+#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+    }
+#line 9419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 498:
+#line 3320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 499:
+#line 3324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 500:
+#line 3325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 501:
+#line 3331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 502:
+#line 3332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 503:
+#line 3333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 504:
+#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 505:
+#line 3335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 506:
+#line 3336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 507:
+#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 508:
+#line 3341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = 0; }
+#line 9485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 509:
+#line 3342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 3246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 3250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3350 "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 9244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 512:
+#line 3358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 3259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 513:
+#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 3263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 3266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 3270 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 516:
+#line 3370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 504:
-#line 3275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 517:
+#line 3375 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 505:
-#line 3284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 518:
+#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 506:
-#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 519:
+#line 3387 "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 9312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 507:
-#line 3295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 520:
+#line 3395 "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 ||
@@ -9321,11 +9590,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 508:
-#line 3303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 521:
+#line 3403 "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)) {
@@ -9334,76 +9603,76 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 509:
-#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 522:
+#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 510:
-#line 3315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 523:
+#line 3415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 511:
-#line 3319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 524:
+#line 3419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 512:
-#line 3322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 525:
+#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 513:
-#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 526:
+#line 3428 "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 9376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 514:
-#line 3335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 527:
+#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 515:
-#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 528:
+#line 3439 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 516:
-#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 529:
+#line 3447 "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 9403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 517:
-#line 3351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 530:
+#line 3451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -9414,28 +9683,28 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 518:
-#line 3364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 519:
-#line 3367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 520:
-#line 3373 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -9444,11 +9713,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 521:
-#line 3381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3481 "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();
@@ -9458,27 +9727,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 522:
-#line 3393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 523:
-#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 524:
-#line 3402 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9491,11 +9760,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 9495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 525:
-#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9505,28 +9774,28 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 9509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 526:
-#line 3426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 527:
-#line 3429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 528:
-#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3535 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9535,11 +9804,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 529:
-#line 3443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3543 "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);
@@ -9547,21 +9816,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 530:
-#line 3450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 531:
-#line 3455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9573,22 +9842,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 532:
-#line 3466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 533:
-#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3572 "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);
@@ -9601,81 +9870,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 534:
-#line 3487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3587 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 535:
-#line 3490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 536:
-#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 537:
-#line 3499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 9637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 538:
-#line 3505 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 539:
-#line 3509 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 552:
+#line 3609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 540:
-#line 3516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 553:
+#line 3616 "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 9665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 541:
-#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 554:
+#line 3621 "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 9675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 542:
-#line 3526 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 555:
+#line 3626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -9683,83 +9952,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 543:
-#line 3533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 556:
+#line 3633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 9695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 544:
-#line 3536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 557:
+#line 3636 "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 9704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 545:
-#line 3545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 558:
+#line 3645 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 9713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 546:
-#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 559:
+#line 3649 "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 9724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 547:
-#line 3558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 560:
+#line 3658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 548:
-#line 3561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 561:
+#line 3661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 549:
-#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 562:
+#line 3664 "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 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 550:
-#line 3572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 563:
+#line 3672 "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 9759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 551:
-#line 3576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 564:
+#line 3676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -9775,52 +10044,52 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 9779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 552:
-#line 3594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 565:
+#line 3694 "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 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 553:
-#line 3600 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 566:
+#line 3700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 9796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 554:
-#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 567:
+#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 9804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 555:
-#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 568:
+#line 3708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 9812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 556:
-#line 3611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 569:
+#line 3711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 9820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 9824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10048,5 +10317,5 @@
 #endif
   return yyresult;
 }
-#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3715 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 7cfb797..d1f2e71 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -125,320 +125,333 @@
     BUFFER = 335,
     SHARED = 336,
     NONUNIFORM = 337,
-    COHERENT = 338,
-    VOLATILE = 339,
-    RESTRICT = 340,
-    READONLY = 341,
-    WRITEONLY = 342,
-    DVEC2 = 343,
-    DVEC3 = 344,
-    DVEC4 = 345,
-    DMAT2 = 346,
-    DMAT3 = 347,
-    DMAT4 = 348,
-    F16VEC2 = 349,
-    F16VEC3 = 350,
-    F16VEC4 = 351,
-    F16MAT2 = 352,
-    F16MAT3 = 353,
-    F16MAT4 = 354,
-    F32VEC2 = 355,
-    F32VEC3 = 356,
-    F32VEC4 = 357,
-    F32MAT2 = 358,
-    F32MAT3 = 359,
-    F32MAT4 = 360,
-    F64VEC2 = 361,
-    F64VEC3 = 362,
-    F64VEC4 = 363,
-    F64MAT2 = 364,
-    F64MAT3 = 365,
-    F64MAT4 = 366,
-    NOPERSPECTIVE = 367,
-    FLAT = 368,
-    SMOOTH = 369,
-    LAYOUT = 370,
-    __EXPLICITINTERPAMD = 371,
-    MAT2X2 = 372,
-    MAT2X3 = 373,
-    MAT2X4 = 374,
-    MAT3X2 = 375,
-    MAT3X3 = 376,
-    MAT3X4 = 377,
-    MAT4X2 = 378,
-    MAT4X3 = 379,
-    MAT4X4 = 380,
-    DMAT2X2 = 381,
-    DMAT2X3 = 382,
-    DMAT2X4 = 383,
-    DMAT3X2 = 384,
-    DMAT3X3 = 385,
-    DMAT3X4 = 386,
-    DMAT4X2 = 387,
-    DMAT4X3 = 388,
-    DMAT4X4 = 389,
-    F16MAT2X2 = 390,
-    F16MAT2X3 = 391,
-    F16MAT2X4 = 392,
-    F16MAT3X2 = 393,
-    F16MAT3X3 = 394,
-    F16MAT3X4 = 395,
-    F16MAT4X2 = 396,
-    F16MAT4X3 = 397,
-    F16MAT4X4 = 398,
-    F32MAT2X2 = 399,
-    F32MAT2X3 = 400,
-    F32MAT2X4 = 401,
-    F32MAT3X2 = 402,
-    F32MAT3X3 = 403,
-    F32MAT3X4 = 404,
-    F32MAT4X2 = 405,
-    F32MAT4X3 = 406,
-    F32MAT4X4 = 407,
-    F64MAT2X2 = 408,
-    F64MAT2X3 = 409,
-    F64MAT2X4 = 410,
-    F64MAT3X2 = 411,
-    F64MAT3X3 = 412,
-    F64MAT3X4 = 413,
-    F64MAT4X2 = 414,
-    F64MAT4X3 = 415,
-    F64MAT4X4 = 416,
-    ATOMIC_UINT = 417,
-    SAMPLER1D = 418,
-    SAMPLER2D = 419,
-    SAMPLER3D = 420,
-    SAMPLERCUBE = 421,
-    SAMPLER1DSHADOW = 422,
-    SAMPLER2DSHADOW = 423,
-    SAMPLERCUBESHADOW = 424,
-    SAMPLER1DARRAY = 425,
-    SAMPLER2DARRAY = 426,
-    SAMPLER1DARRAYSHADOW = 427,
-    SAMPLER2DARRAYSHADOW = 428,
-    ISAMPLER1D = 429,
-    ISAMPLER2D = 430,
-    ISAMPLER3D = 431,
-    ISAMPLERCUBE = 432,
-    ISAMPLER1DARRAY = 433,
-    ISAMPLER2DARRAY = 434,
-    USAMPLER1D = 435,
-    USAMPLER2D = 436,
-    USAMPLER3D = 437,
-    USAMPLERCUBE = 438,
-    USAMPLER1DARRAY = 439,
-    USAMPLER2DARRAY = 440,
-    SAMPLER2DRECT = 441,
-    SAMPLER2DRECTSHADOW = 442,
-    ISAMPLER2DRECT = 443,
-    USAMPLER2DRECT = 444,
-    SAMPLERBUFFER = 445,
-    ISAMPLERBUFFER = 446,
-    USAMPLERBUFFER = 447,
-    SAMPLERCUBEARRAY = 448,
-    SAMPLERCUBEARRAYSHADOW = 449,
-    ISAMPLERCUBEARRAY = 450,
-    USAMPLERCUBEARRAY = 451,
-    SAMPLER2DMS = 452,
-    ISAMPLER2DMS = 453,
-    USAMPLER2DMS = 454,
-    SAMPLER2DMSARRAY = 455,
-    ISAMPLER2DMSARRAY = 456,
-    USAMPLER2DMSARRAY = 457,
-    SAMPLEREXTERNALOES = 458,
-    F16SAMPLER1D = 459,
-    F16SAMPLER2D = 460,
-    F16SAMPLER3D = 461,
-    F16SAMPLER2DRECT = 462,
-    F16SAMPLERCUBE = 463,
-    F16SAMPLER1DARRAY = 464,
-    F16SAMPLER2DARRAY = 465,
-    F16SAMPLERCUBEARRAY = 466,
-    F16SAMPLERBUFFER = 467,
-    F16SAMPLER2DMS = 468,
-    F16SAMPLER2DMSARRAY = 469,
-    F16SAMPLER1DSHADOW = 470,
-    F16SAMPLER2DSHADOW = 471,
-    F16SAMPLER1DARRAYSHADOW = 472,
-    F16SAMPLER2DARRAYSHADOW = 473,
-    F16SAMPLER2DRECTSHADOW = 474,
-    F16SAMPLERCUBESHADOW = 475,
-    F16SAMPLERCUBEARRAYSHADOW = 476,
-    SAMPLER = 477,
-    SAMPLERSHADOW = 478,
-    TEXTURE1D = 479,
-    TEXTURE2D = 480,
-    TEXTURE3D = 481,
-    TEXTURECUBE = 482,
-    TEXTURE1DARRAY = 483,
-    TEXTURE2DARRAY = 484,
-    ITEXTURE1D = 485,
-    ITEXTURE2D = 486,
-    ITEXTURE3D = 487,
-    ITEXTURECUBE = 488,
-    ITEXTURE1DARRAY = 489,
-    ITEXTURE2DARRAY = 490,
-    UTEXTURE1D = 491,
-    UTEXTURE2D = 492,
-    UTEXTURE3D = 493,
-    UTEXTURECUBE = 494,
-    UTEXTURE1DARRAY = 495,
-    UTEXTURE2DARRAY = 496,
-    TEXTURE2DRECT = 497,
-    ITEXTURE2DRECT = 498,
-    UTEXTURE2DRECT = 499,
-    TEXTUREBUFFER = 500,
-    ITEXTUREBUFFER = 501,
-    UTEXTUREBUFFER = 502,
-    TEXTURECUBEARRAY = 503,
-    ITEXTURECUBEARRAY = 504,
-    UTEXTURECUBEARRAY = 505,
-    TEXTURE2DMS = 506,
-    ITEXTURE2DMS = 507,
-    UTEXTURE2DMS = 508,
-    TEXTURE2DMSARRAY = 509,
-    ITEXTURE2DMSARRAY = 510,
-    UTEXTURE2DMSARRAY = 511,
-    F16TEXTURE1D = 512,
-    F16TEXTURE2D = 513,
-    F16TEXTURE3D = 514,
-    F16TEXTURE2DRECT = 515,
-    F16TEXTURECUBE = 516,
-    F16TEXTURE1DARRAY = 517,
-    F16TEXTURE2DARRAY = 518,
-    F16TEXTURECUBEARRAY = 519,
-    F16TEXTUREBUFFER = 520,
-    F16TEXTURE2DMS = 521,
-    F16TEXTURE2DMSARRAY = 522,
-    SUBPASSINPUT = 523,
-    SUBPASSINPUTMS = 524,
-    ISUBPASSINPUT = 525,
-    ISUBPASSINPUTMS = 526,
-    USUBPASSINPUT = 527,
-    USUBPASSINPUTMS = 528,
-    F16SUBPASSINPUT = 529,
-    F16SUBPASSINPUTMS = 530,
-    IMAGE1D = 531,
-    IIMAGE1D = 532,
-    UIMAGE1D = 533,
-    IMAGE2D = 534,
-    IIMAGE2D = 535,
-    UIMAGE2D = 536,
-    IMAGE3D = 537,
-    IIMAGE3D = 538,
-    UIMAGE3D = 539,
-    IMAGE2DRECT = 540,
-    IIMAGE2DRECT = 541,
-    UIMAGE2DRECT = 542,
-    IMAGECUBE = 543,
-    IIMAGECUBE = 544,
-    UIMAGECUBE = 545,
-    IMAGEBUFFER = 546,
-    IIMAGEBUFFER = 547,
-    UIMAGEBUFFER = 548,
-    IMAGE1DARRAY = 549,
-    IIMAGE1DARRAY = 550,
-    UIMAGE1DARRAY = 551,
-    IMAGE2DARRAY = 552,
-    IIMAGE2DARRAY = 553,
-    UIMAGE2DARRAY = 554,
-    IMAGECUBEARRAY = 555,
-    IIMAGECUBEARRAY = 556,
-    UIMAGECUBEARRAY = 557,
-    IMAGE2DMS = 558,
-    IIMAGE2DMS = 559,
-    UIMAGE2DMS = 560,
-    IMAGE2DMSARRAY = 561,
-    IIMAGE2DMSARRAY = 562,
-    UIMAGE2DMSARRAY = 563,
-    F16IMAGE1D = 564,
-    F16IMAGE2D = 565,
-    F16IMAGE3D = 566,
-    F16IMAGE2DRECT = 567,
-    F16IMAGECUBE = 568,
-    F16IMAGE1DARRAY = 569,
-    F16IMAGE2DARRAY = 570,
-    F16IMAGECUBEARRAY = 571,
-    F16IMAGEBUFFER = 572,
-    F16IMAGE2DMS = 573,
-    F16IMAGE2DMSARRAY = 574,
-    STRUCT = 575,
-    VOID = 576,
-    WHILE = 577,
-    IDENTIFIER = 578,
-    TYPE_NAME = 579,
-    FLOATCONSTANT = 580,
-    DOUBLECONSTANT = 581,
-    INT16CONSTANT = 582,
-    UINT16CONSTANT = 583,
-    INT32CONSTANT = 584,
-    UINT32CONSTANT = 585,
-    INTCONSTANT = 586,
-    UINTCONSTANT = 587,
-    INT64CONSTANT = 588,
-    UINT64CONSTANT = 589,
-    BOOLCONSTANT = 590,
-    FLOAT16CONSTANT = 591,
-    LEFT_OP = 592,
-    RIGHT_OP = 593,
-    INC_OP = 594,
-    DEC_OP = 595,
-    LE_OP = 596,
-    GE_OP = 597,
-    EQ_OP = 598,
-    NE_OP = 599,
-    AND_OP = 600,
-    OR_OP = 601,
-    XOR_OP = 602,
-    MUL_ASSIGN = 603,
-    DIV_ASSIGN = 604,
-    ADD_ASSIGN = 605,
-    MOD_ASSIGN = 606,
-    LEFT_ASSIGN = 607,
-    RIGHT_ASSIGN = 608,
-    AND_ASSIGN = 609,
-    XOR_ASSIGN = 610,
-    OR_ASSIGN = 611,
-    SUB_ASSIGN = 612,
-    LEFT_PAREN = 613,
-    RIGHT_PAREN = 614,
-    LEFT_BRACKET = 615,
-    RIGHT_BRACKET = 616,
-    LEFT_BRACE = 617,
-    RIGHT_BRACE = 618,
-    DOT = 619,
-    COMMA = 620,
-    COLON = 621,
-    EQUAL = 622,
-    SEMICOLON = 623,
-    BANG = 624,
-    DASH = 625,
-    TILDE = 626,
-    PLUS = 627,
-    STAR = 628,
-    SLASH = 629,
-    PERCENT = 630,
-    LEFT_ANGLE = 631,
-    RIGHT_ANGLE = 632,
-    VERTICAL_BAR = 633,
-    CARET = 634,
-    AMPERSAND = 635,
-    QUESTION = 636,
-    INVARIANT = 637,
-    PRECISE = 638,
-    HIGH_PRECISION = 639,
-    MEDIUM_PRECISION = 640,
-    LOW_PRECISION = 641,
-    PRECISION = 642,
-    PACKED = 643,
-    RESOURCE = 644,
-    SUPERP = 645
+    PAYLOADNV = 338,
+    PAYLOADINNV = 339,
+    HITATTRNV = 340,
+    COHERENT = 341,
+    VOLATILE = 342,
+    RESTRICT = 343,
+    READONLY = 344,
+    WRITEONLY = 345,
+    DEVICECOHERENT = 346,
+    QUEUEFAMILYCOHERENT = 347,
+    WORKGROUPCOHERENT = 348,
+    SUBGROUPCOHERENT = 349,
+    NONPRIVATE = 350,
+    DVEC2 = 351,
+    DVEC3 = 352,
+    DVEC4 = 353,
+    DMAT2 = 354,
+    DMAT3 = 355,
+    DMAT4 = 356,
+    F16VEC2 = 357,
+    F16VEC3 = 358,
+    F16VEC4 = 359,
+    F16MAT2 = 360,
+    F16MAT3 = 361,
+    F16MAT4 = 362,
+    F32VEC2 = 363,
+    F32VEC3 = 364,
+    F32VEC4 = 365,
+    F32MAT2 = 366,
+    F32MAT3 = 367,
+    F32MAT4 = 368,
+    F64VEC2 = 369,
+    F64VEC3 = 370,
+    F64VEC4 = 371,
+    F64MAT2 = 372,
+    F64MAT3 = 373,
+    F64MAT4 = 374,
+    NOPERSPECTIVE = 375,
+    FLAT = 376,
+    SMOOTH = 377,
+    LAYOUT = 378,
+    EXPLICITINTERPAMD = 379,
+    PERVERTEXNV = 380,
+    PERPRIMITIVENV = 381,
+    PERVIEWNV = 382,
+    PERTASKNV = 383,
+    MAT2X2 = 384,
+    MAT2X3 = 385,
+    MAT2X4 = 386,
+    MAT3X2 = 387,
+    MAT3X3 = 388,
+    MAT3X4 = 389,
+    MAT4X2 = 390,
+    MAT4X3 = 391,
+    MAT4X4 = 392,
+    DMAT2X2 = 393,
+    DMAT2X3 = 394,
+    DMAT2X4 = 395,
+    DMAT3X2 = 396,
+    DMAT3X3 = 397,
+    DMAT3X4 = 398,
+    DMAT4X2 = 399,
+    DMAT4X3 = 400,
+    DMAT4X4 = 401,
+    F16MAT2X2 = 402,
+    F16MAT2X3 = 403,
+    F16MAT2X4 = 404,
+    F16MAT3X2 = 405,
+    F16MAT3X3 = 406,
+    F16MAT3X4 = 407,
+    F16MAT4X2 = 408,
+    F16MAT4X3 = 409,
+    F16MAT4X4 = 410,
+    F32MAT2X2 = 411,
+    F32MAT2X3 = 412,
+    F32MAT2X4 = 413,
+    F32MAT3X2 = 414,
+    F32MAT3X3 = 415,
+    F32MAT3X4 = 416,
+    F32MAT4X2 = 417,
+    F32MAT4X3 = 418,
+    F32MAT4X4 = 419,
+    F64MAT2X2 = 420,
+    F64MAT2X3 = 421,
+    F64MAT2X4 = 422,
+    F64MAT3X2 = 423,
+    F64MAT3X3 = 424,
+    F64MAT3X4 = 425,
+    F64MAT4X2 = 426,
+    F64MAT4X3 = 427,
+    F64MAT4X4 = 428,
+    ATOMIC_UINT = 429,
+    ACCSTRUCTNV = 430,
+    SAMPLER1D = 431,
+    SAMPLER2D = 432,
+    SAMPLER3D = 433,
+    SAMPLERCUBE = 434,
+    SAMPLER1DSHADOW = 435,
+    SAMPLER2DSHADOW = 436,
+    SAMPLERCUBESHADOW = 437,
+    SAMPLER1DARRAY = 438,
+    SAMPLER2DARRAY = 439,
+    SAMPLER1DARRAYSHADOW = 440,
+    SAMPLER2DARRAYSHADOW = 441,
+    ISAMPLER1D = 442,
+    ISAMPLER2D = 443,
+    ISAMPLER3D = 444,
+    ISAMPLERCUBE = 445,
+    ISAMPLER1DARRAY = 446,
+    ISAMPLER2DARRAY = 447,
+    USAMPLER1D = 448,
+    USAMPLER2D = 449,
+    USAMPLER3D = 450,
+    USAMPLERCUBE = 451,
+    USAMPLER1DARRAY = 452,
+    USAMPLER2DARRAY = 453,
+    SAMPLER2DRECT = 454,
+    SAMPLER2DRECTSHADOW = 455,
+    ISAMPLER2DRECT = 456,
+    USAMPLER2DRECT = 457,
+    SAMPLERBUFFER = 458,
+    ISAMPLERBUFFER = 459,
+    USAMPLERBUFFER = 460,
+    SAMPLERCUBEARRAY = 461,
+    SAMPLERCUBEARRAYSHADOW = 462,
+    ISAMPLERCUBEARRAY = 463,
+    USAMPLERCUBEARRAY = 464,
+    SAMPLER2DMS = 465,
+    ISAMPLER2DMS = 466,
+    USAMPLER2DMS = 467,
+    SAMPLER2DMSARRAY = 468,
+    ISAMPLER2DMSARRAY = 469,
+    USAMPLER2DMSARRAY = 470,
+    SAMPLEREXTERNALOES = 471,
+    F16SAMPLER1D = 472,
+    F16SAMPLER2D = 473,
+    F16SAMPLER3D = 474,
+    F16SAMPLER2DRECT = 475,
+    F16SAMPLERCUBE = 476,
+    F16SAMPLER1DARRAY = 477,
+    F16SAMPLER2DARRAY = 478,
+    F16SAMPLERCUBEARRAY = 479,
+    F16SAMPLERBUFFER = 480,
+    F16SAMPLER2DMS = 481,
+    F16SAMPLER2DMSARRAY = 482,
+    F16SAMPLER1DSHADOW = 483,
+    F16SAMPLER2DSHADOW = 484,
+    F16SAMPLER1DARRAYSHADOW = 485,
+    F16SAMPLER2DARRAYSHADOW = 486,
+    F16SAMPLER2DRECTSHADOW = 487,
+    F16SAMPLERCUBESHADOW = 488,
+    F16SAMPLERCUBEARRAYSHADOW = 489,
+    SAMPLER = 490,
+    SAMPLERSHADOW = 491,
+    TEXTURE1D = 492,
+    TEXTURE2D = 493,
+    TEXTURE3D = 494,
+    TEXTURECUBE = 495,
+    TEXTURE1DARRAY = 496,
+    TEXTURE2DARRAY = 497,
+    ITEXTURE1D = 498,
+    ITEXTURE2D = 499,
+    ITEXTURE3D = 500,
+    ITEXTURECUBE = 501,
+    ITEXTURE1DARRAY = 502,
+    ITEXTURE2DARRAY = 503,
+    UTEXTURE1D = 504,
+    UTEXTURE2D = 505,
+    UTEXTURE3D = 506,
+    UTEXTURECUBE = 507,
+    UTEXTURE1DARRAY = 508,
+    UTEXTURE2DARRAY = 509,
+    TEXTURE2DRECT = 510,
+    ITEXTURE2DRECT = 511,
+    UTEXTURE2DRECT = 512,
+    TEXTUREBUFFER = 513,
+    ITEXTUREBUFFER = 514,
+    UTEXTUREBUFFER = 515,
+    TEXTURECUBEARRAY = 516,
+    ITEXTURECUBEARRAY = 517,
+    UTEXTURECUBEARRAY = 518,
+    TEXTURE2DMS = 519,
+    ITEXTURE2DMS = 520,
+    UTEXTURE2DMS = 521,
+    TEXTURE2DMSARRAY = 522,
+    ITEXTURE2DMSARRAY = 523,
+    UTEXTURE2DMSARRAY = 524,
+    F16TEXTURE1D = 525,
+    F16TEXTURE2D = 526,
+    F16TEXTURE3D = 527,
+    F16TEXTURE2DRECT = 528,
+    F16TEXTURECUBE = 529,
+    F16TEXTURE1DARRAY = 530,
+    F16TEXTURE2DARRAY = 531,
+    F16TEXTURECUBEARRAY = 532,
+    F16TEXTUREBUFFER = 533,
+    F16TEXTURE2DMS = 534,
+    F16TEXTURE2DMSARRAY = 535,
+    SUBPASSINPUT = 536,
+    SUBPASSINPUTMS = 537,
+    ISUBPASSINPUT = 538,
+    ISUBPASSINPUTMS = 539,
+    USUBPASSINPUT = 540,
+    USUBPASSINPUTMS = 541,
+    F16SUBPASSINPUT = 542,
+    F16SUBPASSINPUTMS = 543,
+    IMAGE1D = 544,
+    IIMAGE1D = 545,
+    UIMAGE1D = 546,
+    IMAGE2D = 547,
+    IIMAGE2D = 548,
+    UIMAGE2D = 549,
+    IMAGE3D = 550,
+    IIMAGE3D = 551,
+    UIMAGE3D = 552,
+    IMAGE2DRECT = 553,
+    IIMAGE2DRECT = 554,
+    UIMAGE2DRECT = 555,
+    IMAGECUBE = 556,
+    IIMAGECUBE = 557,
+    UIMAGECUBE = 558,
+    IMAGEBUFFER = 559,
+    IIMAGEBUFFER = 560,
+    UIMAGEBUFFER = 561,
+    IMAGE1DARRAY = 562,
+    IIMAGE1DARRAY = 563,
+    UIMAGE1DARRAY = 564,
+    IMAGE2DARRAY = 565,
+    IIMAGE2DARRAY = 566,
+    UIMAGE2DARRAY = 567,
+    IMAGECUBEARRAY = 568,
+    IIMAGECUBEARRAY = 569,
+    UIMAGECUBEARRAY = 570,
+    IMAGE2DMS = 571,
+    IIMAGE2DMS = 572,
+    UIMAGE2DMS = 573,
+    IMAGE2DMSARRAY = 574,
+    IIMAGE2DMSARRAY = 575,
+    UIMAGE2DMSARRAY = 576,
+    F16IMAGE1D = 577,
+    F16IMAGE2D = 578,
+    F16IMAGE3D = 579,
+    F16IMAGE2DRECT = 580,
+    F16IMAGECUBE = 581,
+    F16IMAGE1DARRAY = 582,
+    F16IMAGE2DARRAY = 583,
+    F16IMAGECUBEARRAY = 584,
+    F16IMAGEBUFFER = 585,
+    F16IMAGE2DMS = 586,
+    F16IMAGE2DMSARRAY = 587,
+    STRUCT = 588,
+    VOID = 589,
+    WHILE = 590,
+    IDENTIFIER = 591,
+    TYPE_NAME = 592,
+    FLOATCONSTANT = 593,
+    DOUBLECONSTANT = 594,
+    INT16CONSTANT = 595,
+    UINT16CONSTANT = 596,
+    INT32CONSTANT = 597,
+    UINT32CONSTANT = 598,
+    INTCONSTANT = 599,
+    UINTCONSTANT = 600,
+    INT64CONSTANT = 601,
+    UINT64CONSTANT = 602,
+    BOOLCONSTANT = 603,
+    FLOAT16CONSTANT = 604,
+    LEFT_OP = 605,
+    RIGHT_OP = 606,
+    INC_OP = 607,
+    DEC_OP = 608,
+    LE_OP = 609,
+    GE_OP = 610,
+    EQ_OP = 611,
+    NE_OP = 612,
+    AND_OP = 613,
+    OR_OP = 614,
+    XOR_OP = 615,
+    MUL_ASSIGN = 616,
+    DIV_ASSIGN = 617,
+    ADD_ASSIGN = 618,
+    MOD_ASSIGN = 619,
+    LEFT_ASSIGN = 620,
+    RIGHT_ASSIGN = 621,
+    AND_ASSIGN = 622,
+    XOR_ASSIGN = 623,
+    OR_ASSIGN = 624,
+    SUB_ASSIGN = 625,
+    LEFT_PAREN = 626,
+    RIGHT_PAREN = 627,
+    LEFT_BRACKET = 628,
+    RIGHT_BRACKET = 629,
+    LEFT_BRACE = 630,
+    RIGHT_BRACE = 631,
+    DOT = 632,
+    COMMA = 633,
+    COLON = 634,
+    EQUAL = 635,
+    SEMICOLON = 636,
+    BANG = 637,
+    DASH = 638,
+    TILDE = 639,
+    PLUS = 640,
+    STAR = 641,
+    SLASH = 642,
+    PERCENT = 643,
+    LEFT_ANGLE = 644,
+    RIGHT_ANGLE = 645,
+    VERTICAL_BAR = 646,
+    CARET = 647,
+    AMPERSAND = 648,
+    QUESTION = 649,
+    INVARIANT = 650,
+    PRECISE = 651,
+    HIGH_PRECISION = 652,
+    MEDIUM_PRECISION = 653,
+    LOW_PRECISION = 654,
+    PRECISION = 655,
+    PACKED = 656,
+    RESOURCE = 657,
+    SUPERP = 658
   };
 #endif
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
+
 union YYSTYPE
 {
 #line 70 "MachineIndependent/glslang.y" /* yacc.c:1909  */
@@ -476,8 +489,10 @@
         };
     } interm;
 
-#line 480 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 493 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
+
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
old mode 100755
new mode 100644
index fc75964..5aa5776
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -871,6 +871,8 @@
     case EOpAtomicXor:                  out.debug << "AtomicXor";             break;
     case EOpAtomicExchange:             out.debug << "AtomicExchange";        break;
     case EOpAtomicCompSwap:             out.debug << "AtomicCompSwap";        break;
+    case EOpAtomicLoad:                 out.debug << "AtomicLoad";            break;
+    case EOpAtomicStore:                out.debug << "AtomicStore";           break;
 
     case EOpAtomicCounterAdd:           out.debug << "AtomicCounterAdd";      break;
     case EOpAtomicCounterSubtract:      out.debug << "AtomicCounterSubtract"; break;
@@ -894,6 +896,8 @@
     case EOpImageAtomicXor:             out.debug << "imageAtomicXor";        break;
     case EOpImageAtomicExchange:        out.debug << "imageAtomicExchange";   break;
     case EOpImageAtomicCompSwap:        out.debug << "imageAtomicCompSwap";   break;
+    case EOpImageAtomicLoad:            out.debug << "imageAtomicLoad";       break;
+    case EOpImageAtomicStore:           out.debug << "imageAtomicStore";      break;
 #ifdef AMD_EXTENSIONS
     case EOpImageLoadLod:               out.debug << "imageLoadLod";          break;
     case EOpImageStoreLod:              out.debug << "imageStoreLod";         break;
@@ -952,7 +956,13 @@
     case EOpSparseTextureGatherLodOffsets:  out.debug << "sparseTextureGatherLodOffsets";   break;
     case EOpSparseImageLoadLod:             out.debug << "sparseImageLoadLod";              break;
 #endif
-
+#ifdef NV_EXTENSIONS
+    case EOpImageSampleFootprintNV:             out.debug << "imageSampleFootprintNV";          break;
+    case EOpImageSampleFootprintClampNV:        out.debug << "imageSampleFootprintClampNV";     break;
+    case EOpImageSampleFootprintLodNV:          out.debug << "imageSampleFootprintLodNV";       break;
+    case EOpImageSampleFootprintGradNV:         out.debug << "imageSampleFootprintGradNV";      break;
+    case EOpImageSampleFootprintGradClampNV:    out.debug << "mageSampleFootprintGradClampNV";  break;
+#endif
     case EOpAddCarry:                   out.debug << "addCarry";              break;
     case EOpSubBorrow:                  out.debug << "subBorrow";             break;
     case EOpUMulExtended:               out.debug << "uMulExtended";          break;
@@ -1038,6 +1048,14 @@
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
+#ifdef NV_EXTENSIONS
+    case EOpTraceNV:                          out.debug << "traceNVX"; break;
+    case EOpReportIntersectionNV:             out.debug << "reportIntersectionNVX"; break;
+    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNVX"; break;
+    case EOpTerminateRayNV:                   out.debug << "terminateRayNVX"; break;
+    case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
+#endif
+
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
 
@@ -1441,6 +1459,16 @@
         }
         break;
 
+#ifdef NV_EXTENSIONS
+    case EShLangMeshNV:
+        infoSink.debug << "max_vertices = " << vertices << "\n";
+        infoSink.debug << "max_primitives = " << primitives << "\n";
+        infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
+        // Fall through
+
+    case EShLangTaskNV:
+        // Fall through
+#endif
     case EShLangCompute:
         infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
         {
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
old mode 100755
new mode 100644
index 9248214..66f6f30
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -331,8 +331,14 @@
                                                       ent.symbol->getType(),
                                                       ent.live);
         } else {
-            TString errorMsg = "Invalid shader In/Out variable semantic: ";
-            errorMsg += ent.symbol->getType().getQualifier().semanticName;
+            TString errorMsg;
+            if (ent.symbol->getType().getQualifier().semanticName != nullptr) {
+                errorMsg = "Invalid shader In/Out variable semantic: ";
+                errorMsg += ent.symbol->getType().getQualifier().semanticName;
+            } else {
+                errorMsg = "Invalid shader In/Out variable: ";
+                errorMsg += ent.symbol->getName();
+            }
             infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
             error = true;
         }
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index c540ae6..7ce7cdd 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -77,12 +77,13 @@
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
-    if (source == EShSourceNone)
-        source = unit.source;
+    mergeCallGraphs(infoSink, unit);
+    mergeModes(infoSink, unit);
+    mergeTrees(infoSink, unit);
+}
 
-    if (source != unit.source)
-        error(infoSink, "can't link compilation units from different source languages");
-
+void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
+{
     if (unit.getNumEntryPoints() > 0) {
         if (getNumEntryPoints() > 0)
             error(infoSink, "can't handle multiple entry points per stage");
@@ -92,25 +93,75 @@
         }
     }
     numEntryPoints += unit.getNumEntryPoints();
+
+    callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
+}
+
+#define MERGE_MAX(member) member = std::max(member, unit.member)
+#define MERGE_TRUE(member) if (unit.member) member = unit.member;
+
+void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
+{
+    if (language != unit.language)
+        error(infoSink, "stages must match when linking into a single stage");
+
+    if (source == EShSourceNone)
+        source = unit.source;
+    if (source != unit.source)
+        error(infoSink, "can't link compilation units from different source languages");
+
+    if (treeRoot == nullptr) {
+        profile = unit.profile;
+        version = unit.version;
+        requestedExtensions = unit.requestedExtensions;
+    } else {
+        if ((profile == EEsProfile) != (unit.profile == EEsProfile))
+            error(infoSink, "Cannot cross link ES and desktop profiles");
+        else if (unit.profile == ECompatibilityProfile)
+            profile = ECompatibilityProfile;
+        version = std::max(version, unit.version);
+        requestedExtensions.insert(unit.requestedExtensions.begin(), unit.requestedExtensions.end());
+    }
+
+    MERGE_MAX(spvVersion.spv);
+    MERGE_MAX(spvVersion.vulkanGlsl);
+    MERGE_MAX(spvVersion.vulkan);
+    MERGE_MAX(spvVersion.openGl);
+
     numErrors += unit.getNumErrors();
     numPushConstants += unit.numPushConstants;
-    callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 
-    if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger)
-        error(infoSink, "gl_FragCoord redeclarations must match across shaders");
+    if (unit.invocations != TQualifier::layoutNotSet) {
+        if (invocations == TQualifier::layoutNotSet)
+            invocations = unit.invocations;
+        else if (invocations != unit.invocations)
+            error(infoSink, "number of invocations must match between compilation units");
+    }
 
-    if (! earlyFragmentTests)
-        earlyFragmentTests = unit.earlyFragmentTests;
-
-    if (!postDepthCoverage)
-        postDepthCoverage = unit.postDepthCoverage;
-
-    if (depthLayout == EldNone)
-        depthLayout = unit.depthLayout;
-    else if (depthLayout != unit.depthLayout)
-        error(infoSink, "Contradictory depth layouts");
-
-    blendEquations |= unit.blendEquations;
+    if (vertices == TQualifier::layoutNotSet)
+        vertices = unit.vertices;
+    else if (vertices != unit.vertices) {
+        if (language == EShLangGeometry
+#ifdef NV_EXTENSIONS
+            || language == EShLangMeshNV
+#endif
+            )
+            error(infoSink, "Contradictory layout max_vertices values");
+        else if (language == EShLangTessControl)
+            error(infoSink, "Contradictory layout vertices values");
+        else
+            assert(0);
+    }
+#ifdef NV_EXTENSIONS
+    if (primitives == TQualifier::layoutNotSet)
+        primitives = unit.primitives;
+    else if (primitives != unit.primitives) {
+        if (language == EShLangMeshNV)
+            error(infoSink, "Contradictory layout max_primitives values");
+        else
+            assert(0);
+    }
+#endif
 
     if (inputPrimitive == ElgNone)
         inputPrimitive = unit.inputPrimitive;
@@ -122,16 +173,8 @@
     else if (outputPrimitive != unit.outputPrimitive)
         error(infoSink, "Contradictory output layout primitives");
 
-    if (vertices == TQualifier::layoutNotSet)
-        vertices = unit.vertices;
-    else if (vertices != unit.vertices) {
-        if (language == EShLangGeometry)
-            error(infoSink, "Contradictory layout max_vertices values");
-        else if (language == EShLangTessControl)
-            error(infoSink, "Contradictory layout vertices values");
-        else
-            assert(0);
-    }
+    if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger)
+        error(infoSink, "gl_FragCoord redeclarations must match across shaders");
 
     if (vertexSpacing == EvsNone)
         vertexSpacing = unit.vertexSpacing;
@@ -143,8 +186,7 @@
     else if (vertexOrder != unit.vertexOrder)
         error(infoSink, "Contradictory triangle ordering");
 
-    if (unit.pointMode)
-        pointMode = true;
+    MERGE_TRUE(pointMode);
 
     for (int i = 0; i < 3; ++i) {
         if (localSize[i] > 1)
@@ -158,8 +200,21 @@
             error(infoSink, "Contradictory local size specialization ids");
     }
 
-    if (unit.xfbMode)
-        xfbMode = true;
+    MERGE_TRUE(earlyFragmentTests);
+    MERGE_TRUE(postDepthCoverage);
+
+    if (depthLayout == EldNone)
+        depthLayout = unit.depthLayout;
+    else if (depthLayout != unit.depthLayout)
+        error(infoSink, "Contradictory depth layouts");
+
+    MERGE_TRUE(depthReplacing);
+    MERGE_TRUE(hlslFunctionality1);
+
+    blendEquations |= unit.blendEquations;
+
+    MERGE_TRUE(xfbMode);
+
     for (size_t b = 0; b < xfbBuffers.size(); ++b) {
         if (xfbBuffers[b].stride == TQualifier::layoutXfbStrideEnd)
             xfbBuffers[b].stride = unit.xfbBuffers[b].stride;
@@ -171,35 +226,181 @@
         // TODO: 4.4 link: enhanced layouts: compare ranges
     }
 
-    if (unit.treeRoot == 0)
+    MERGE_TRUE(multiStream);
+
+#ifdef NV_EXTENSIONS
+    MERGE_TRUE(layoutOverrideCoverage);
+    MERGE_TRUE(geoPassthroughEXT);
+#endif
+
+    for (unsigned int i = 0; i < unit.shiftBinding.size(); ++i) {
+        if (unit.shiftBinding[i] > 0)
+            setShiftBinding((TResourceType)i, unit.shiftBinding[i]);
+    }
+
+    for (unsigned int i = 0; i < unit.shiftBindingForSet.size(); ++i) {
+        for (auto it = unit.shiftBindingForSet[i].begin(); it != unit.shiftBindingForSet[i].end(); ++it)
+            setShiftBindingForSet((TResourceType)i, it->second, it->first);
+    }
+
+    resourceSetBinding.insert(resourceSetBinding.end(), unit.resourceSetBinding.begin(), unit.resourceSetBinding.end());
+
+    MERGE_TRUE(autoMapBindings);
+    MERGE_TRUE(autoMapLocations);
+    MERGE_TRUE(invertY);
+    MERGE_TRUE(flattenUniformArrays);
+    MERGE_TRUE(useUnknownFormat);
+    MERGE_TRUE(hlslOffsets);
+    MERGE_TRUE(useStorageBuffer);
+    MERGE_TRUE(hlslIoMapping);
+
+    // TODO: sourceFile
+    // TODO: sourceText
+    // TODO: processes
+
+    MERGE_TRUE(needToLegalize);
+    MERGE_TRUE(binaryDoubleOutput);
+}
+
+//
+// Merge the 'unit' AST into 'this' AST.
+// That includes rationalizing the unique IDs, which were set up independently,
+// and might have overlaps that are not the same symbol, or might have different
+// IDs for what should be the same shared symbol.
+//
+void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
+{
+    if (unit.treeRoot == nullptr)
         return;
 
-    if (treeRoot == 0) {
+    if (treeRoot == nullptr) {
         treeRoot = unit.treeRoot;
-        version = unit.version;
-        requestedExtensions = unit.requestedExtensions;
         return;
     }
 
     // Getting this far means we have two existing trees to merge...
+#ifdef NV_EXTENSIONS
+    numShaderRecordNVBlocks += unit.numShaderRecordNVBlocks;
+#endif
 
-    version = std::max(version, unit.version);
-    requestedExtensions.insert(unit.requestedExtensions.begin(), unit.requestedExtensions.end());
+#ifdef NV_EXTENSIONS
+    numTaskNVBlocks += unit.numTaskNVBlocks;
+#endif
 
     // Get the top-level globals of each unit
     TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence();
     TIntermSequence& unitGlobals = unit.treeRoot->getAsAggregate()->getSequence();
 
     // Get the linker-object lists
-    TIntermSequence& linkerObjects = findLinkerObjects();
-    TIntermSequence& unitLinkerObjects = unit.findLinkerObjects();
+    TIntermSequence& linkerObjects = findLinkerObjects()->getSequence();
+    const TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence();
+
+    // Map by global name to unique ID to rationalize the same object having
+    // differing IDs in different trees.
+    TMap<TString, int> idMap;
+    int maxId;
+    seedIdMap(idMap, maxId);
+    remapIds(idMap, maxId + 1, unit);
 
     mergeBodies(infoSink, globals, unitGlobals);
     mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects);
-
     ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
 }
 
+// Traverser that seeds an ID map with all built-ins, and tracks the
+// maximum ID used.
+// (It would be nice to put this in a function, but that causes warnings
+// on having no bodies for the copy-constructor/operator=.)
+class TBuiltInIdTraverser : public TIntermTraverser {
+public:
+    TBuiltInIdTraverser(TMap<TString, int>& idMap) : idMap(idMap), maxId(0) { }
+    // If it's a built in, add it to the map.
+    // Track the max ID.
+    virtual void visitSymbol(TIntermSymbol* symbol)
+    {
+        const TQualifier& qualifier = symbol->getType().getQualifier();
+        if (qualifier.builtIn != EbvNone)
+            idMap[symbol->getName()] = symbol->getId();
+        maxId = std::max(maxId, symbol->getId());
+    }
+    int getMaxId() const { return maxId; }
+protected:
+    TBuiltInIdTraverser(TBuiltInIdTraverser&);
+    TBuiltInIdTraverser& operator=(TBuiltInIdTraverser&);
+    TMap<TString, int>& idMap;
+    int maxId;
+};
+
+// Traverser that seeds an ID map with non-builtins.
+// (It would be nice to put this in a function, but that causes warnings
+// on having no bodies for the copy-constructor/operator=.)
+class TUserIdTraverser : public TIntermTraverser {
+public:
+    TUserIdTraverser(TMap<TString, int>& idMap) : idMap(idMap) { }
+    // If its a non-built-in global, add it to the map.
+    virtual void visitSymbol(TIntermSymbol* symbol)
+    {
+        const TQualifier& qualifier = symbol->getType().getQualifier();
+        if (qualifier.builtIn == EbvNone)
+            idMap[symbol->getName()] = symbol->getId();
+    }
+
+protected:
+    TUserIdTraverser(TUserIdTraverser&);
+    TUserIdTraverser& operator=(TUserIdTraverser&);
+    TMap<TString, int>& idMap; // over biggest id
+};
+
+// Initialize the the ID map with what we know of 'this' AST.
+void TIntermediate::seedIdMap(TMap<TString, int>& idMap, int& maxId)
+{
+    // all built-ins everywhere need to align on IDs and contribute to the max ID
+    TBuiltInIdTraverser builtInIdTraverser(idMap);
+    treeRoot->traverse(&builtInIdTraverser);
+    maxId = builtInIdTraverser.getMaxId();
+
+    // user variables in the linker object list need to align on ids
+    TUserIdTraverser userIdTraverser(idMap);
+    findLinkerObjects()->traverse(&userIdTraverser);
+}
+
+// Traverser to map an AST ID to what was known from the seeding AST.
+// (It would be nice to put this in a function, but that causes warnings
+// on having no bodies for the copy-constructor/operator=.)
+class TRemapIdTraverser : public TIntermTraverser {
+public:
+    TRemapIdTraverser(const TMap<TString, int>& idMap, int idShift) : idMap(idMap), idShift(idShift) { }
+    // Do the mapping:
+    //  - if the same symbol, adopt the 'this' ID
+    //  - otherwise, ensure a unique ID by shifting to a new space
+    virtual void visitSymbol(TIntermSymbol* symbol)
+    {
+        const TQualifier& qualifier = symbol->getType().getQualifier();
+        bool remapped = false;
+        if (qualifier.isLinkable() || qualifier.builtIn != EbvNone) {
+            auto it = idMap.find(symbol->getName());
+            if (it != idMap.end()) {
+                symbol->changeId(it->second);
+                remapped = true;
+            }
+        }
+        if (!remapped)
+            symbol->changeId(symbol->getId() + idShift);
+    }
+protected:
+    TRemapIdTraverser(TRemapIdTraverser&);
+    TRemapIdTraverser& operator=(TRemapIdTraverser&);
+    const TMap<TString, int>& idMap;
+    int idShift;
+};
+
+void TIntermediate::remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate& unit)
+{
+    // Remap all IDs to either share or be unique, as dictated by the idMap and idShift.
+    TRemapIdTraverser idTraverser(idMap, idShift);
+    unit.getTreeRoot()->traverse(&idTraverser);
+}
+
 //
 // Merge the function bodies and global-level initializers from unitGlobals into globals.
 // Will error check duplication of function bodies for the same signature.
@@ -344,11 +545,16 @@
     }
 
     // Memory...
-    if (symbol.getQualifier().coherent  != unitSymbol.getQualifier().coherent ||
-        symbol.getQualifier().volatil   != unitSymbol.getQualifier().volatil ||
-        symbol.getQualifier().restrict  != unitSymbol.getQualifier().restrict ||
-        symbol.getQualifier().readonly  != unitSymbol.getQualifier().readonly ||
-        symbol.getQualifier().writeonly != unitSymbol.getQualifier().writeonly) {
+    if (symbol.getQualifier().coherent          != unitSymbol.getQualifier().coherent ||
+        symbol.getQualifier().devicecoherent    != unitSymbol.getQualifier().devicecoherent ||
+        symbol.getQualifier().queuefamilycoherent  != unitSymbol.getQualifier().queuefamilycoherent ||
+        symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent ||
+        symbol.getQualifier().subgroupcoherent  != unitSymbol.getQualifier().subgroupcoherent ||
+        symbol.getQualifier().nonprivate        != unitSymbol.getQualifier().nonprivate ||
+        symbol.getQualifier().volatil           != unitSymbol.getQualifier().volatil ||
+        symbol.getQualifier().restrict          != unitSymbol.getQualifier().restrict ||
+        symbol.getQualifier().readonly          != unitSymbol.getQualifier().readonly ||
+        symbol.getQualifier().writeonly         != unitSymbol.getQualifier().writeonly) {
         error(infoSink, "Memory qualifiers must match:");
         writeTypeComparison = true;
     }
@@ -505,6 +711,31 @@
         break;
     case EShLangCompute:
         break;
+
+#ifdef NV_EXTENSIONS
+    case EShLangRayGenNV:
+    case EShLangIntersectNV:
+    case EShLangAnyHitNV:
+    case EShLangClosestHitNV:
+    case EShLangMissNV:
+    case EShLangCallableNV:
+        if (numShaderRecordNVBlocks > 1)
+            error(infoSink, "Only one shaderRecordNVX buffer block is allowed per stage");
+        break;
+    case EShLangMeshNV:
+        if (outputPrimitive == ElgNone)
+            error(infoSink, "At least one shader must specify an output layout primitive");
+        if (vertices == TQualifier::layoutNotSet)
+            error(infoSink, "At least one shader must specify a layout(max_vertices = value)");
+        if (primitives == TQualifier::layoutNotSet)
+            error(infoSink, "At least one shader must specify a layout(max_primitives = value)");
+        // fall through
+    case EShLangTaskNV:
+        if (numTaskNVBlocks > 1)
+            error(infoSink, "Only one taskNV interface block is allowed per shader");
+        break;
+#endif
+
     default:
         error(infoSink, "Unknown Stage.");
         break;
@@ -699,7 +930,7 @@
 
     // TODO: linker functionality: location collision checking
 
-    TIntermSequence& linkObjects = findLinkerObjects();
+    TIntermSequence& linkObjects = findLinkerObjects()->getSequence();
     for (size_t i = 0; i < linkObjects.size(); ++i) {
         const TType& type = linkObjects[i]->getAsTyped()->getType();
         const TQualifier& qualifier = type.getQualifier();
@@ -718,7 +949,7 @@
     }
 }
 
-TIntermSequence& TIntermediate::findLinkerObjects() const
+TIntermAggregate* TIntermediate::findLinkerObjects() const
 {
     // Get the top-level globals
     TIntermSequence& globals = treeRoot->getAsAggregate()->getSequence();
@@ -726,7 +957,7 @@
     // Get the last member of the sequences, expected to be the linker-object lists
     assert(globals.back()->getAsAggregate()->getOp() == EOpLinkerObjects);
 
-    return globals.back()->getAsAggregate()->getSequence();
+    return globals.back()->getAsAggregate();
 }
 
 // See if a variable was both a user-declared output and used.
@@ -734,7 +965,7 @@
 // is more useful, and perhaps the spec should be changed to reflect that.
 bool TIntermediate::userOutputUsed() const
 {
-    const TIntermSequence& linkerObjects = findLinkerObjects();
+    const TIntermSequence& linkerObjects = findLinkerObjects()->getSequence();
 
     bool found = false;
     for (size_t i = 0; i < linkerObjects.size(); ++i) {
@@ -775,7 +1006,7 @@
         return -1;
 
     int size;
-    if (qualifier.isUniformOrBuffer()) {
+    if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) {
         if (type.isSizedArray())
             size = type.getCumulativeArraySize();
         else
@@ -926,10 +1157,19 @@
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
         // TODO: are there valid cases of having an unsized array with a location?  If so, running this code too early.
         TType elementType(type, 0);
-        if (type.isSizedArray())
+        if (type.isSizedArray()
+#ifdef NV_EXTENSIONS
+            && !type.getQualifier().isPerView()
+#endif
+            )
             return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage);
-        else
+        else {
+#ifdef NV_EXTENSIONS
+            // unset perViewNV attributes for arrayed per-view outputs: "perviewNV vec4 v[MAX_VIEWS][3];"
+            elementType.getQualifier().perViewNV = false;
+#endif
             return computeTypeLocationSize(elementType, stage);
+        }
     }
 
     // "The locations consumed by block and structure members are determined by applying the rules above
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
old mode 100755
new mode 100644
index f3a0e41..3fab9ce
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -41,6 +41,8 @@
 #include "../Public/ShaderLang.h"
 #include "Versions.h"
 
+#include <string>
+#include <vector>
 #include <algorithm>
 #include <set>
 #include <array>
@@ -204,6 +206,17 @@
 class TSymbol;
 class TVariable;
 
+#ifdef NV_EXTENSIONS
+//
+// Texture and Sampler transformation mode.
+//
+enum ComputeDerivativeMode {
+    LayoutDerivativeNone,         // default layout as SPV_NV_compute_shader_derivatives not enabled
+    LayoutDerivativeGroupQuads,   // derivative_group_quadsNV
+    LayoutDerivativeGroupLinear,  // derivative_group_linearNV
+};
+#endif
+
 //
 // Set of helper functions to help parse and build the tree.
 //
@@ -223,6 +236,10 @@
 #ifdef NV_EXTENSIONS
         layoutOverrideCoverage(false),
         geoPassthroughEXT(false),
+        numShaderRecordNVBlocks(0),
+        computeDerivativeMode(LayoutDerivativeNone),
+        primitives(TQualifier::layoutNotSet),
+        numTaskNVBlocks(0),
 #endif
         autoMapBindings(false),
         autoMapLocations(false),
@@ -231,6 +248,7 @@
         useUnknownFormat(false),
         hlslOffsets(false),
         useStorageBuffer(false),
+        useVulkanMemoryModel(false),
         hlslIoMapping(false),
         textureSamplerTransformMode(EShTexSampTransKeep),
         needToLegalize(false),
@@ -349,7 +367,7 @@
         if (hlslOffsets)
             processes.addProcess("hlsl-offsets");
     }
-    bool usingHlslOFfsets() const { return hlslOffsets; }
+    bool usingHlslOffsets() const { return hlslOffsets; }
     void setUseStorageBuffer()
     {
         useStorageBuffer = true;
@@ -363,6 +381,12 @@
             processes.addProcess("hlsl-iomap");
     }
     bool usingHlslIoMapping() { return hlslIoMapping; }
+    void setUseVulkanMemoryModel()
+    {
+        useVulkanMemoryModel = true;
+        processes.addProcess("use-vulkan-memory-model");
+    }
+    bool usingVulkanMemoryModel() const { return useVulkanMemoryModel; }
 
     template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
     bool hasCounterBufferName(const TString& name) const {
@@ -406,6 +430,11 @@
     int getNumEntryPoints() const { return numEntryPoints; }
     int getNumErrors() const { return numErrors; }
     void addPushConstantCount() { ++numPushConstants; }
+#ifdef NV_EXTENSIONS
+    void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
+    void addTaskNVCount() { ++numTaskNVBlocks; }
+#endif
+
     bool isRecursive() const { return recursive; }
 
     TIntermSymbol* addSymbol(const TVariable&);
@@ -613,6 +642,16 @@
     bool getLayoutOverrideCoverage() const { return layoutOverrideCoverage; }
     void setGeoPassthroughEXT() { geoPassthroughEXT = true; }
     bool getGeoPassthroughEXT() const { return geoPassthroughEXT; }
+    void setLayoutDerivativeMode(ComputeDerivativeMode mode) { computeDerivativeMode = mode; }
+    ComputeDerivativeMode getLayoutDerivativeModeNone() const { return computeDerivativeMode; }
+    bool setPrimitives(int m)
+    {
+        if (primitives != TQualifier::layoutNotSet)
+            return primitives == m;
+        primitives = m;
+        return true;
+    }
+    int getPrimitives() const { return primitives; }
 #endif
 
     const char* addSemanticName(const TString& name)
@@ -645,6 +684,11 @@
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
     void error(TInfoSink& infoSink, const char*);
     void warn(TInfoSink& infoSink, const char*);
+    void mergeCallGraphs(TInfoSink&, TIntermediate&);
+    void mergeModes(TInfoSink&, TIntermediate&);
+    void mergeTrees(TInfoSink&, TIntermediate&);
+    void seedIdMap(TMap<TString, int>& idMap, int& maxId);
+    void remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate&);
     void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects);
     void mergeImplicitArraySizes(TType&, const TType&);
@@ -652,7 +696,7 @@
     void checkCallGraphCycles(TInfoSink&);
     void checkCallGraphBodies(TInfoSink&, bool keepUncalled);
     void inOutLocationCheck(TInfoSink&);
-    TIntermSequence& findLinkerObjects() const;
+    TIntermAggregate* findLinkerObjects() const;
     bool userOutputUsed() const;
     bool isSpecializationOperation(const TIntermOperator&) const;
     bool isNonuniformPropagating(TOperator) const;
@@ -674,6 +718,8 @@
     EShSource source;            // source language, known a bit later
     std::string entryPointName;
     std::string entryPointMangledName;
+    typedef std::list<TCall> TGraph;
+    TGraph callGraph;
 
     EProfile profile;                           // source profile
     int version;                                // source version
@@ -703,18 +749,23 @@
     bool hlslFunctionality1;
     int blendEquations;        // an 'or'ing of masks of shifts of TBlendEquationShift
     bool xfbMode;
+    std::vector<TXfbBuffer> xfbBuffers;     // all the data we need to track per xfb buffer
     bool multiStream;
 
 #ifdef NV_EXTENSIONS
     bool layoutOverrideCoverage;
     bool geoPassthroughEXT;
+    int numShaderRecordNVBlocks;
+    ComputeDerivativeMode computeDerivativeMode;
+    int primitives;
+    int numTaskNVBlocks;
 #endif
 
     // Base shift values
     std::array<unsigned int, EResCount> shiftBinding;
 
     // Per-descriptor-set shift values
-    std::array<std::map<int, int>, EResCount>  shiftBindingForSet;
+    std::array<std::map<int, int>, EResCount> shiftBindingForSet;
 
     std::vector<std::string> resourceSetBinding;
     bool autoMapBindings;
@@ -724,15 +775,12 @@
     bool useUnknownFormat;
     bool hlslOffsets;
     bool useStorageBuffer;
+    bool useVulkanMemoryModel;
     bool hlslIoMapping;
 
-    typedef std::list<TCall> TGraph;
-    TGraph callGraph;
-
     std::set<TString> ioAccessed;           // set of names of statically read/written I/O that might need extra checking
     std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
     std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
-    std::vector<TXfbBuffer> xfbBuffers;     // all the data we need to track per xfb buffer
     std::unordered_set<int> usedConstantId; // specialization constant ids used
     std::set<TString> semanticNameSet;
 
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
old mode 100755
new mode 100644
index 02b93f9..1faa018
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -316,16 +316,32 @@
             ppToken->dval = (double)wholeNumber * exponentValue;
     } else {
         // slow path
+        ppToken->dval = 0.0;
+
+        // remove suffix
+        TString numstr(ppToken->name);
+        if (numstr.back() == 'f' || numstr.back() == 'F')
+            numstr.pop_back();
+        if (numstr.back() == 'h' || numstr.back() == 'H')
+            numstr.pop_back();
+        if (numstr.back() == 'l' || numstr.back() == 'L')
+            numstr.pop_back();
+
+        // use platform library
         strtodStream.clear();
-        strtodStream.str(ppToken->name);
+        strtodStream.str(numstr.c_str());
         strtodStream >> ppToken->dval;
-        // Assume failure combined with a large exponent was overflow, in
-        // an attempt to set INF.  Otherwise, assume underflow, and set 0.0.
         if (strtodStream.fail()) {
+            // Assume failure combined with a large exponent was overflow, in
+            // an attempt to set INF.
             if (!negativeExponent && exponent + numWholeNumberDigits > 300)
                 ppToken->i64val = 0x7ff0000000000000; // +Infinity
-            else
+            // Assume failure combined with a small exponent was overflow.
+            if (negativeExponent && exponent + numWholeNumberDigits > 300)
                 ppToken->dval = 0.0;
+            // Unknown reason for failure. Theory is that either
+            //  - the 0.0 is still there, or
+            //  - something reasonable was written that is better than 0.0
         }
     }
 
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 689d656..49282c3 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -57,9 +57,9 @@
 public:
     TObjectReflection(const TString& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex) :
         name(pName), offset(pOffset),
-        glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), type(pType.clone()), stages(EShLanguageMask(0)) { }
+        glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), stages(EShLanguageMask(0)), type(pType.clone()) { }
 
-    const TType* const getType() const { return type; }
+    const TType* getType() const { return type; }
     int getBinding() const
     {
         if (type == nullptr || !type->getQualifier().hasBinding())
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
old mode 100755
new mode 100644
index 83744d4..4ba1976
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -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 8
+#define GLSLANG_MINOR_VERSION 10
 
 //
 // Call before doing any other compiler/linker operations.
@@ -94,6 +94,14 @@
     EShLangGeometry,
     EShLangFragment,
     EShLangCompute,
+    EShLangRayGenNV,
+    EShLangIntersectNV,
+    EShLangAnyHitNV,
+    EShLangClosestHitNV,
+    EShLangMissNV,
+    EShLangCallableNV,
+    EShLangTaskNV,
+    EShLangMeshNV,
     EShLangCount,
 } EShLanguage;         // would be better as stage, but this is ancient now
 
@@ -104,6 +112,14 @@
     EShLangGeometryMask       = (1 << EShLangGeometry),
     EShLangFragmentMask       = (1 << EShLangFragment),
     EShLangComputeMask        = (1 << EShLangCompute),
+    EShLangRayGenNVMask       = (1 << EShLangRayGenNV),
+    EShLangIntersectNVMask    = (1 << EShLangIntersectNV),
+    EShLangAnyHitNVMask       = (1 << EShLangAnyHitNV),
+    EShLangClosestHitNVMask   = (1 << EShLangClosestHitNV),
+    EShLangMissNVMask         = (1 << EShLangMissNV),
+    EShLangCallableNVMask     = (1 << EShLangCallableNV),
+    EShLangTaskNVMask         = (1 << EShLangTaskNV),
+    EShLangMeshNVMask         = (1 << EShLangMeshNV),
 } EShLanguageMask;
 
 namespace glslang {
@@ -532,6 +548,8 @@
         return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer);
     }
 
+    // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string
+    // is not an officially supported or fully working path.
     bool preprocess(const TBuiltInResource* builtInResources,
                     int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
                     bool forwardCompatible, EShMessages message, std::string* outputString,
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
old mode 100755
new mode 100644
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
old mode 100755
new mode 100644
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index 0a616d8..22892f0 100644
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -79,6 +79,7 @@
         std::vector<uint32_t> spirv_binary;
         glslang::SpvOptions options;
         options.disableOptimizer = true;
+        options.validate = true;
         glslang::GlslangToSpv(*program.getIntermediate(shaders.front()->getStage()),
                                 spirv_binary, &logger, &options);
 
@@ -106,6 +107,7 @@
     Glsl, LinkTestVulkan,
     ::testing::ValuesIn(std::vector<std::vector<std::string>>({
         {"link1.vk.frag", "link2.vk.frag"},
+        {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"},
     })),
 );
 // clang-format on
diff --git a/gtests/Pp.FromFile.cpp b/gtests/Pp.FromFile.cpp
old mode 100755
new mode 100644
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
old mode 100755
new mode 100644
index 786d9ff..29e75bb
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -286,6 +286,8 @@
         "spv.matrix.frag",
         "spv.matrix2.frag",
         "spv.memoryQualifier.frag",
+        "spv.memoryScopeSemantics.comp",
+        "spv.memoryScopeSemantics_Error.comp",
         "spv.merge-unreachable.frag",
         "spv.multiStruct.comp",
         "spv.multiStructFuncall.frag",
@@ -499,6 +501,30 @@
     "spv.multiviewPerViewAttributes.vert",
     "spv.multiviewPerViewAttributes.tesc",
     "spv.atomicInt64.comp",
+    "spv.shadingRate.frag",
+    "spv.RayGenShader.rgen",
+    "spv.RayGenShader_Errors.rgen",
+    "spv.RayConstants.rgen",
+    "spv.IntersectShader.rint",
+    "spv.IntersectShader_Errors.rint",
+    "spv.AnyHitShader.rahit",
+    "spv.AnyHitShader_Errors.rahit",
+    "spv.ClosestHitShader.rchit",
+    "spv.ClosestHitShader_Errors.rchit",
+    "spv.MissShader.rmiss",
+    "spv.MissShader_Errors.rmiss",
+    "spv.fragmentShaderBarycentric.frag",
+    "spv.fragmentShaderBarycentric2.frag",
+    "spv.computeShaderDerivatives.comp",
+    "spv.computeShaderDerivatives2.comp",
+    "spv.shaderImageFootprint.frag",
+    "spv.meshShaderBuiltins.mesh",
+    "spv.meshShaderUserDefined.mesh",
+    "spv.meshShaderPerViewBuiltins.mesh",
+    "spv.meshShaderPerViewUserDefined.mesh",
+    "spv.meshShaderSharedMem.mesh",
+    "spv.meshShaderTaskMem.mesh",
+    "spv.meshTaskShader.task",
 })),
 FileNameAsCustomTestSuffix
 );
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index 77bada5..d899c78 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -60,6 +60,24 @@
         return EShLangFragment;
     } else if (stage == "comp") {
         return EShLangCompute;
+#ifdef NV_EXTENSIONS
+    } else if (stage == "rgen") {
+        return EShLangRayGenNV;
+    } else if (stage == "rint") {
+        return EShLangIntersectNV;
+    } else if (stage == "rahit") {
+        return EShLangAnyHitNV;
+    } else if (stage == "rchit") {
+        return EShLangClosestHitNV;
+    } else if (stage == "rmiss") {
+        return EShLangMissNV;
+    } else if (stage == "rcall") {
+        return EShLangCallableNV;
+    } else if (stage == "task") {
+        return EShLangTaskNV;
+    } else if (stage == "mesh") {
+        return EShLangMeshNV;
+#endif
     } else {
         assert(0 && "Unknown shader stage");
         return EShLangCount;
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
old mode 100644
new mode 100755
index a58978d..3329fa3
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -243,6 +243,7 @@
             std::vector<uint32_t> spirv_binary;
             glslang::SpvOptions options;
             options.disableOptimizer = !enableOptimizer;
+            options.validate = true;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options);
 
@@ -298,8 +299,10 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
+            glslang::SpvOptions options;
+            options.validate = true;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
-                                  spirv_binary, &logger);
+                                  spirv_binary, &logger, &options);
 
             std::ostringstream disassembly_stream;
             spv::Parameterize();
@@ -338,8 +341,10 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
+            glslang::SpvOptions options;
+            options.validate = true;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
-                                  spirv_binary, &logger);
+                                  spirv_binary, &logger, &options);
 
             spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
 
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
old mode 100755
new mode 100644
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
old mode 100755
new mode 100644
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslOpMap.cpp b/hlsl/hlslOpMap.cpp
old mode 100755
new mode 100644
diff --git a/hlsl/hlslOpMap.h b/hlsl/hlslOpMap.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
old mode 100755
new mode 100644
index 9471f77..1672365
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -6246,7 +6246,8 @@
     bool constructingMatrix = false;
     switch (op) {
     case EOpConstructTextureSampler:
-        return constructorTextureSamplerError(loc, function);
+        error(loc, "unhandled texture constructor", "constructor", "");
+        return true;
     case EOpConstructMat2x2:
     case EOpConstructMat2x3:
     case EOpConstructMat2x4:
@@ -6438,67 +6439,6 @@
            (node->getAsAggregate() == nullptr || node->getAsAggregate()->getOp() != EOpNull);
 }
 
-// Verify all the correct semantics for constructing a combined texture/sampler.
-// Return true if the semantics are incorrect.
-bool HlslParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const TFunction& function)
-{
-    TString constructorName = function.getType().getBasicTypeString();  // TODO: performance: should not be making copy; interface needs to change
-    const char* token = constructorName.c_str();
-
-    // exactly two arguments needed
-    if (function.getParamCount() != 2) {
-        error(loc, "sampler-constructor requires two arguments", token, "");
-        return true;
-    }
-
-    // For now, not allowing arrayed constructors, the rest of this function
-    // is set up to allow them, if this test is removed:
-    if (function.getType().isArray()) {
-        error(loc, "sampler-constructor cannot make an array of samplers", token, "");
-        return true;
-    }
-
-    // first argument
-    //  * the constructor's first argument must be a texture type
-    //  * the dimensionality (1D, 2D, 3D, Cube, Rect, Buffer, MS, and Array)
-    //    of the texture type must match that of the constructed sampler type
-    //    (that is, the suffixes of the type of the first argument and the
-    //    type of the constructor will be spelled the same way)
-    if (function[0].type->getBasicType() != EbtSampler ||
-        ! function[0].type->getSampler().isTexture() ||
-        function[0].type->isArray()) {
-        error(loc, "sampler-constructor first argument must be a scalar textureXXX type", token, "");
-        return true;
-    }
-    // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=()
-    TSampler texture = function.getType().getSampler();
-    texture.combined = false;
-    texture.shadow = false;
-    if (texture != function[0].type->getSampler()) {
-        error(loc, "sampler-constructor first argument must match type and dimensionality of constructor type", token, "");
-        return true;
-    }
-
-    // second argument
-    //   * the constructor's second argument must be a scalar of type
-    //     *sampler* or *samplerShadow*
-    //   * the presence or absence of depth comparison (Shadow) must match
-    //     between the constructed sampler type and the type of the second argument
-    if (function[1].type->getBasicType() != EbtSampler ||
-        ! function[1].type->getSampler().isPureSampler() ||
-        function[1].type->isArray()) {
-        error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, "");
-        return true;
-    }
-    if (function.getType().getSampler().shadow != function[1].type->getSampler().shadow) {
-        error(loc, "sampler-constructor second argument presence of shadow must match constructor presence of shadow",
-              token, "");
-        return true;
-    }
-
-    return false;
-}
-
 // Checks to see if a void variable has been declared and raise an error message for such a case
 //
 // returns true in case of an error
@@ -8175,8 +8115,6 @@
     TIntermAggregate* aggrNode = node->getAsAggregate();
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
-    // Combined texture-sampler constructors are completely semantic checked
-    // in constructorTextureSamplerError()
     if (op == EOpConstructTextureSampler)
         return intermediate.setAggregateOperator(aggrNode, op, type, loc);
 
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
old mode 100755
new mode 100644
index 32a1923..7cb898c
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -122,7 +122,6 @@
     void integerCheck(const TIntermTyped* node, const char* token);
     void globalCheck(const TSourceLoc&, const char* token);
     bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&);
-    bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&);
     void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&);
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
     void structArrayCheck(const TSourceLoc&, const TType& structure);
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
old mode 100755
new mode 100644
index cc847ae..6500091
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -605,7 +605,7 @@
         { "determinant",                      "S",     "F",       "M",              "F",             EShLangAll,    false },
         { "DeviceMemoryBarrier",              nullptr, nullptr,   "-",              "-",             EShLangPSCS,   false },
         { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
-        { "distance",                         "S",     "F",       "V,",             "F,",            EShLangAll,    false },
+        { "distance",                         "S",     "F",       "SV,",            "F,",            EShLangAll,    false },
         { "dot",                              "S",     nullptr,   "SV,",            "FI,",           EShLangAll,    false },
         { "dst",                              nullptr, nullptr,   "V4,",            "F,",            EShLangAll,    false },
         // { "errorf",                           "-",     "-",       "",             "",             EShLangAll,    false }, TODO: varargs
diff --git a/hlsl/hlslParseables.h b/hlsl/hlslParseables.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
old mode 100755
new mode 100644
diff --git a/hlsl/hlslScanContext.h b/hlsl/hlslScanContext.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslTokenStream.cpp b/hlsl/hlslTokenStream.cpp
old mode 100755
new mode 100644
diff --git a/hlsl/hlslTokenStream.h b/hlsl/hlslTokenStream.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
old mode 100755
new mode 100644
diff --git a/known_good.json b/known_good.json
old mode 100644
new mode 100755
index 6659349..aac6853
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "f2c93c6e124836797311facb8449f9a0b76fefc2"
+      "commit" : "9bfe0eb25e3dfdf4f3fd86ab6c0cda009c9bd661"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "12f8de9f04327336b699b1b80aa390ae7f9ddbf4"
+      "commit" : "d5b2e1255f706ce1f88812217e9a554f299848af"
     }
   ]
 }
diff --git a/known_good_khr.json b/known_good_khr.json
old mode 100755
new mode 100644
diff --git a/update_glslang_sources.py b/update_glslang_sources.py
index a1cc038..65be2f6 100755
--- a/update_glslang_sources.py
+++ b/update_glslang_sources.py
@@ -96,7 +96,7 @@
     def AddRemote(self):
         """Add the remote 'known-good' if it does not exist."""
         remotes = command_output(['git', 'remote'], self.subdir).splitlines()
-        if 'known-good' not in remotes:
+        if b'known-good' not in remotes:
             command_output(['git', 'remote', 'add', 'known-good', self.GetUrl()], self.subdir)
 
     def HasCommit(self):